hreflang XML-Sitemaps mit Python selbst generieren
Eine automatisierte hreflang-Integration im html-head gilt als Standard unter den möglichen Implementierungsformen und bietet auch für SEO Verantwortliche die allerbesten Auswertungs- und Kontrollmöglichkeiten. Dennoch gibt es häufig Situationen in denen eine manuelle Erstellung die effizienteste und schnellste (Überbrückungs-)Lösung sein kann. Insbesondere dann, wenn wenig IT-Ressourcen zur Verfügung stehen. Nachfolgend möchte ich zeigen, wie man sich hreflang-Sitemaps mit Python einfach selbst erstellen kann.
Inhaltsverzeichnis
Python Script zur Generierung der hreflang XML-Sitemap
Wesentliche Funktionalitäten des Skripts
Das Herzstück des Skripts ist die Funktion generate_sitemap_from_csv
.
Diese Funktion durchläuft im wesentlichen folgende Schritte:
- Sie öffnet und liest die angegebene CSV-Datei.
- Sie erstellt für jede URL in der CSV ein url-Element in der XML-Sitemap.
- Sie fügt zu jedem url-Element xhtml:link-Elemente hinzu, welche die hreflang-Zuordnungen für die jeweilige URL repräsentieren. Extrahiert wird der jeweilige Sprach- bzw. Ländercode aus der Überschrift der jeweiligen Spalte.
- Wenn die Gesamtzahl der URLs einen bestimmten Schwellenwert überschreiten, teilt das Skript die Sitemap in mehrere kleinere Sitemaps auf und nummeriert diese durch. Der Schwellwert kann beliebig angepasst werden. Als Höchstwert gibt Google 50.000 URL-Einträge an. Standard im Skript sind 20.000.
- Die Sitemaps werden korrekt formatiert und mit der entsprechenden XML-Deklaration
xml version="1.0" encoding="UTF-8"
und dem XML-Namespace-Attributxmlns:xhtml="http://www.w3.org/1999/xhtml
versehen. - Abschließend wird jede generierte Sitemap als separate XML-Datei im
output
-Ordner gespeichert.
Struktur der CSV Datei und URL-Mapping
Zur Erstellung der CSV Datei ist ein wenig manuelle Vorarbeit nötig: dafür werden sämtliche Länderäquivalente aus einem Crawl auf Zeilenbasis gemappt. Die jeweilige Spaltenüberschrift gibt den entsprechenden Länder- und/oder Sprachcode an, welcher direkt für die Angabe im hreflang-Attribut verwendet wird. Sollte es für spezifische Länder keine URL geben, wird das Feld einfach leer gelassen. Generiert wird der hreflang-Verbund nur, wenn mindestens zwei URLs für einen bidirektionalen Verweis vorhanden sind. Eine einzelne URL wird übersprungen.