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.
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>
lastmod stammt aus oxtimestamp des Objekts im Format Y-m-d. Ist der Wert leer oder ungültig, steht das Tagesdatum der Generierung dortxhtml:link-Einträge mit rel="alternate", und der Namensraum xhtml wird nur gesetzt, wenn solche Einträge vorkommenimage:image-Einträge mit image:loc und, falls der Produkttitel nicht leer ist, image:title. Der Namensraum image wird nur gesetzt, wenn Bilder vorkommensitemap.xml enthält pro Datei loc und lastmod (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.
| 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 |
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.
| 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 |
aLanguages, die Sprach-ID ist die Position in dieser Liste. Es wird dabei nicht geprüft, ob eine Sprache im Frontend aktiv istaLanguageURLs), ersatzweise aus der Shop-URLblHreflangEnabled) wirkt nur, wenn der Shop mehr als eine Sprache hat. Pro Objekt mit mindestens zwei Sprach-URLs entstehen Alternativen je Sprachcode. Ein x-default auf die Standardsprache (sDefaultLang) entsteht nur, wenn das Objekt in der Standardsprache eine URL hatDas 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.
| 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.
iMaxUrls wird nicht ausgewertet). Die statische Sitemap hat kein Limit-s ändert sich die Shop-ID in den Inhaltsabfragen und in der Hreflang-AbfrageblImagesEnabled wird nicht ausgewertetmmd/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