Das Tag rel="canonical" sagt Suchmaschinen, welche URL bevorzugt wird, wenn derselbe Inhalt unter mehreren Adressen erreichbar ist. Die hreflang-Attribute sagen ihnen, welche Versionen derselben Seite in anderen Sprachen oder Regionen existieren. Beide konkurrieren nicht: Canonical konsolidiert Duplikate innerhalb einer Sprache, hreflang verknüpft Entsprechungen über Sprachen hinweg. Jede Sprachversion braucht ihr eigenes selbstreferenzierendes Canonical und einen vollständigen Satz hreflang-Links, der auf alle anderen zeigt, sich selbst eingeschlossen.
Dieser Artikel erklärt, wie du beides korrekt umsetzt, wozu x-default dient und welche konkreten Fehler dazu führen, dass Google sie ignoriert.
Was die kanonische URL ist
Dieselbe Seite ist meist unter mehreren URLs erreichbar: mit und ohne abschließenden Schrägstrich, mit Tracking-Parametern (?utm_source=...), mit www und ohne, über HTTP und HTTPS. Für Suchmaschinen sind das verschiedene Adressen. Wenn du nicht sagst, welche du bevorzugst, wählen sie selbst eine aus und verteilen die Signale auf alle.
<link rel="canonical"> löst diese Mehrdeutigkeit aus dem <head> heraus:
<link rel="canonical" href="https://blog.aimran.es/de/artikel/canonical-und-hreflang-richtig-umsetzen/" />
Grundregeln laut Googles Dokumentation:
- Verwende absolute URLs mit Protokoll und Domain.
- Ein einziges Canonical-Tag pro Seite. Gibt es mehrere, ignoriert Google alle.
- Zeige auf eine URL, die 200 zurückgibt und indexierbar ist. Ein Canonical auf eine
noindex-Seite oder eine weiterleitende Seite ist widersprüchlich. - Das selbstreferenzierende Canonical (die Seite zeigt auf sich selbst) ist korrekt und empfohlen: Es sagt ausdrücklich, welche die richtige Version ist.
Google behandelt das Canonical als starkes Signal, nicht als Anweisung. Wenn der Inhalt der kanonischen URL dem der deklarierenden Seite nicht ähnelt, wählt Google womöglich eine andere. Deshalb taugt Canonical nicht dazu, unterschiedliche Seiten „weiterzuleiten“; dafür gibt es den 301.
Was hreflang ist
hreflang erklärt, dass eine Seite gleichwertige Versionen in anderen Sprachen oder Regionen hat, damit die Suchmaschine jedem Nutzer die zu seiner Sprache passende anzeigen kann. Es wird im <head> mit einem Tag pro Version deklariert:
<link rel="alternate" hreflang="es" href="https://example.com/es/guia/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/anleitung/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/es/guia/" />
Die Werte verwenden Sprachcodes nach ISO 639-1 (es, de) und optional Regionen nach ISO 3166-1 alpha-2 (de-AT, en-GB). Einen reinen Regionscode gibt es nicht: hreflang="at" ist ungültig.
Die zwei Regeln, die fast alle brechen
- Gegenseitigkeit. Wenn die spanische Seite per hreflang auf die deutsche verweist, muss die deutsche auf die spanische zurückverweisen. Google nennt das „Rückverweise“ (return links); ohne sie werden die Angaben ignoriert.
- Selbstreferenz. Jede Seite enthält auch ein hreflang, das auf sie selbst zeigt. Der Satz an Tags muss auf allen Versionen identisch sein.
x-default
x-default gibt an, welche Version angezeigt werden soll, wenn keine deklarierte Sprache zum Nutzer passt (oder wenn du eine Sprachauswahl hast). Meist zeigt es auf die Hauptsprache der Website. Es ist nicht verpflichtend, aber empfohlen.
Wo man es deklariert
Es gibt drei gleichwertige Orte; wähle einen und bleib konsistent:
<link>-Tags im<head>(die übliche Wahl für HTML-Seiten).- Der HTTP-Header
Link:(für PDFs und andere Nicht-HTML-Dateien). - Die XML-Sitemap mit
<xhtml:link>-Elementen in jedem<url>. Das ist bei vielen Seiten die bequemste Option, weil ein Generator die Gegenseitigkeit automatisch sicherstellen kann.
Wie Canonical und hreflang zusammenspielen
Das ist der Teil, der am meisten Verwirrung stiftet. Die Regel ist einfach: Das Canonical jeder Version zeigt auf sich selbst, und hreflang zeigt auf alle Versionen.
| Seite | canonical | hreflang |
|---|---|---|
/es/guia/ |
/es/guia/ |
es → /es/guia/, de → /de/anleitung/, x-default → /es/guia/ |
/de/anleitung/ |
/de/anleitung/ |
es → /es/guia/, de → /de/anleitung/, x-default → /es/guia/ |
Der schwere Fehler ist, die spanische URL als Canonical der deutschen Version zu setzen. Das sagt Google, die deutsche Seite sei ein Duplikat der spanischen und solle nicht indexiert werden, was hreflang komplett aushebelt. Es sind zwei verschiedene Seiten (verschiedene Sprachen); jede ist ihr eigenes Canonical.
Checkliste
- Ein einziges Canonical-Tag pro Seite, absolut, auf eine indexierbare 200-URL.
- Das Canonical jeder Sprache zeigt auf ihre eigene URL.
- hreflang mit gültigen Codes (Sprache oder Sprache-REGION).
- Derselbe Satz hreflang-Tags auf jeder Version, Selbstreferenz eingeschlossen.
x-defaultzeigt auf die Standardversion.- hreflang-URLs stimmen exakt mit den Canonicals überein (gleicher Schrägstrich, gleiches Protokoll).
- Wird eine Version entfernt, wird sie aus dem hreflang aller anderen entfernt.
Häufige Fehler
- Relative URLs in Canonical oder hreflang. Google empfiehlt absolute; relative werden leicht falsch interpretiert.
- Canonical auf die Startseite auf jeder Seite wegen eines Template-Fehlers. Häufiger als man denkt, und es deindexiert die ganze Website.
- hreflang ohne Rückverweise. Ursache Nummer eins für „keine Rückverweis-Tags“ in der Search Console.
- Sprachen in einer URL mischen. Wenn
/anleitung/je nach Browser Spanisch oder Deutsch zeigt, gibt es keine URL pro Sprache, und hreflang kann nicht funktionieren. Jede Sprache braucht ihre eigene URL. - Canonical auf eine URL mit Parametern oder ohne HTTPS. Zeige immer auf die saubere, sichere Version.
Wie du es prüfst
In der Search Console zeigt die URL-Prüfung, welche URL Google als kanonisch gewählt hat, im Vergleich zu der, die du deklarierst. Weichen sie ab, prüfe doppelte Inhalte, Weiterleitungen und interne Links: Google wählt tendenziell die URL, die die meisten internen Links erhält. Für hreflang spart dir jeder Validator, der die Gegenseitigkeit zwischen Versionen prüft, Stunden; du kannst die Tags auch aus einer einzigen Routenquelle generieren (wie dieser Blog), damit sie nie auseinanderlaufen.
Fazit
Canonical beantwortet „welche dieser doppelten URLs soll indexiert werden?“ und hreflang beantwortet „welche Sprachversionen dieser Seite gibt es?“. Setze das erste selbstreferenzierend und absolut um, das zweite als vollständigen, gegenseitigen Satz mit x-default, und benutze Canonical nie, um verschiedene Sprachen zusammenzuführen. Wenn möglich, generiere beides automatisch aus derselben Quelle der Wahrheit: Die meisten Fehler entstehen, wenn man sie von Hand pflegt.