Grundlagen und Code-Beispiel
Eine Website mit mehreren Sprachversionen steht vor einem Problem, das Suchmaschinen von sich aus nicht lösen können: Woher soll Google wissen, dass die deutsche, die spanische und die englische Version derselben Seite inhaltlich zusammengehören und sich nur in der Sprache unterscheiden? Ohne einen expliziten Hinweis behandelt eine Suchmaschine drei getrennte URLs als drei getrennte, möglicherweise sogar konkurrierende Seiten. Genau hier setzt hreflang an. Das Attribut verknüpft alle Sprachversionen einer Seite zu einer Gruppe und teilt gleichzeitig mit, welche Version für welche Sprache und optional welches Land gedacht ist.
Der Wert des hreflang-Attributs folgt einer festen Syntax: zuerst der Sprachcode nach ISO 639-1, zum Beispiel "de" für Deutsch oder "es" für Spanisch, optional gefolgt von einem Bindestrich und dem Ländercode nach ISO 3166-1 Alpha-2, etwa "de-AT" für deutschsprachige Nutzer in Österreich oder "es-MX" für Spanisch in Mexiko. Die Reihenfolge ist verbindlich: Sprache zuerst, Land danach, niemals umgekehrt. Ein Wert wie "AT-de" ist ungültig und wird ignoriert. Ergänzend gibt es den Sonderwert "x-default": Er markiert die Version, die ausgespielt wird, wenn keine der definierten Sprachversionen zur Spracheinstellung oder Region des Nutzers passt, meist die internationale oder englische Startseite.
Am häufigsten wird hreflang als Gruppe von Link-Tags im Head-Bereich jeder beteiligten Seite eingebunden. Die Gruppe muss auf jeder Sprachversion identisch sein: Jede Seite listet sich selbst und alle anderen Sprachversionen auf. So sieht ein vollständiger Block für einen Glossareintrag mit drei Sprachversionen plus x-default aus, am Beispiel eines Eintrags auf zds.es. Die Abbildung darunter zeigt den vollständigen Block für alle drei Sprachfassungen.
Dieser exakte Block, mit denselben vier hreflang-Zeilen und demselben Canonical-Tag, gehört in den Head jeder der drei beteiligten Seiten, nicht nur der spanischen. Nur die eigene Canonical-URL ändert sich von Seite zu Seite. Bei Websites mit sehr vielen Sprachversionen wird der Head-Bereich schnell unübersichtlich; dann bietet sich stattdessen die Angabe über die XML-Sitemap an, bei der jede URL ihre Alternativen über xhtml:link-Einträge referenziert. Für Nicht-HTML-Dokumente wie PDFs eignet sich der HTTP-Header Link mit rel="alternate", weil sich in ein PDF kein Head-Bereich einfügen lässt.
Für welchen der drei Wege man sich entscheidet, hängt vor allem von der Seitenzahl ab. Eine Website mit wenigen Dutzend mehrsprachigen Seiten kommt mit Link-Tags im Head problemlos aus, weil sich Fehler dort noch von Hand überprüfen lassen. Bei mehreren Hundert oder Tausend URLs pro Sprache wird die Sitemap-Variante deutlich wartbarer, weil sich die Zuordnung zentral aus einer Datenquelle generieren lässt, statt in jeder einzelnen Seitenvorlage gepflegt zu werden. Unabhängig vom gewählten Weg gilt dieselbe Regel: Die Gruppe muss vollständig und in sich konsistent sein, sonst ignoriert Google das gesamte Signal für die betroffenen URLs.
Ein Block, drei Seiten — nur die Canonical-Zeile wechselt
<link rel="alternate" hreflang="es" href="https://zds.es/que-es-hreflang/"><link rel="alternate" hreflang="en" href="https://zds.es/en/what-is-hreflang/"><link rel="alternate" hreflang="de" href="https://zds.es/de/was-ist-hreflang/"><link rel="alternate" hreflang="x-default" href="https://zds.es/que-es-hreflang/"><link rel="canonical" href="https://zds.es/que-es-hreflang/">
Jede Seite listet sich selbst
Die vier hreflang-Zeilen sind auf allen drei Sprachversionen identisch, der Verweis auf die eigene URL eingeschlossen.
x-default fängt den Rest auf
Er markiert die Version für Nutzer, deren Sprache oder Region zu keiner der definierten Fassungen passt.
Nur die Canonical wechselt
Jede Sprachversion verweist mit ihrer Canonical auf sich selbst, zeichengenau identisch mit ihrer eigenen hreflang-Zeile.
Die Gruppe wirkt nur vollständig: Fehlt eine Zeile oder weicht eine URL ab, verfällt das Signal für alle beteiligten URLs.
