XML Sitemap Generator: Technische Details
Technischer Aufbau des XML Sitemap Generators: Ablauf der Generierung, Services und URL-Provider, Scheduled Task, Config-Subscriber, Admin-Komponente, Standard-Intervall und Dateisystem-Verhalten.
XML Sitemap Generator: Technische Details
Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net
Ablauf der Generierung
graph TD
A["Admin-Button / Scheduled Task / Console Command"] --> B["SitemapGeneratorService.generate()"]
B --> C{"clearExisting?"}
C -->|"ja"| D["FileWriterService: sitemap*.xml löschen"]
C -->|"nein"| E["aktive URL-Provider ermitteln"]
D --> E
E --> F["ProductUrlProvider"]
E --> G["CategoryUrlProvider"]
E --> H["CmsPageUrlProvider"]
E --> I["ManufacturerUrlProvider"]
F --> J["XmlWriterService: urlset je Datei"]
G --> J
H --> J
I --> J
J --> K["FileWriterService: sitemap-typ.xml schreiben"]
K --> L["XmlWriterService: sitemapindex"]
L --> M["FileWriterService: sitemap.xml schreiben"]
Es gibt keinen Cache: Jeder Aufruf von generate() liest die Daten neu und schreibt die Dateien neu.
Bausteine
| Klasse | Aufgabe |
|---|---|
SitemapGeneratorService |
Orchestriert die Generierung, teilt nach Dateigrenze auf, schreibt den Index |
AbstractUrlProvider und vier Provider |
Liefern die URLs je Typ als Generator, Standardwerte für Priorität und Änderungsfrequenz |
HreflangService |
Liest alternative SEO-URLs aller Sprachen per SQL in einem Block |
XmlWriterService |
Erzeugt urlset und sitemapindex als XML (DOM) |
FileWriterService |
Schreibt, löscht und listet Dateien im Zielverzeichnis |
ConfigService |
Liest die Plugin-Einstellungen (MmdSitemap.config.*) pro Sales Channel, bereinigt Verzeichnis und Slug |
GenerateSitemapCommand |
Console Command mmd:sitemap:generate |
SitemapGenerationTask und SitemapGenerationTaskHandler |
Scheduled Task mmd.sitemap.generation |
ConfigChangeSubscriber |
Überträgt ein geändertes Intervall auf den Scheduled Task |
SitemapController |
Admin-API-Routen für Generierung und Statistik |
MmdSitemap |
Plugin-Klasse, räumt beim Deinstallieren Task und Einstellungen auf |
Die Provider sind im Service-Container mit dem Tag mmd.sitemap.url_provider markiert und werden in der Reihenfolge Produkte (100), Kategorien (90), CMS-Seiten (80), Hersteller (70) abgearbeitet. Ein eigener Provider lässt sich daher nur über den Container einhängen, es gibt keinen dokumentierten Erweiterungspunkt.
Verarbeitung
- Die Provider laden Daten in Blöcken von je 100 Einträgen. SEO-URLs und Hreflang-Alternativen werden pro Block gesammelt abgefragt.
- Der Generator sammelt URLs eines Typs, bis das Limit je Datei erreicht ist, und schreibt sie dann als eine Datei.
- Das Limit je Datei ist die Einstellung Max. URLs pro Sitemap-Datei, begrenzt auf 50.000.
- Der Index nutzt als Host
Schema://Host[:Port]der Domain des Sales Channels, passend zur Sprache des Kontexts, sonst die erste Domain. - Verzeichnisse legt das Plugin bei Bedarf mit den Rechten
0755an. Der Webserver-Benutzer muss inpublic/<Ausgabeverzeichnis>schreiben dürfen, sonst entstehen keine Dateien. --clearund die automatische Löschung entfernen nur Dateien nach dem Mustersitemap*.xmlim Zielverzeichnis des jeweiligen Sales Channels.
Scheduled Task und Intervall
- Der Task heißt
mmd.sitemap.generationund hat ein Standard-Intervall von 86.400 Sekunden. - Ändert sich der Wert
MmdSitemap.config.scheduledTaskInterval, setzt derConfigChangeSubscriberdas Intervall des Tasks auf den globalen Wert der Einstellung. Der Task ist insgesamt ein einzelner Eintrag, deshalb zählt nur der globale Wert. - Beim Lauf prüft der Handler zuerst den globalen Schalter, dann pro aktivem Storefront-Sales-Channel den Schalter des Sales Channels. Fehler eines Sales Channels werden geloggt und stoppen die anderen nicht.
Admin-Oberfläche
Die Vue-Komponente mmd-sitemap-generator ist als Karte Manuelle Generierung in die Plugin-Konfiguration eingebunden. Sie liest den Sales Channel aus der übergeordneten Konfigurationsseite, ruft die Admin-API auf und zeigt Statistik sowie Ergebnis an. Texte stammen aus den Snippets in Deutsch und Englisch.