Storefront Konfiguration
Feature Flags
Feature Flags werden über Umgebungsvariablen gesetzt und steuern optionale Funktionen der Storefront.
| Variable | Typ | Standard | Beschreibung |
|---|---|---|---|
NUXT_PUBLIC_SHOP_BITE_FEATURE_MULTI_CHANNEL | boolean | false | Aktiviert den Verkaufskanal-Wechsler im Header. Verwenden Sie dies, wenn Sie mehrere Standorte unter einer Storefront betreiben. |
NUXT_PUBLIC_SHOP_BITE_FEATURE_SECURE_KEY | string | (leer) | Wenn gesetzt, wird die gesamte Storefront hinter diesem Schlüssel gesperrt. Besucher müssen einmalig ?secureKey=<Wert> in der URL angeben; der Schlüssel wird dann für 30 Tage in einem Cookie gespeichert. Ohne gültigen Cookie werden alle Seiten auf /maintenance weitergeleitet. Leer lassen zum Deaktivieren. |
NUXT_PUBLIC_SHOP_BITE_FEATURE_CONTACT_FORM | boolean | false | Aktiviert die /kontakt-Seite. Bei false gibt die Seite einen 404-Fehler zurück. |
NUXT_PUBLIC_SHOP_BITE_FEATURE_DEMO_BANNER | boolean | false | Zeigt über dem Header einen nicht schließbaren Hinweis, dass es sich um einen Demo-Shop handelt und Bestellungen nicht bearbeitet werden. Für Demo-Shops in demos/ aktivieren. |
NUXT_PUBLIC_SHOP_BITE_MENU_CATEGORY_ID | string | "main-navigation" | Die Shopware-Kategorie-ID, die als Wurzel des Navigationsmenüs verwendet wird. |
NUXT_PUBLIC_SHOP_BITE_ADDRESS_AUTOCOMPLETE_BOUNDING_BOX | string | (leer) | Rechteck lon1,lat1,lon2,lat2, auf das die Adress-Vorschläge (Geoapify) im Checkout eingeschränkt werden, z. B. 8.822251,50.055026,8.899077,50.104327. Nur Komfort: Wohin geliefert wird, entscheiden die Cart Rules in Shopware. Leer lassen für Vorschläge ohne Einschränkung. |
Beispiel .env:
NUXT_PUBLIC_SHOP_BITE_FEATURE_MULTI_CHANNEL=false
NUXT_PUBLIC_SHOP_BITE_FEATURE_SECURE_KEY=
NUXT_PUBLIC_SHOP_BITE_FEATURE_CONTACT_FORM=false
NUXT_PUBLIC_SHOP_BITE_FEATURE_DEMO_BANNER=false
NUXT_PUBLIC_SHOP_BITE_MENU_CATEGORY_ID=main-navigation
NUXT_PUBLIC_SHOP_BITE_ADDRESS_AUTOCOMPLETE_BOUNDING_BOX="8.822251,50.055026,8.899077,50.104327"
SEO
Die Storefront gibt Sitemap, Canonical-URLs, Vorschaubilder für geteilte Links und Seitentitel automatisch aus. Gesteuert wird das über Umgebungsvariablen.
| Variable | Standard | Beschreibung |
|---|---|---|
NUXT_PUBLIC_STORE_URL | (leer) | Öffentliche URL des Shops, z. B. https://www.mein-shop.de. Basis für Canonical-URLs, og:url, og:image, die Sitemap und den Sitemap-Eintrag in robots.txt. Ohne Wert wird die Request-URL verwendet, die hinter einem Reverse-Proxy falsch sein kann. |
NUXT_PUBLIC_SITE_NAME | NUXT_STORE_NAME beim Build | Shopname in Seitentiteln und og:site_name. |
NUXT_PUBLIC_SITE_TITLE_TEMPLATE | siehe unten | Vorlage für Seitentitel. %s steht für den Seitentitel, %siteName für den Shopname. Leer lassen, um nur den Seitentitel auszugeben. |
NUXT_PUBLIC_SITE_OG_IMAGE | /card.png | Vorschaubild beim Teilen per WhatsApp oder Facebook für Seiten ohne eigenes Bild. Pfad relativ zu public/ oder absolute URL, ausgegeben wird immer eine absolute URL. |
NUXT_PUBLIC_SITE_ADDRESS_CITY | (leer) | Ort, z. B. Obertshausen. Fließt in Titel und Beschreibung der Startseite und in den Footer. |
NUXT_PUBLIC_SITE_CUISINE | (leer) | Küche, z. B. Italienisch-deutsche Küche. Fließt in die Beschreibung der Startseite. |
Beispiel .env:
NUXT_PUBLIC_STORE_URL="https://www.mein-shop.de"
NUXT_PUBLIC_SITE_NAME="Pizzeria Mustermann"
NUXT_PUBLIC_SITE_TITLE_TEMPLATE="%s | %siteName – Online bestellen"
NUXT_PUBLIC_SITE_OG_IMAGE="/card.png"
NUXT_PUBLIC_SITE_ADDRESS_CITY="Obertshausen"
NUXT_PUBLIC_SITE_CUISINE="Italienisch-deutsche Küche"
Seitentitel und Beschreibung
- Unterseiten und Kategorien erhalten die Titelvorlage, z. B.
Pizza | Pizzeria Mustermann – Online bestellen. Kategorien verwenden Meta-Titel und Meta-Beschreibung aus Shopware, sonst Name und Beschreibung der Kategorie. - Die Startseite verwendet keine Vorlage. Standardtitel ist
<Shopname> <Ort> | Online bestellen & liefern lassen, die Beschreibung wird aus Küche, Ort und Shopname gebildet. - Eigene Werte für die Startseite setzen Sie in
content/index.ymlunterseo. Sie haben Vorrang vor den Standardwerten, aber nur, wenn sie sich vontitleunddescriptionder Seite unterscheiden: Nuxt Content fülltseosonst automatisch mit diesen Werten.
seo:
title: Pizzeria Mustermann Obertshausen | Pizza online bestellen
description: Pizza, Pasta und Salate in Obertshausen online bestellen, liefern lassen oder abholen.
image: /card.png
Vorschaubild (og:image)
Kategorieseiten verwenden das Kategoriebild aus Shopware, die Startseite seo.image aus content/index.yml. Alle anderen Seiten fallen auf NUXT_PUBLIC_SITE_OG_IMAGE zurück. twitter:card ist summary_large_image.
Das Standardbild /card.png zeigt die ShopBite-Demo. Legen Sie im Shop-Projekt eine eigene public/card.png ab (empfohlen 1200 × 630 px), sie ersetzt das Standardbild. Die Vorschau prüfen Sie mit dem Facebook Sharing Debugger. WhatsApp speichert Vorschauen eine Weile zwischen.
Sitemap
Unter /sitemap.xml stehen:
- die Startseite
- Content-Seiten aus
content/(z. B. Zahlung und Versand) - alle Kategorien der Hauptnavigation und des Speisekarten-Baums (
NUXT_PUBLIC_SHOP_BITE_MENU_CATEGORY_ID) mit ihrer SEO-URL, Änderungsdatum und Kategoriebild /kontakt, wenn das Kontaktformular aktiv ist
robots.txt verweist automatisch auf die Sitemap. Pfade, die per robots.disallow gesperrt sind, erscheinen nicht in der Sitemap. Eine einzelne Content-Seite schließen Sie mit sitemap: false im Frontmatter aus. Die Sitemap wird zehn Minuten zwischengespeichert.
Die Kategorie-URLs kommen aus den SEO-URL-Templates in Shopware. Ein abschließender Schrägstrich (z. B. /c/Pizza/) bleibt in Sitemap und Canonical-URL erhalten.
Kontaktdaten und Öffnungszeiten im Footer
Der Footer zeigt Adresse, Telefon, einen Link zum Google Business Profil und die Öffnungszeiten auf jeder Seite als Text im HTML. Suchmaschinen lesen so Name, Adresse und Telefon (NAP) direkt aus dem Shop, das stärkt das lokale Ranking. Die Angaben sollten exakt mit dem Google Business Profil und dem Impressum übereinstimmen.
| Variable | Standard | Beschreibung |
|---|---|---|
NUXT_PUBLIC_SITE_ADDRESS_STREET | (leer) | Straße und Hausnummer, z. B. Kantstr. 6. |
NUXT_PUBLIC_SITE_ADDRESS_POSTAL_CODE | (leer) | Postleitzahl, z. B. 63179. |
NUXT_PUBLIC_SITE_ADDRESS_CITY | (leer) | Ort, siehe SEO. |
NUXT_PUBLIC_SITE_TELEPHONE | (leer) | Telefonnummer, wie sie angezeigt werden soll, z. B. +49 6104 71427. Der tel:-Link wird daraus automatisch erzeugt; er steckt auch hinter dem Telefon-Symbol im Header und dem „Jetzt anrufen“ auf der Bestellseite. Ohne Nummer werden diese Elemente ausgeblendet. |
NUXT_PUBLIC_SITE_GOOGLE_BUSINESS_PROFILE_URL | (leer) | Link zum Google Business Profil, z. B. aus Google Maps über „Teilen“. |
Der Shopname kommt aus NUXT_PUBLIC_SITE_NAME. Leere Werte blendet der Footer aus. Ohne Kontaktdaten und ohne Öffnungszeiten bleibt der Footer wie bisher.
Die Öffnungszeiten stammen aus den Geschäftszeiten des ShopBite-Plugins in Shopware. Aufeinanderfolgende Tage mit gleichen Zeiten werden zusammengefasst (z. B. Mi–Fr), Tage ohne Zeiten erscheinen als „Ruhetag“.
Beispiel .env:
NUXT_PUBLIC_SITE_ADDRESS_STREET="Kantstr. 6"
NUXT_PUBLIC_SITE_ADDRESS_POSTAL_CODE="63179"
NUXT_PUBLIC_SITE_ADDRESS_CITY="Obertshausen"
NUXT_PUBLIC_SITE_TELEPHONE="+49 6104 71427"
NUXT_PUBLIC_SITE_GOOGLE_BUSINESS_PROFILE_URL="https://maps.app.goo.gl/..."
Pflegen Sie Adresse und Telefon nicht zusätzlich als Link-Kategorien in der Shopware-Footer-Navigation, sonst erscheinen sie doppelt.
Markenfarbe und Kontrast
Die Markenfarbe wird in app/assets/css/main.css als Farbskala --color-brand-50 bis --color-brand-950 gesetzt, entweder auf eine Tailwind-Skala gemappt oder als eigene Hex-Werte. Die Storefront leitet daraus die Primärfarbe ab: im hellen Modus brand-600, im dunklen Modus brand-400 (die Konvention von Nuxt UI).
@import "@shopbite-de/storefront/app/assets/css/main.css";
@theme {
--color-brand-50: var(--color-rose-50);
/* ... */
--color-brand-400: var(--color-rose-400);
--color-brand-500: var(--color-rose-500);
--color-brand-600: var(--color-rose-600);
/* ... */
--color-brand-950: var(--color-rose-950);
}
Text in der Primärfarbe (Überschriften, Links, Produktnummern) und Text auf Buttons in der Primärfarbe brauchen ein Kontrastverhältnis von mindestens 4,5:1 (WCAG AA), sonst meldet Lighthouse unter „Accessibility“ einen Kontrastfehler. Dezente Buttons und Badges (variant: subtle) legen die Farbe auf einen hellen Farbton ihrer selbst, deshalb sollte die helle Stufe 5:1 auf Weiß erreichen. Prüfen Sie daher zwei Werte, z. B. mit dem Contrast Checker:
| Stufe | Hintergrund | Mindestkontrast |
|---|---|---|
brand-600 | Weiß #ffffff | 5:1 |
brand-400 | Dunkel #171717 | 4,5:1 |
Erreicht die Farbe des Kunden das nicht, wählen Sie für die Stufen 600 und 400 dunklere bzw. hellere Werte; die Stufe 500 bleibt frei für Akzente ohne Text.
Nuxt Config
Some examples how to configure the storefront. Checkout the Nuxt Config for more information.
export default defineNuxtConfig({
app: {
head: {
title: "My Store",
htmlAttrs: {
lang: "de",
},
meta: [
{charset: "utf-8"},
{name: "viewport", content: "width=device-width, initial-scale=1"},
{name: "description", content: "My Store description"},
{property: "og:title", content: "My Store"},
{property: "og:description", content: "My Store description",},
],
link: [{rel: "icon", href: "/favicon.ico"}],
},
},
runtimeConfig: {
public: {
site: {
name: "My Store",
description: "My Store description",
countryId: "",
titleTemplate: "%s | %siteName – Online bestellen",
ogImage: "/card.png",
cuisine: "Italienische Küche",
address: {
street: "Kantstr. 6",
postalCode: "63179",
city: "Obertshausen",
},
telephone: "+49 6104 71427",
googleBusinessProfileUrl: "https://maps.app.goo.gl/...",
},
},
},
colorMode: {
preference: "light",
},
pwa: {
manifest: {
name: "My Store",
short_name: "mystore",
theme_color: "#4d7c0f",
icons: [
{
src: "log192x192.png",
sizes: "192x192",
type: "image/png",
purpose: "any maskable",
}
],
},
},
})
Strukturierte Daten (schema.org)
Die Storefront gibt JSON-LD aus, damit Google den Shop als Restaurant mit Öffnungszeiten und Speisekarte versteht:
- Startseite:
Restaurant(einLocalBusiness) mit Name, Adresse, Telefon, Küche, Preisklasse, Bild, Link zum Google Business Profil, den wöchentlichen Öffnungszeiten (openingHoursSpecification) und Schließtagen (specialOpeningHoursSpecification) aus dem ShopBite-Plugin sowiehasMenumit einerMenuSectionje Kategorie der Speisekarte. - Kategorieseiten:
MenuSectionmit den Produkten der Kategorie alsMenuIteminklusive Preis (offers), dazu wie bisherCollectionPageundBreadcrumbList.
Die Werte kommen aus denselben Variablen wie der Footer (NUXT_PUBLIC_SITE_NAME, NUXT_PUBLIC_SITE_ADDRESS_*, NUXT_PUBLIC_SITE_TELEPHONE, NUXT_PUBLIC_SITE_CUISINE, NUXT_PUBLIC_SITE_GOOGLE_BUSINESS_PROFILE_URL, NUXT_PUBLIC_SITE_OG_IMAGE). Zwei Variablen gibt es nur für das Schema:
| Variable | Standard | Beschreibung |
|---|---|---|
NUXT_PUBLIC_SITE_ADDRESS_COUNTRY | DE | Land der Adresse als ISO-Code. |
NUXT_PUBLIC_SITE_PRICE_RANGE | (leer) | Preisklasse, z. B. €€. |
Leere Werte werden weggelassen. Prüfen Sie das Ergebnis mit dem Rich Results Test oder dem Schema Markup Validator: Beide sollten auf der Startseite ein Restaurant mit Öffnungszeiten erkennen.