Das Skript tools/generate_sitemap.py generiert eine dynamische sitemap.xml basierend auf HTML-Dateien im Build-Output-Ordner. Es weist Prioritäten und Update-Frequenzen basierend auf Dateipfaden zu und unterstützt branch-spezifische Base-URLs.
Die Analyse hat mehrere potenzielle Probleme identifiziert, die zu einer unvollständigen oder fehlerhaften Sitemap führen können.
- Die Funktion
scan_html_filesdurchsucht rekursiv das Build-Verzeichnis (build_dir) nach Dateien mit der Endung.html. - Versteckte Dateien (beginnend mit
_oder.) werden ignoriert. - Relative Pfade werden vom Build-Verzeichnis aus berechnet.
- Standardmäßig
build/site/html. Kann über--build-dirangepasst werden. - Das Skript erstellt ein minimales Build-Verzeichnis mit Beispiel-HTML, falls das Verzeichnis nicht existiert (Zeilen 355–363). Dies ist ein Test-Fallback, der in Produktion nicht auftreten sollte.
- Basis-URL wird aus
--base-urloder Branch-Mapping (BRANCH_URLS) bestimmt. - Für jede HTML-Datei:
- Wenn
rel_path == 'index.html'→url_path = '' - Wenn
rel_path.endswith('/index.html')→url_path = rel_path[:-11](Entfernt/index.html) - Sonst wird
.html-Endung entfernt (rel_path[:-5])
- Wenn
- Vollständige URL:
{base_url}/{url_path}(wennurl_pathnicht leer)
- Priority: Aus
PRIORITY_MAP(exakte Übereinstimmung oder Präfix) oder Fallback basierend auf Verzeichnis. - Changefreq: Aus
CHANGEFREQ_MAPoder Fallback. - Lastmod: Git-Änderungsdatum (falls verfügbar), sonst Dateisystem-Modifikationszeit.
- Das Skript erstellt bei fehlendem Build-Verzeichnis Beispiel-HTML-Dateien (
index.html,user-guide/installation.html). Diese könnten in die Sitemap aufgenommen werden und falsche URLs erzeugen. - Empfehlung: Statt Beispielen zu erstellen, sollte das Skript mit einem Fehler abbrechen oder zumindest eine klare Warnung ausgeben.
get_lastmod_for_fileverwendetcwd=file_path.parent. Wenn die HTML-Datei außerhalb des Git-Repositories liegt (z.B. im Build-Ordner), schlägtgit logfehl und es wird die Dateisystem-Modifikationszeit verwendet. Diese kann neuer sein als der tatsächliche Content-Änderungszeitpunkt.- Empfehlung: Das CWD sollte das Root-Repository sein (
Path.cwd()oder übergit rev-parse --show-toplevelermitteln).
- Die
PRIORITY_MAPundCHANGEFREQ_MAPenthalten Einträge für Dateien, die im aktuellen Test-Build nicht vorhanden sind (z.B.migration/asyncio-migration.html,readme.html,changelog.html,agents.html,devcontainer-environment.html). - Diese Dateien könnten entweder nicht generiert werden oder unter anderen Pfaden liegen. Falls sie fehlen, erhalten sie Fallback-Werte, was nicht unbedingt falsch ist, aber die intendierten Prioritäten/Frequenzen werden nicht angewendet.
- Empfehlung: Mapping-Tabellen mit der tatsächlichen Ausgabe des Dokumentations-Builds abgleichen und ggf. anpassen.
- Im Test-Build fehlen
user-guide/index.html,developer-guide/index.html,protocol-reference/index.html. Diese sind in den Mappings enthalten (priority: 0.8bzw.0.7). Wenn sie nicht generiert werden, fehlen entsprechende Sitemap-Einträge. - Ursache: Möglicherweise werden diese Index-Dateien nicht von AsciiDoc/Antora erzeugt, weil die entsprechenden
index.adoc-Dateien existieren. Das Build-System muss überprüft werden. - Empfehlung: Sicherstellen, dass alle erwarteten HTML-Dateien tatsächlich generiert werden. Andernfalls Mapping-Tabellen bereinigen.
BRANCH_URLS['main']isthttps://pysignalduino.rfd-fhem.github.io. Ist das die korrekte URL für die Hauptdokumentation? Möglicherweise sollte eshttps://pysignalduino.github.iosein.- Empfehlung: URLs mit den tatsächlichen Deployment-Zielen abgleichen.
- Das Skript verwendet
rel_str = str(rel_path).replace('\\', '/'). Das ist robust, aber es könnte Probleme geben, wenn Pfade gemischte Schrägstriche enthalten (unwahrscheinlich). - Kein kritisches Problem.
- Die Base-URL wird mit
.rstrip('/')bereinigt. Wennurl_pathleer ist, wirdfull_url = base_url(ohne trailing slash) korrekt sein. Allerdings erwarten einige Webserver möglicherweise einen trailing slash für die Root-URL. Das ist jedoch kein Sitemap-Problem. - Empfehlung: Keine Änderung notwendig.
- Das Skript sucht nur nach
.html-Dateien. Andere Ressourcen (PDF, Bilder) werden ignoriert, was korrekt ist, da Sitemaps typischerweise nur HTML-Seiten enthalten. - Kein Problem.
- Die Logik
rel_path.endswith('/index.html')erfasst auchsubdir/index.html. Das Entfernen von/index.html(11 Zeichen) ist korrekt. - Kein Problem.
docs/01_user_guide/index.adoc→ erwartetuser-guide/index.htmldocs/02_developer_guide/index.adoc→ erwartetdeveloper-guide/index.htmldocs/03_protocol_reference/index.adoc→ erwartetprotocol-reference/index.htmldocs/ASYNCIO_MIGRATION.md→ könnte zumigration/asyncio-migration.htmlwerden (wenn konvertiert)docs/MANCHESTER_MIGRATION.md→ ähnlichdocs/METHODS_MIGRATION_COMPLETE.md→ ähnlichdocs/MIGRATION.md→ ähnlichdocs/SIGNALDUINO_MIGRATION_PLAN.md→ ähnlichdocs/devcontainer_env.md→devcontainer-environment.htmldocs/AGENTS.md(existiert nicht als separate Datei, aberAGENTS.mdim Root) →agents.html
- Viele dieser Migrationsdateien sind
.md, nicht.adoc. Ob sie in HTML umgewandelt werden, hängt vom Build-System ab. Im Test-Build sind sie nicht vorhanden. - Die Mapping-Tabellen enthalten Einträge für diese Dateien, aber sie werden möglicherweise nie generiert, was zu fehlenden Sitemap-Einträgen führt.
-
Fehlende HTML-Generierung: Wenn das Build-System nicht alle erwarteten HTML-Dateien erzeugt, fehlen sie in der Sitemap. Das Skript kann nur vorhandene Dateien erfassen.
-
Falsche Prioritäten/Frequenzen für nicht gemappte Pfade: Fallback-Logik weist pauschal
priority=0.5undchangefreq='yearly'zu, was für bestimmte Seiten unpassend sein könnte. -
Git-Lastmod ungenau: Wenn
git logfehlschlägt, wird die Dateisystem-Modifikationszeit verwendet, die nicht dem letzten Content-Update entspricht (z.B. bei Neubuild). -
Base-URL-Konfiguration: Wenn die Base-URL falsch ist, sind alle URLs in der Sitemap ungültig.
- Validierung des Build-Verzeichnisses: Statt Beispiel-HTML zu erstellen, sollte das Skript einen Fehler ausgeben und den Benutzer auffordern, das Build-Verzeichnis korrekt zu erstellen.
- Verbesserte Git-Lastmod: CWD auf Repository-Root setzen; falls nicht möglich, Fallback auf
git log --alloder den neuesten Commit, der die Quelldatei (.adoc) ändert. - Bereinigung der Mapping-Tabellen: Entferne Einträge für nicht existierende HTML-Dateien oder passe das Build-System an, damit diese Dateien generiert werden.
- Logging verbessern: Warnung ausgeben, wenn eine Datei in den Mappings nicht gefunden wird.
- Synchronisation mit Antora/AsciiDoc: Sicherstellen, dass alle
.adoc- und.md-Dateien in HTML umgewandelt werden und die Pfade mit den Mappings übereinstimmen. - Automatische Generierung der Mapping-Tabellen: Ein Skript, das die
docs/-Struktur analysiert und Prioritäten/Frequenzen basierend auf Metadaten (z.B. Frontmatter) zuweist.
- Integration in CI/CD: Das Skript sollte nach dem Dokumentations-Build ausgeführt werden, mit korrekter Base-URL je nach Branch.
- Validierung der Sitemap: Nach Generierung sollte die Sitemap auf XML-Konformität und gültige URLs geprüft werden (z.B. mit
validate_sitemap.py).
Das Sitemap-Generator-Skript ist grundsätzlich funktional, hat jedoch mehrere Schwachstellen, die zu unvollständigen oder fehlerhaften Sitemaps führen können. Die Hauptprobleme liegen in der Diskrepanz zwischen erwarteten und tatsächlich generierten HTML-Dateien sowie in der unzuverlässigen Ermittlung des lastmod-Datums.
Durch die oben genannten Vorschläge kann die Zuverlässigkeit und Korrektheit der generierten Sitemap deutlich verbessert werden.