Leider gibt es in der Praxis immer wieder Probleme mit der korrekten Implementierung des hreflang Attributs.
Grundsätzlich stehen die Sprachverknüpfung meist im HTML Head und bestehen aus einem Tag mit den Attributen rel=“alternative“, dem besagten hreflang=“x“ Attribut und der URL der alternativen Version als href=http://www.domain.com.
Gibt es 3 etwa verschiedene Versionen, zwei deutschsprachige für Deutschland und Österreich und noch eine „internationale“ auf Englisch sähe die Auszeichnung also so aus:
<link rel="alternate" hreflang="de-DE" href="http://www.domain.com/de/" />
<link rel="alternate" hreflang="de-AT" href="http://www.domain.com/at/" />
<link rel="alternate" hreflang="en" href="http://www.domain.com/" />
Alternativ können diese Angaben aber auch im http-Header oder über eine XML-Sitemap gelöst werden. Wie die Sprachversionen voneinander getrennt sind, ist dabei egal. Möglich wäre es, die Aufteilung über Subfolder, Subdomains oder eigene TLDs zu lösen.
Wichtig ist aber einige grundlegende Regeln zu beachten:
Erstens müssen natürlich alle Seiten einer Website miteinander verknüpft sein und nicht nur die Homepages, wobei natürlich auch immer die jeweiligen Subseiten verknüpft sein müssen.Gibt es eine Subseite in einer Sprache nicht, darf es auch keine hreflang Links zu diesem nicht vorhandenen Pendant geben.
Das hreflang-Attribut muss zweitens selbstreferenziell sein. Der Verweis auf die eigene URL als alternative Seite ist also immer mit dabei.
Drittens müssen über hreflang verlinkte URLs auch immer zurückverlinken. Eine einseitige Auszeichnung in nur einer Sprachversion bringt nichts. Dazu sollten viertens auch immer absolute URLS angegeben werden.
Hreflang & Canonical Tags gemeinsam einsetzen
Nun kann es aber auch vorkommen, dass ein Inhalt schon auf einer Sprachversion über verschiede URLs geladen wird. Ein klassisches Beispiel dafür sind immer Produkte, die in verschiedenen Kategorien eines Shops geladen werden.
Die URLs sehen zum Beispiel also so aus:
meinshop.com/kategorie1/meinprodukt/
meinshop.com/kategorie2/meinprodukt/
Um diese Form von Duplicate Content zu vermeinden setzt man in der Regel das Canonical Tag ein um eine Version des Inhalts, also in unserem Fall der Produktseite als kanonische Version zu markieren.
Also zum Beispiel durch
<link rel=“canonical“ href=“http://meinshop.com/kategorie1/meinprodukt/“ />
auf meinshop.com/kategorie2/meinprodukt/ (und selbstreferenziell auch auf meinshop.com/kategorie1/meinprodukt/ ).
Google weiß: OK – dieser Inhalt liegt auf beiden URLs, aber die kanonische Version soll bevorzugt werden.
Nun kann es natürlich vorkommen, dass eben jenes Problem auch in einer mehrsprachigen Website vorkommen kann, also etwas in diese Richtung:
Im Deutschen Shop, wie oben beschrieben lautet auf beiden Seiten
meinshop.com/kategorie1/meinprodukt/
meinshop.com/kategorie2/meinprodukt/
das Canonical Tag
<link rel=“canonical“ href=“http://meinshop.com/kategorie1/meinprodukt/“ />
Zusätzlich haben wir aber eine englische Version mit dem selben Problem:
en.meinshop.com/category1/myproduct/
en.meinshop.com/category2/myproduct/
beide mit Canonical auf
<link rel=“canonical“ href=“ http://en.meinshop.com/category1/myproduct/“ />
Haben wir jetzt diese Situation auf zwei oder mehr Sprachversionen heißt es aufpassen!
Würde man jetzt einfach die hreflang Auszeichungen zusätzlich auf allen Seiten laden, würde das zu unterschiedlichen Signalen führen. Und wir möchten nicht, dass Google verwirrt ist.
Auf meinshop.com/kategorie2/meinprodukt/ würden die hreflang Tags den Robot auf alternative Versionen dieser Seite auf anderen URLs hinweisen, die es zu indexiert gibt. Gleichzeitig sagt man über das Canonical auf die URL meinshop.com/kategorie1/meinprodukt/, dass es nur diese andere Seite indexiert werden soll.
Auch der Ansatz, alle die hreflang tags auf allen Seiten immer nur auf die kanonischen Versionen (also /kategorie1/ bzw. /category1/) zeigen zu lassen funktioniert nicht. Das Problem: Auf meinshop.com/kategorie2/meinprodukt/ oder en.meinshop.com/category2/myproduct/ gäbe es keine selbstreferenziellen hreflang Auszeichnungen.
Die Lösung: Nur URLs, die nicht per Canonical-Tag auf eine andere URL verweisen, sollten mit dem hreflang-Attribut ausgezeichnet sein. Ein selbstrefenzielles Canonical-Tag ist kein Problem.
In unserem Beispiel wären die Tags dann auf meinshop.com/kategorie1/meinprodukt/ dann:
<link rel="alternate" hreflang="de" href=" http://meinshop.com/kategorie1/meinprodukt/" />
<link rel="alternate" hreflang="en" href=" en.meinshop.com/category1/myproduct/" />
<link rel=“canonical“ href=“http://meinshop.com/kategorie1/meinprodukt/“ />
aber auf meinshop.com/kategorie2/meinprodukt/ lediglich
<link rel=“canonical“ href=“http://meinshop.com/kategorie1/meinprodukt/“ />
ebenso auf der englischen Version en.meinshop.com/category1/myproduct/
<link rel="alternate" hreflang="de" href=" http://meinshop.com/kategorie1/meinprodukt/" />
<link rel="alternate" hreflang="en" href=" en.meinshop.com/category1/myproduct/" />
<link rel=“canonical“ href=“ http://en.meinshop.com/category1/myproduct/“ />
aber auf en.meinshop.com/category2/myproduct/ wieder nur
<link rel=“canonical“ href=“ http://en.meinshop.com/category1/myproduct/“ />