XML Sitemap Generator: Technische Details
Technische Details des XML Sitemap Generators für OXID eShop 7: erzeugte Dateien, XML-Aufbau, tatsächlicher Ablauf, Klassen, Mehrsprachigkeit, Datenbanktabelle, Lebenszyklus und Grenzen.
XML Sitemap Generator: Technische Details
Erzeugte Dateien
Alle Dateien liegen im Ausgabeverzeichnis. Mit den Standardeinstellungen ist das source/export/:
source/export/
├── sitemap.xml # Sitemap-Index
├── sitemap-products.xml # Produkte
├── sitemap-categories.xml # Kategorien
├── sitemap-cms.xml # CMS-Seiten
├── sitemap-manufacturers.xml # Hersteller
└── sitemap-static.xml # Statische URLs (nur bei aktivierter Einstellung)
Pro Typ entsteht höchstens eine Datei. Für Produkte, Kategorien, CMS-Seiten und Hersteller enthält sie höchstens 50.000 URLs, die statische Sitemap hat kein Limit. Dateinamen mit Nummern wie sitemap-products-1.xml erzeugt das Modul nicht. Das Verzeichnis source/export/sitemap, das bei der Aktivierung angelegt wird, bleibt mit den Standardeinstellungen leer.
Aufbau der XML-Ausgabe
Jede URL wird mit loc, lastmod, changefreq und priority geschrieben:
<url>
<loc>https://shop.example.com/Produkt-Seite/</loc>
<lastmod>2026-01-15</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
lastmodstammt ausoxtimestampdes Objekts im FormatY-m-d. Ist der Wert leer oder ungültig, steht das Tagesdatum der Generierung dort- Mit aktivem Hreflang erscheinen zusätzlich
xhtml:link-Einträge mitrel="alternate", und der Namensraumxhtmlwird nur gesetzt, wenn solche Einträge vorkommen - Produkte erhalten
image:image-Einträge mitimage:locund, falls der Produkttitel nicht leer ist,image:title. Der Namensraumimagewird nur gesetzt, wenn Bilder vorkommen - Der Index
sitemap.xmlenthält pro Dateilocundlastmod(Datum der Generierung)
Google wertet
changefrequndprioritynach eigener Dokumentation nicht aus,lastmodnur bei verlässlichen Werten. Das Modul schreibt die Felder trotzdem, weil das Sitemap-Protokoll sie vorsieht.
Standardwerte je Typ
| Typ | changefreq |
priority |
|---|---|---|
| Produkte | weekly |
0.8 |
| Kategorien | weekly |
0.7 |
| CMS-Seiten | monthly |
0.5 |
| Hersteller | monthly |
0.6 |
| Statische URLs | Wert des Eintrags, sonst monthly |
Wert des Eintrags, sonst 0.5 |
Ablauf
graph TD
A["GenerateSitemapCommand"] --> B["Einstellungen und Sprachen lesen"]
B --> C["GenerateSitemapService"]
C --> D["Query-Service je Typ"]
D --> E["HreflangService (optional)"]
E --> F["UrlBuilderService"]
D --> F
F --> G["XmlWriterService"]
G --> H["FileWriterService"]
H --> I["sitemap-typ.xml"]
I --> J["Sitemap-Index sitemap.xml"]
Das Modul arbeitet ohne Cache, ohne Komprimierung (.xml.gz), ohne Ping an Suchmaschinen und ohne eigenen Scheduler. Jede Generierung liest die Daten neu aus der Datenbank und überschreibt die Dateien.
Klassen
| Klasse | Aufgabe |
|---|---|
Command\GenerateSitemapCommand |
Konsolenbefehl mmd:sitemap:generate, Optionen, Sprach- und Typauswahl, Ausgabe |
Service\Command\GenerateSitemapService |
Orchestriert Abfrage, Hreflang, URL-Aufbau, XML und Schreiben, erzeugt den Index |
Service\Query\ProductQueryService, CategoryQueryService, CmsPageQueryService, ManufacturerQueryService |
Lesen der Inhalte per SQL gegen oxarticles, oxcategories, oxcontents, oxmanufacturers und oxseo |
Service\Query\StaticUrlQueryService |
Liest die Tabelle mmd_sitemap_static_urls |
Service\Domain\HreflangService |
Ermittelt alternative Sprach-URLs aus oxseo |
Service\Domain\UrlBuilderService |
Baut je Datensatz die URL mit lastmod, changefreq, priority |
Service\Domain\XmlWriterService |
Erzeugt Sitemap- und Index-XML mit DOMDocument |
Service\Domain\FileWriterService |
Schreibt Dateien, legt Verzeichnisse an, löscht per --clear |
Service\Bridge\OxidConfigReader, OxidSettingsBridge |
Lesen die Modul-Einstellungen sowie Shop-URL, Sprachen und Sprach-URLs |
Core\Events |
Aktivierung und Deaktivierung |
Controller\Admin\* |
Admin-Übersicht und Pflege statischer URLs |
Mehrsprachigkeit
- Sprachen und ihre Reihenfolge stammen aus der Shop-Einstellung
aLanguages, die Sprach-ID ist die Position in dieser Liste. Es wird dabei nicht geprüft, ob eine Sprache im Frontend aktiv ist - Pro Sprache fragt der Befehl die SEO-URLs dieser Sprache ab und baut die Adressen aus der Sprach-URL (
aLanguageURLs), ersatzweise aus der Shop-URL - Der Dateiname enthält keine Sprache. Jeder Sprachdurchlauf überschreibt die Datei des vorherigen, die zuletzt verarbeitete Sprache bleibt bestehen
- Hreflang (
blHreflangEnabled) wirkt nur, wenn der Shop mehr als eine Sprache hat. Pro Objekt mit mindestens zwei Sprach-URLs entstehen Alternativen je Sprachcode. Einx-defaultauf die Standardsprache (sDefaultLang) entsteht nur, wenn das Objekt in der Standardsprache eine URL hat
Datenbank
Das Modul legt nur die Tabelle mmd_sitemap_static_urls an (Spalten siehe Statische URLs). Alle anderen Daten liest es aus den OXID-Tabellen, ohne sie zu verändern. Es nutzt die Datenbankverbindung des Shops als PDO-Objekt.
Lebenszyklus
| Ereignis | Wirkung |
|---|---|
Aktivierung (onActivate) |
Legt source/export/sitemap und die Tabelle mmd_sitemap_static_urls an, falls nicht vorhanden |
Deaktivierung (onDeactivate) |
Keine Aktion, Dateien und Daten bleiben erhalten |
Migrationen gibt es nicht. oe:module:apply-configuration übernimmt nur die Modul-Einstellungen, nicht die Tabelle.
Grenzen
- Höchstens 50.000 URLs pro Datei für Produkte, Kategorien, CMS-Seiten und Hersteller, der Rest wird abgeschnitten (die Einstellung
iMaxUrlswird nicht ausgewertet). Die statische Sitemap hat kein Limit - Die Größe der Datei wird nicht geprüft, das Protokoll-Limit von 50 MB wird also nicht überwacht
- Die Daten eines Typs werden vollständig in den Arbeitsspeicher geladen und mit einem Schreibvorgang in die Datei geschrieben, es gibt kein stückweises Schreiben
- Mehrere Shops: Shop-URL, Sprachliste und statische URLs stammen immer aus Shop-ID 1. Mit
-sändert sich die Shop-ID in den Inhaltsabfragen und in der Hreflang-Abfrage - Produktbilder werden immer aufgenommen, die Einstellung
blImagesEnabledwird nicht ausgewertet
Modulstruktur
mmd/sitemap/ # source/modules/mmd/sitemap
├── metadata.php # Modul-ID mmd_sitemap, Einstellungen, Events
├── services.yaml # Dienste und Konsolenbefehl
├── menu.xml # Admin-Menü "Sitemap"
├── src/
│ ├── Command/ # GenerateSitemapCommand
│ ├── Controller/Admin/ # Übersicht, Statische URLs
│ ├── Core/Events.php # Aktivierung/Deaktivierung
│ ├── DTO/, Enum/, Model/ # Wertobjekte, Typen, StaticUrl-Modell
│ └── Service/ # Bridge, Query, Domain, Command
└── views/ # Admin-Templates und Übersetzungen