Zum Inhalt springen
Stone & Water
Doku · 14 SEO-URLs

SEO-URLs · regelbasiert, mehrsprachig, reindex-fest

Das PIM erzeugt Produkt-URLs nach festen Regeln, je Shop und Sprache, für Hauptartikel und Varianten. Wahlweise bearbeitest du die native Shopware-URL direkt oder nutzt das Zwei-Generator-System mit vollständigem Kategoriepfad.

Zwei Modi: Shopware-Standard oder Zwei-Generator-System

Alle Einstellungen liegen in der Konfigmatrix im Tab „SEO-URLs".

Shopware-Standard-SEO-URL

Mit dem Schalter „Shopware-Standard-SEO-URL verwenden" bearbeitest du die native Shopware-URL je Produkt direkt im PIM, die beiden Generatoren sind dann deaktiviert. Zwei Zusatzschalter blenden das Feld auch im Varianten-Fenster und im Quickview ein. Ab Werk ist der Modus aus.

Zwei-Generator-System

  1. URL im Zusatzfeld generieren: Ein Token-Pattern wird je Variante und Sprache aufgelöst und in ein Zusatzfeld am Produkt geschrieben.
  2. SEO URLs generieren: Ein Twig-Pattern liest dieses Feld und wird als Shopwares SEO-URL-Vorlage für die Produktdetailseite hinterlegt.
Wann was? Das Zwei-Generator-System passt für regelbasierte URLs mit Kategoriepfad über viele Produkte. Der Standard-Modus genügt, wenn du einzelne URLs von Hand pflegen willst.

Schritt 1: URL im Zusatzfeld generieren

Im Feld-Pattern (Token) setzt du den Pfad aus Variablen zusammen, etwa {mainCategoryPath}/{name}. Ein Klick auf eine Variable fügt sie an der Cursorposition ein. Das Ergebnis landet im Zusatzfeld staw_pim_canonical. Ist „Eigenes Pattern pro Shop" aktiv, schreibt das PIM je Shop in ein eigenes Feld staw_pim_canonical_<shop>, gebildet aus dem Namen des Verkaufskanals.

  • Kategorie-Pfad-Quelle: SEO-Hauptkategorie pro Kanal (Standard) oder erste zugewiesene Kategorie
  • Trennzeichen: Bindestrich (Standard) oder Unterstrich
  • Oberste Kategorie-Ebene einbeziehen: Standard aus
  • Kleinschreibung und Umlaute umwandeln: Standard an
  • Vorschau mit einem Beispielprodukt, umschaltbar zwischen den Sprachen

„URL im Zusatzfeld generieren" öffnet ein Fenster zur Wahl von Shops und Sprachen. Für die gewählten Kombinationen werden vorhandene Werte überschrieben, identische Werte überspringt das PIM. Für ein einzelnes Produkt füllt der Knopf „Aus Pattern generieren" in den Stammdaten und im Varianten-Fenster das Feld, danach speicherst du wie gewohnt. Beim Duplizieren erzeugt das PIM Zusatzfeld und SEO-URL für die Kopie und ihre Varianten neu.

Alle Variablen

VariableInhalt
{name}Produktname
{number}Artikelnummer
{manufacturer}Herstellername
{manufacturerNumber}Hersteller-Artikelnummer (MPN)
{ean}EAN / GTIN
{metaTitle}Meta-Title des Produkts
{category}Name der ersten zugewiesenen Kategorie
{categoryPath}Vollständiger Pfad der ersten Kategorie
{mainCategory}Name der Hauptkategorie, je nach Quelle
{mainCategoryPath}Vollständiger Pfad der Hauptkategorie
{properties}Eigenschaftswerte
{options}Varianten-Optionen
{tags}Tags

Schritt 2: SEO URLs generieren mit Twig

Das URL-Pattern (Twig) liest die Zusatzfelder. Variablen-Knöpfe fügen fertige Ausdrücke ein: Name, Name (klein), Bestellnummer, EAN, Hersteller, Herstellernr., Produkt-ID, Breadcrumb, Breadcrumb ohne erste Ebene, beliebiges Zusatzfeld, Canonical-Feld und eine Abfrage für migrierte URLs:

{% if product.customFields.staw_url_product_detail|default('')|trim %}{{ product.customFields.staw_url_product_detail|raw }}{% else %}{{ product.translated.customFields.staw_pim_canonical|raw }}{% endif %}

Migrierte Produkte behalten so ihre bisherige URL, neue nutzen das Feld aus Schritt 1. Beim Generieren schreibt das PIM das Pattern je gewähltem Shop als SEO-URL-Vorlage (seo_url_template) der Produktdetailseite und erzeugt die URLs der gewählten Shops und Sprachen über Shopwares eigenen SEO-Generator. Bestehende Produkt-URLs werden dafür freigegeben, geänderte Pfade bleiben als Weiterleitung erhalten. Weil die Vorlage in Shopware hinterlegt ist, erzeugt auch eine spätere Neu-Indexierung dieselben URLs.

  • Ausgaben von Feldern wie staw_pim_canonical… oder staw_url_… bekommen automatisch |raw, damit Shopware die Schrägstriche im Pfad nicht in Bindestriche umwandelt.
  • Gibt das Pattern für ein Produkt nichts aus, nimmt Shopware den Produktnamen statt eines leeren Pfads.

Pattern-Editor und Shop-Patterns

Beide Schritte kennen „Eigenes Pattern pro Shop". Die Shop-Patterns erscheinen als Liste mit Shopname und Pattern, per Stift bearbeitest du sie, per Papierkorb entfernst du sie. „Pattern für Shop hinzufügen" öffnet den Editor mit Kanalauswahl. Shops ohne eigenes Pattern nutzen das Standard-Pattern.

  • Das Eingabefeld wächst mit, auch lange {% if %}-Abfragen bleiben lesbar.
  • Die Variablen-Knöpfe passen sich an: Token für Schritt 1, Twig-Ausdrücke für Schritt 2.
  • Ein Twig-Pattern wird laufend auf gültige Syntax geprüft. Fehler erscheinen rot, Speichern ist dann gesperrt.
  • Stehen Token wie {name} in einem Twig-Pattern, warnt der Editor: Dort werden sie nicht aufgelöst.

Generierungs-Fenster und Optionen

Beide Generatoren öffnen ein Fenster, in dem du Shops und Sprachen wählst, gruppiert nach Verkaufskanal, mit „Alle auswählen" global und je Gruppe. Für Schritt 2 gibt es zusätzlich:

  • Alte URLs als 301 behalten (Standard an): Bei Pfadänderung bleibt die alte URL als Weiterleitung.
  • Nur fehlende SEO-URLs erzeugen (Standard an): Produkte mit vorhandener URL bleiben unberührt.
  • Alle Produkt-URLs entfernen (Reset) (Standard aus): löscht zuerst alle Produkt-URLs der gewählten Kanäle und Sprachen. Die beiden Optionen darüber entfallen dann.
  • Vorschau: bis zu drei Beispielprodukte aus dem Kanal mit bisherigem und neuem Pfad.
  • Probelauf (Dry-Run): rechnet den Lauf mit diesen Optionen durch, ohne zu schreiben.

Die drei Optionen wertet der Probelauf aus, ebenso der Konsolenbefehl. Der Knopf „SEO URLs generieren" setzt die Shop-Vorlage und lässt Shopware die URLs erzeugen.

Ergebnis und Konflikte

Probelauf und Konsolenbefehl melden geschriebene, unveränderte und übersprungene URLs, Weiterleitungen und Produkte ohne gerenderten Pfad. Lösen zwei Produkte im selben Shop und in derselben Sprache denselben Pfad auf, gewinnt das erste, das zweite wird mit Artikelnummer als Konflikt gelistet. Ist ein Pfad schon von einer Kategorie oder Seite belegt, wird das Produkt übersprungen und als „Pfad bereits anderweitig vergeben" gezählt.

Gleiche URL in verschiedenen Shops ist kein Konflikt: Eindeutig sein muss ein Pfad nur je Shop und Sprache. Bei echten Konflikten hilft ein eindeutigeres Pattern wie {mainCategoryPath}/{name}-{options}.

Slug-Regeln

  • ä, ö, ü und ß werden zu ae, oe, ue und ss, sofern „Umlaute umwandeln" an ist. Andere Sonderzeichen werden in lateinische Buchstaben umgeschrieben.
  • Alles außer Buchstaben, Ziffern, Schrägstrich und Punkt wird zum Trennzeichen. Kategorienamen mit „/" und Endungen wie .html bleiben so erhalten.
  • Doppelte Trennzeichen und Schrägstriche werden zusammengefasst, Trennzeichen am Anfang, am Ende und um Schrägstriche entfernt. Ein leeres {options} hinterlässt also keinen Bindestrich.
  • Auch fester Text im Pattern, etwa „für/", durchläuft diese Regeln.

Sprach-Fallback

Name, Hersteller, Kategorien, Optionen, Eigenschaften und Meta-Title kommen in der Sprache, für die generiert wird. Fehlt dort ein Wert, greift die Kette angefragte Sprache → übergeordnete Sprache → Systemsprache, leere Übersetzungen werden übersprungen. So landet keine Standardsprache versehentlich in fremdsprachigen URLs.

Varianten-URLs

Beide Schritte verarbeiten Hauptartikel und Varianten, die im Kanal sichtbar sind. Varianten erben Name, Hersteller, Kategorien, Eigenschaften, Tags und Meta-Title vom Hauptartikel. {options} liefert die eigenen Optionen der Variante, so erzeugt {mainCategoryPath}/{name}-{options} je Variante und Sprache eine eigene URL.

Kategoriepfad

Der Pfad nutzt die SEO-Hauptkategorie des jeweiligen Kanals. Ist keine gesetzt, nimmt das PIM die tiefste zugewiesene Kategorie. Fehlt der von Shopware gepflegte Kategoriepfad, etwa nach einem Import, wird er über die übergeordneten Kategorien rekonstruiert. Die oberste Ebene bleibt außen vor, solange „Oberste Kategorie-Ebene einbeziehen" aus ist.

Konsolenbefehl staw:pim:seo:generate

Für große Kataloge oder zeitgesteuerte Läufe erzeugt der Befehl die URLs eines Kanals direkt auf dem Server. Er nutzt das URL-Pattern aus Schritt 2 für diesen Kanal, schreibt die Ergebnisse in die SEO-URL-Tabelle und markiert sie als manuell geändert, damit Shopwares Indexer sie nicht überschreibt.

bin/console staw:pim:seo:generate --sales-channel="Storefront" --dry-run
bin/console staw:pim:seo:generate -s "Storefront" --overwrite --keep-modified
OptionWirkung
--sales-channel, -sPflicht: Verkaufskanal als Hex-ID oder Name
--language, -lSprach-ID als Hex, Standard ist die Standardsprache des Kanals
--dry-runNur simulieren, nichts schreiben
--no-redirectsAlte URLs hart ersetzen statt als 301 zu behalten
--overwriteAuch bestehende URLs neu schreiben, ohne diese Option nur fehlende
--keep-modifiedManuell geänderte URLs nicht überschreiben

Weiter geht's

Meta-Titles und Beschreibungen erzeugst du mit der KI-Textgenerierung, Hauptkategorien ordnest du in der Kategorien-Verwaltung oder per Mehrfachänderung zu. Alle weiteren Tabs beschreibt die Konfigmatrix.

Häufige Fragen

Überstehen die URLs eine Neu-Indexierung?

Ja. Schritt 2 hinterlegt das Pattern als SEO-Vorlage in Shopware, eine Neu-Indexierung erzeugt daher dieselben URLs. Der Konsolenbefehl markiert seine URLs zusätzlich als manuell geändert.

Gehen bei geänderten Pfaden alte Links verloren?

Nein. Geänderte Pfade bleiben als Weiterleitung erhalten. Nur mit der Option --no-redirects im Konsolenbefehl oder mit dem Reset werden alte URLs entfernt.

Was ist der Unterschied zwischen {category} und {mainCategory}?

{category} nutzt die erste zugewiesene Kategorie, {mainCategory} die SEO-Hauptkategorie des Kanals oder, je nach Einstellung, ebenfalls die erste Kategorie. Die Varianten mit Path liefern jeweils den vollständigen Pfad.

Kann ich je Shop unterschiedliche URLs erzeugen?

Ja. Mit „Eigenes Pattern pro Shop" legst du für Schritt 1 und Schritt 2 je Verkaufskanal eigene Patterns an. Shops ohne eigenes Pattern nutzen das Standard-Pattern.