Markus Michalski FAQ

XML-Sitemap: Generierung und Auslieferung

Sitemap erzeugen per Befehl mmd:sitemap:generate oder Admin-Button, Abruf unter sitemap-index.xml, Dateiaufteilung, Auswahlregeln für Produkte und Kategorien, Hreflang, Bilder und Sperre pro Channel.

English Version

Zurück zur Übersicht

XML-Sitemap: Generierung und Auslieferung

Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.

Sitemap erzeugen

Konsolenbefehl

bin/console mmd:sitemap:generate
bin/console mmd:sitemap:generate --channel=WEB
Option Kurzform Beschreibung
--channel -c Nur diesen Channel generieren (Channel-Code). Ohne Option laufen alle aktivierten Channels

Der Befehl gibt eine Tabelle mit Channel, URLs, Dateien und Zeitpunkt aus. Ein Fehler in einem Channel wird für diesen Channel gemeldet und stoppt die anderen nicht. Ist mindestens ein Channel fehlgeschlagen, endet der Befehl mit einem Fehlerstatus, was für Cronjobs und Monitoring wichtig ist. Hat kein Channel die Sitemap aktiviert, gibt er eine Warnung aus und endet erfolgreich.

Admin-Button

Auf der Seite MMKreativ Plugins → XML-Sitemap startet der Button Jetzt generieren die Generierung aller aktivierten Channels. Das Ergebnis erscheint als Meldung pro Channel, danach zeigt das Grid die Anzahl der URLs und den Zeitpunkt.

Der Button läuft synchron innerhalb der Web-Anfrage. Für einen sehr großen Katalog nimmst du den Konsolenbefehl.

Abruf der Sitemap

Der Sitemap-Index liegt auf dem Host des jeweiligen Channels:

URL Inhalt
/sitemap-index.xml Sitemap-Index
/sitemap.xml Derselbe Index, unter dem Namen, den Crawler ohne weitere Angabe ausprobieren
/sitemap/<Name>.xml Eine einzelne Sitemap-Datei, zum Beispiel /sitemap/sitemap-products-1.xml

Der Index führt je Inhaltstyp eine eigene Datei auf, sodass erkennbar ist, was darin steht:

/sitemap/sitemap-products-1.xml     Produkte (und ihre Bilder)
/sitemap/sitemap-categories-1.xml   Kategorien
/sitemap/sitemap-pages-1.xml        Statische Seiten

Hat ein Inhaltstyp mehr URLs, als in eine Datei passen, setzt er sich in sitemap-products-2.xml und so weiter fort. Ein Inhaltstyp ohne URL bekommt keine Datei. Hat ein Channel gar keine URL, entsteht eine leere Datei sitemap-empty-1.xml, damit der Index gültig bleibt.

Die Auslieferung antwortet mit 404, wenn der Host keinem Channel gehört, für den Channel keine aktivierte Einstellung existiert oder die Sitemap noch nicht generiert wurde. Die Antworten tragen Content-Type: application/xml; charset=UTF-8 und den Header X-Robots-Tag: noindex, damit die XML-Datei selbst nie als Suchergebnis erscheint.

Eine Antwort ist nur dann öffentlich cachebar (eine Stunde), wenn für die Anfrage keine Session gestartet wurde. Die Dateien werden unkomprimiert ausgeliefert, die Kompression übernimmt der Webserver.

Was in die Sitemap kommt

Inhalt Quelle Hinweise
Produkte Aktivierte Produkte, die dem Channel zugeordnet sind Eine URL pro Sprache, für die das Produkt einen Slug hat. lastmod stammt vom Produkt
Kategorien Der Menü-Taxon des Channels und alles darunter. Ist kein Menü-Taxon gesetzt, alle Nicht-Wurzel-Taxons aller Bäume lastmod stammt vom Taxon. Ist der Menü-Taxon selbst eine Baumwurzel, wird nur sein Unterbaum aufgenommen
Statische Seiten Die Routen aus static_routes Eine URL pro Sprache des Channels, ohne lastmod
Bilder Produktbilder Je Produkt-URL, mit dem Produktnamen der jeweiligen Sprache als Titel

Ein deaktivierter Taxon blendet seinen ganzen Unterbaum aus, auch wenn einzelne Unterkategorien aktiviert sind. Die Wurzel eines Taxon-Baums ist eine reine Gruppierung und kommt nicht in die Sitemap.

Hreflang

Jede Sprache des Channels bekommt eine eigene URL, die alle Sprachversionen als Alternativen enthält, die eigene eingeschlossen, dazu x-default mit der URL der Standardsprache. Sprachcodes werden mit Bindestrich geschrieben (de-DE statt de_DE).

Hreflang erscheint nur, wenn eine Seite mindestens zwei verschiedene Sprach-URLs hat. Ein Shop, dessen Routen keinen Platzhalter {_locale} enthalten, liefert alle Sprachen unter einer URL und bekommt deshalb keine. Sprachen, für die der Router keine URL bilden kann, werden ausgelassen, statt die Generierung abzubrechen.

Bilder

Ein Bildpfad, der bereits eine absolute URL mit http:// oder https:// ist (CDN), wird unverändert übernommen. Alles andere wird zu <scheme>://<Host des Channels>/<image_base_path>/<Pfad>.

Ablauf und Sicherheit

Twig-Storefront und Headless

Die Sitemap ist ein maschinenlesbares XML-Dokument für Crawler, kein Storefront-Feature. Es gibt deshalb weder eine Twig-Seite noch eine API-Platform-Ressource, und es gibt keine getrennte Shop-API. Sie wird für ein Twig-Storefront und ein Headless-Frontend identisch ausgeliefert, solange der Host des Channels /sitemap-index.xml an Sylius weiterreicht. Die Admin-Oberfläche ist reine Verwaltung.

graph TD
    A["Aufruf sitemap-index.xml"] --> B{"Host gehört zu einem Channel?"}
    B -->|Nein| C["404"]
    B -->|Ja| D{"Sitemap für den Channel aktiviert?"}
    D -->|Nein| C
    D -->|Ja| E{"Datei vorhanden?"}
    E -->|Nein| C
    E -->|Ja| F["XML ausliefern"]