Shopware SEO-URL
Sprechende Adressen für Produkte und Kategorien, gesteuert über Twig-Templates im Admin.
Definition
Eine SEO-URL ist in Shopware 6 die sprechende Adresse einer Produkt-, Kategorie- oder Landingpage, etwa /Barista-Pro/SW10001 statt /detail/ mit einer technischen ID. Shopware erzeugt sie automatisch aus Templates in Twig-Syntax, die in der Administration unter Einstellungen > Shop > SEO hinterlegt sind.
Für jeden Seitentyp gibt es ein eigenes Template: Produktdetailseite, Kategorieseite und Landingpage. Die Templates gelten global oder je Verkaufskanal, etwa wenn ein B2B-Kanal andere Adressen bekommen soll als der Shop für Endkunden. Standardmäßig setzt Shopware Produkt-URLs aus Produktname und Artikelnummer zusammen, Kategorie-URLs aus dem Pfad der Kategorie und Landingpages aus der URL, die an der Landingpage selbst eingetragen ist.
Weil die Templates Twig sind, lassen sie sich frei kombinieren: Variablen wie product.translated.name, product.productNumber, product.manufacturer.name oder category.seoBreadcrumb liefern die Bausteine, Filter wie lower formen sie um. Unter dem Eingabefeld zeigt ein grüner Haken, dass das Template gültig ist, ein rotes Kreuz meldet einen Fehler. Sonderzeichen wandelt Shopware beim Erzeugen automatisch in URL-taugliche Zeichen um.
Nach einer Änderung baut Shopware die Adressen über den Index neu auf, bei großen Katalogen am zuverlässigsten per Konsole. Alte Adressen bleiben gespeichert und verweisen per Canonical auf die neue. Wer stattdessen echte Weiterleitungen will, aktiviert in den SEO-Einstellungen die Option „Statt Canonical URLs direkt per HTTP 301 auf die aktuellste URL leiten“. Das Template gehört deshalb an den Anfang eines Projekts, denn jede spätere Änderung erzeugt neue URLs, mehr dazu unter 301-Weiterleitung. Bei einem Systemwechsel ist es fester Teil der Shopware Migration.
{{ product.translated.name }}/{{ product.productNumber }}Ergibt Adressen wie /Barista-Pro/SW10001. Die Artikelnummer hält die URL eindeutig, auch wenn zwei Produkte gleich heißen.
{% for part in product.categories.sortByPosition().first.breadcrumb|slice(1) %}{{ part|lower }}/{% endfor %}{{ product.translated.name|lower }}/{{ product.productNumber }}sortByPosition().first nimmt bei mehreren Kategorien die erste nach Position, slice(1) lässt die oberste Ebene des Kategoriebaums weg.
{% for part in category.seoBreadcrumb %}{{ part }}/{% endfor %}php bin/console dal:refresh:indexPraxisbeispiel
Ein Händler verkauft dieselbe Kaffeemühle in zwei Farben als eigene Produkte mit gleichem Namen. Mit dem Standard-Template bleiben die Adressen trotzdem eindeutig, weil die Artikelnummer am Ende steht. Für seinen B2B-Kanal hinterlegt er ein eigenes Template mit Kategoriepfad, ohne die Adressen des Endkundenshops zu verändern.
Was du wissen solltest
- Templates liegen unter Einstellungen > Shop > SEO, getrennt nach Produktdetailseite, Kategorieseite und Landingpage
- Jedes Template lässt sich je Verkaufskanal überschreiben
- Die Artikelnummer in der Produkt-URL verhindert doppelte Adressen bei gleichen Produktnamen
- Der Filter |lower sorgt für durchgehend kleingeschriebene Adressen
- Nach Änderungen den Index neu aufbauen: php bin/console dal:refresh:index
- Template vor dem Livegang festlegen, spätere Änderungen erzeugen neue URLs und brauchen Weiterleitungen
Shopware Migration
Du willst dieses Thema in deinem Projekt sauber umsetzen? Wir helfen dabei.
Zur Leistungsseite