hreflang, canonical und robots-noindex sind kompliziert in der Handhabung. Zumindest wenn du es richtig machen willst. Lese weiter, wenn du wissen willst, wie man diese 3 Attribute richtig einsetzt.
Mit hreflang, canonical und robots-noindex teilen wir Google mit, ob und wie eine Seite indiziert werden soll. Die 3 Attribute können aber widersprüchlich genutzt werden und dann kann es sein, dass deine Seite von Google nicht aufgenommen wird, oder schlecht indiziert wird.
Wie verhinderst du eine schlechte Indizierung?
Fakten zu den einzelnen Attributen:
- NOINDEX bedeutet, dass die aktuelle Seite nicht von Google indiziert werden soll.
- CANONICAL bedeutet, dass die aktuelle Seite relevant ist und indiziert werden soll. Allerdings soll die Seite unter einer anderen URL indiziert werden.
- HREFLANG bedeutet, dass die aktuelle Seite relevant ist und indiziert werden soll. Weiters teilen wir Google mit, dass es verschiedene Versionen dieser Seite für verschiedene Sprachen bzw. Länder gibt. Es ist möglich, dass zwei Varianten der Seite fast oder ganz gleich sind. Mit HREFLANG teilen wir Google mit, dass diese Varianten bewusster duplicate Content sind.
Gefahren bei Kombinationen der Attribute
Wenn wir die 3 Attribute kombinieren, können wir Google eine undeutliche Botschaft senden. Wenn Google nicht versteht, was wir meinen, dann wird unsere Seite nicht so gut indiziert, wie es möglich wäre!
Daher sollten wir folgende Kombinationen vermeiden:
- NOINDEX mit CANONICAL: Wir sagen Google, dass die Seite nicht indiziert werden soll, aber dies bitte unter einer anderen URL. Wie soll denn das gehen? Google könnte es so verstehen, dass auch die Zielseite vom CANONICAL nicht indiziert werden soll. Das ist aber vermutlich nicht das, was wir bezwecken.
- NOINDEX mit HREFLANG: Wir sagen Google, dass die Seite nicht indiziert werden soll und es gibt andere Sprachversionen, die Google berücksichtigen soll. Was meinen wir denn damit, fragt Google sich? Google weiß nicht, ob es die aktuelle Seite und die Sprachversionen aufnehmen soll, das kann nicht zu einer optimalen Indizierung führen.
- CANONICAL mit HREFLANG: Wir sagen Google, dass die Seite unter einer anderen URL indiziert werden soll und es gibt andere Sprachversionen, die Google berücksichtigen soll. Es ist ein MUSS für Google, dass von HREFLANG-Zielseiten wieder ein HREFLANG zurückführt zu unserer aktuellen Seite. Aber die aktuelle Seite soll wegen CANONICAL nicht aufgenommen werden, also wie soll das funktionieren?
hreflang, canonical und noindex richtig, so geht es:
1) Für Standardseiten gilt:
- robots: INDEX, FOLLOW
- hreflang
- canonical auf die eigene URL
2) Für Seiten mit GET-Parameter in der URL gilt:
(ich gehe davon aus, dass GET-Parameter von Google nicht indiziert werden sollen)
- robots: INDEX, FOLLOW
- kein hreflang
- canonical auf die URL ohne GET-Parameter
3) Für Seiten mit Seitennummerierung (pagination) gilt:
Früher hat man Seiten mit Seitennummerierung nicht von Google indizieren lassen (NOINDEX und FOLLOW). Seit einiger Zeit sagt Google aber, dass die Links auf Seiten mit NOINDEX nicht mehr verfolgt werden. Also NOINDEX bedeutet automatisch auch NOFOLLOW. Natürlich wollen wir aber, dass die Links verfolgt werden. Es gibt jetzt eine einfache Lösung, Seiten mit Seitennumerierung sollen indiziert werden wie bei 1):
- robots: INDEX, FOLLOW
- hreflang
- canonical auf die eigene URL
Mit der komplizierteren Lösung können wir Google mitteilen, dass es sich um Seiten mit Seitennummerierung handelt. Dafür gibt es folgende Tags:
Für Seite 1:
- <link rel=”next” href=” https://www.domain.com/category?page=2″/>
- hreflang
- canonical auf die eigene URL
Für Seite 2 und folgende:
- <link rel=”prev” href=” https://www.domain.com/category?page=1″/>
- <link rel=”next” href=” https://www.domain.com/category?page=3″/>
- hreflang
- canonical auf die eigene URL
4) Definierte Seiten sollen nicht indiziert werden:
In einem Onlineshop sollen zB Suchresultate, Loginseite, Registrierung, Warenkorb und die Seite nach der Bestellung nicht indiziert werden. Diese Seiten werden individuell festgelegt.
- robots: NOINDEX, NOFOLLOW
- kein hreflang
- kein canonical
Pseudocode
Ich habe einen Pseudocode erstellt, wie man in einer Funktion die richtigen Attribute für jede einzelne Seite bestimmen kann. Die komplizierte Lösung für Pagination ist darin nicht enthalten.
/* definierte Seiten, die nicht indiziert werden sollen, wie zB Suchresultate, Loginseite, Registrierung, Seite nach Bestellung, etc. */ if auf definierten Seiten: ROBOTS: NOINDEX, NOFOLLOW kein hreflang kein canonical /* ich gehe davon aus, dass es keine für Google sinnvollen GET-Parameter gibt, außer der GET-Parameter für pagination */ elseif keine GET-Parameter: ROBOTS: INDEX, FOLLOW hreflang canonical auf aktuelle Seite /* pagination: Seiten mit page>1 sollen indiziert werden */ elseif nur GET-Parameter page && page>1: ROBOTS: INDEX, FOLLOW hreflang canonical auf aktuelle Seite /* Seiten GET-Parameter, auch wenn page=1 */ else: ROBOTS: INDEX, FOLLOW kein hreflang canonical auf Seite ohne GET-Parameter
HREFLANG, wie viel Seiten indiziert Google?
Google indiziert nicht alle HREFLANG-Varianten!
Wenn hreflang für die gleiche Sprache aber verschiedene Länder genutzt wird (zB de-de und de-at), dann ist der Inhalt der beiden Seiten vermutlich (fast) gleich. Google indiziert dann nur eine der Seiten (zB die Seite für Deutschland), registriert aber auch die 2. URL (also die österreichische) dazu. Wenn nun in Google Österreich gesucht wird, dann wird als Resultat Text aus der indizierten Seite aus Deutschland angezeigt, aber mit der österreichischen URL. So optimiert Google und liefert ein für uns gutes Resultat.
Die Search Console zeigt wenig indizierte Seiten
Wenn obenstehendes Beispiel für eine ganze Website von Google so durchgeführt wird, dann werden viele Seiten für Deutschland indiziert und keine oder nur sehr wenige Seiten für Österreich. Genau das konnte ich bei mehreren Kunden beobachten.
Die Anzahl der indizierten Seiten in der Search Console bei Kunden:
Bei beiden Kunden gibt es unterschiedliche Domains für de-de und de-at.
Kunde 1: .de-Domain: 19.000, .at-Domain: 527.000 indizierte Seiten
Die .at-Domain existierte vor der .de Domain und daher hat Google die Seiten der .at-Domain indiziert. Bei Google Deutschland erscheinen die Seiten genau so gut und mit der deutschen Domain. Dieser Kunde hat ca. 10 Mal so viel Besucher über Google Deutschland als über Google Österreich, also das passt gut zusammen, weil Deutschland 10 Mal so viel Einwohner hat wie Österreich.
Kunde 2: .de-Domain: 59.000, .at-Domain: 8.000 indizierte Seiten
Die .de-Domain existierte vor der .at Domain und daher hat Google die Seiten der .de-Domain indiziert. Bei Google Österreich erscheinen die Seiten genau so gut und mit der österreichischen Domain.
Referenzen
Das Know-how für diesen Artikel habe ich aus Erfahrung mit meinen Kunden gewonnen und von diesen Websites und Video:
https://www.121watt.de/seo/hreflang/
http://www.stateofdigital.com/hreflang-canonical-test/
Fragen? Bitte stelle Fragen!
Ich weiß, dieses Thema ist nicht einfach. Ich habe mich zB lange gefragt, warum Google so unterschiedlich viel Seiten indiziert von über hreflang verbundenen Domains. Jetzt weiß ich, dass das ganz normal und richtig ist so.
Wenn du Fragen hast, dann stelle sie hier. Ich werde versuchen, sie zu beantworten.
Okay. seite.de, seite.at und seite.ch alle haben 100% gleiche Inhalte. Wie kämpft man duplicate content in diesem Fall?
@Daniel:
Gleicher Inhalt für unterschiedliche Länder geht so mit Hreflang. Google sieht das dann nicht als duplicate content.
LINK REL=’alternate‘ HREFLANG=’de-de‘ HREF=’https://www.meinewebsite.de/index.php‘
LINK REL=’alternate‘ HREFLANG=’de-at‘ HREF=’https://www.meinewebsite.at/index.php‘
LINK REL=’alternate‘ HREFLANG=’de-ch‘ HREF=’https://www.meinewebsite.ch/index.php‘
Toll erklärt! Aber ich glaube für 3) gibt es eine andere Empfehlung: siehe https://yoast.com/pagination-seo-best-practices/ oder https://www.stonetemple.com/pagination-canonicalization-seo-your-technical-guide/
@Nielsen: Danke für die Anmerkung, das stimmt so. Ich habe den Text angepasst.