XML-Sitemap: Fehlerbehebung und FAQ
Fehlerbehebung für die XML-Sitemap in Sylius 2: 404 beim Abruf, Fehlermeldungen pro Channel, Dateien nach dem Deployment weg, fehlende Produkte, Hreflang, bekannte Einschränkungen und FAQ.
XML-Sitemap: Fehlerbehebung und FAQ
Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.
Fehlerbehebung
/sitemap-index.xml liefert 404
Symptom: Der Abruf von /sitemap-index.xml oder /sitemap.xml endet mit 404.
Prüfen:
- Gibt es im Admin unter MMKreativ Plugins → XML-Sitemap eine Zeile für den Channel, und ist „Sitemap für diesen Channel aktivieren“ angekreuzt?
- Wurde generiert? Das Grid zeigt in „Zuletzt generiert“ einen Zeitpunkt, sonst gibt es keine Dateien.
- Gehört der Host zu einem aktivierten Channel? Die Auslieferung nutzt den Channel, den Sylius für den Host auflöst.
- Sind die Shop-Routen auf der obersten Ebene importiert, nicht unter
/{_locale}?bin/console mmd:sitemap:setupmeldet fehlende Importe.
Lösung: Fehlende Schritte nachholen und danach bin/console mmd:sitemap:generate ausführen.
Generierung meldet einen Fehler für einen Channel
Symptom: Der Befehl oder der Button melden einen Fehler pro Channel, die anderen Channels laufen durch.
| Meldung (sinngemäß) | Ursache | Lösung |
|---|---|---|
| Channel hat noch keine Sitemap-Einstellungen | Keine Zeile im Admin angelegt | Zeile für den Channel anlegen |
| Sitemap ist für den Channel deaktiviert | Hauptschalter aus | „Sitemap für diesen Channel aktivieren“ ankreuzen |
| Channel existiert nicht | Channel-Code der Einstellung passt zu keinem Channel | Einstellung korrigieren oder löschen |
| Channel ist in Sylius deaktiviert | Sylius löst nur aktivierte Channels über den Host auf | Channel in Sylius aktivieren |
| Channel hat keinen Hostnamen | Ohne Host lassen sich keine absoluten URLs bilden | Hostnamen am Channel setzen |
| Channel hat keine Standardsprache | Die Standardsprache fehlt am Channel | Standardsprache setzen |
| Wird bereits von einem anderen Prozess generiert | Es läuft schon eine Generierung für diesen Channel | Warten, bis sie fertig ist |
| Generierung fehlgeschlagen: … | Zum Beispiel nicht beschreibbares Verzeichnis, fehlender Routen-Import oder ein Datenbankfehler | Den Grund in der Meldung beheben |
Dateien sind nach einem Deployment weg
Symptom: Nach dem Deployment liefert die Sitemap 404, obwohl sie vorher funktionierte.
Prüfen: Liegt storage_dir (Standard var/sitemap) in einem Ordner, der beim Deployment neu angelegt wird?
Lösung: storage_dir auf einen dauerhaften Speicher legen oder direkt nach dem Deployment bin/console mmd:sitemap:generate ausführen. Das Verzeichnis muss für den ausführenden Benutzer schreibbar und für den Webserver-Benutzer lesbar sein.
Menüeintrag fehlt im Admin
Symptom: Unter „MMKreativ Plugins“ erscheint kein Eintrag „XML-Sitemap“.
Prüfen: Ist config/routes/admin.yaml des Plugins importiert?
Lösung: Den Import ergänzen (siehe Installation). Ohne die Route blendet das Plugin den Eintrag aus, statt die Seitenleiste aller Admin-Seiten zu brechen.
Migration bricht ab
Symptom: mmd:sitemap:setup oder die Migration meldet, dass sie nur für MySQL 8 und MariaDB geschrieben ist.
Ursache: Das Plugin unterstützt nur MySQL und MariaDB. Auf jeder anderen Plattform bricht die Migration bewusst ab.
Lösung: Das Plugin nicht auf einer anderen Datenbank installieren.
Setup-Befehl verlangt zuerst die Sylius-Migrationen
Symptom: Der Befehl bricht mit dem Hinweis ab, dass Migrationen noch offen sind, auf denen das Plugin aufbaut.
Lösung: Erst bin/console doctrine:migrations:migrate ausführen, dann bin/console mmd:sitemap:setup erneut.
Ein Produkt oder eine Kategorie fehlt
| Was fehlt | Mögliche Ursache |
|---|---|
| Produkt | Deaktiviert, dem Channel nicht zugeordnet oder in der Sprache ohne Slug. Es kommt nur in den Sprachen vor, für die es einen Slug hat |
| Kategorie | Der Taxon oder ein übergeordneter Taxon ist deaktiviert, er liegt außerhalb des Menü-Taxons des Channels, oder es ist eine Baumwurzel |
| Statische Seite | Die Route steht nicht in static_routes, hat Pflichtparameter oder „Statische Seiten“ ist ausgeschaltet |
| Bilder | „Produktbilder“ ist ausgeschaltet oder das Produkt hat keine Bilder |
Hreflang fehlt
Prüfen: Ist „Hreflang-Alternativen“ eingeschaltet, hat der Channel mehr als eine Sprache und enthalten die Shop-Routen den Platzhalter {_locale}?
Ursache: Ohne unterschiedliche URLs je Sprache gibt es nichts zu verlinken, deshalb erscheint kein Hreflang.
Bekannte Einschränkungen
- Sylius hat keine CMS-Seiten und keine Hersteller, dafür gibt es keine eingebauten Provider. Ergänze sie mit einem eigenen Provider.
- Nur MySQL und MariaDB werden unterstützt.
- Dateien werden unkomprimiert ausgeliefert. Lass den Webserver die Antwort komprimieren.
- Eine Antwort ist nur öffentlich cachebar, wenn für die Anfrage keine Session gestartet wurde.
- Doppelte URLs werden über einen 60-Bit-Hash je URL erkannt (etwa 40 Byte pro URL). Das sind grob 40 MB PHP-Speicher pro Million URLs, dazu der Puffer einer Datei, der in eine temporäre Datei geschrieben wird.
- Nur die Produkte werden in Blöcken gelesen. Die Kategorien lädt das Plugin in einer einzigen Abfrage, was für übliche Kategoriebäume unkritisch ist.
- Änderungshäufigkeit und Priorität gelten für den ganzen Inhaltstyp eines Channels, nicht pro Produkt oder Kategorie.
- Produkte werden nur nach „aktiviert“ und Channel-Zuordnung gefiltert. Bestand, Verfügbarkeitszeitraum und Variantenpreise spielen keine Rolle.
- Blockgröße beim Lesen der Produkte (500) und Cache-Dauer der Auslieferung (eine Stunde) sind nicht konfigurierbar.
FAQ
Allgemein
Wird die Sitemap bei jeder Katalogänderung aktualisiert? Nein. Sie entsteht nur durch den Befehl oder den Button. Plane den Befehl als Cronjob ein.
Muss ich die Sitemap bei Google einreichen? Trage die Index-URL in die robots.txt ein oder reiche sie in der Search Console ein.
Konfiguration
Kann ich Priorität und Änderungshäufigkeit pro Produkt setzen? Nein, nur pro Inhaltstyp und Channel.
Warum lässt sich der Channel einer Einstellung nicht mehr ändern? Damit bereits erzeugte Dateien nicht verwaisen. Lege für einen anderen Channel eine neue Zeile an.
Kompatibilität
Funktioniert das Plugin headless? Ja, die Auslieferung ist unabhängig vom Frontend, solange /sitemap-index.xml an Sylius gelangt.
Gibt es eine Twig-Funktion für die robots.txt? Nein. Die Index-URL trägst du selbst ein.