Deutlich erklärt: hreflang, canonical und noindex

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.

 

 

  1. Daniel sagt:

    Okay. seite.de, seite.at und seite.ch alle haben 100% gleiche Inhalte. Wie kämpft man duplicate content in diesem Fall?

  2. Emile Schenk sagt:

    @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‘

  3. Emile Schenk sagt:

    @Nielsen: Danke für die Anmerkung, das stimmt so. Ich habe den Text angepasst.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.