Technisches SEO

hreflang mit dem Google Tag Manager in drei Schritten einbauen

Wie du hreflang ohne Entwicklung aus dem Sprachwechsler erzeugst und wo die Grenzen der Methode liegen.

Seite /en/blog/ENDEGTM<head>hreflang enhreflang degerendert
Eoghan HennErstmals veröffentlicht: 11.08.2017Stand: 15.10.20269 Min. Lesezeit
Kurz gesagt
  • hreflang lässt sich ohne Entwicklung über den Google Tag Manager einbauen. Die URLs kommen aus dem Sprachwechsler, und ein Custom-HTML-Tag schreibt die Links in den Head.
  • Google dokumentiert hreflang per JavaScript nicht. Ein eigener Test von 2017 deutet darauf hin, dass Google die Links im gerenderten HTML auswertet.
  • Sicherer bleibt hreflang im Quelltext. Der Tag Manager eignet sich als Übergang.

Nicht jedes CMS kann hreflang ausgeben, und nicht jedes Team hat Zeit für eine Umsetzung im Template. Ist der Google Tag Manager eingebunden, gibt es einen Weg ohne Entwicklung. Du brauchst eine Website mit mindestens zwei Sprach- oder Länderversionen, die sich gegenseitig verlinken, etwa über einen Sprachwechsler.

Die Aufgabe

Jede Seite braucht hreflang-Links auf alle ihre Sprach- und Länderversionen, einschließlich eines Verweises auf sich selbst. Für eine Blogseite auf Englisch und Deutsch sieht das auf beiden Versionen so aus:

<link rel="alternate" href="https://www.example.com/en/blog/" hreflang="en"> <link rel="alternate" href="https://www.example.com/de/blog/" hreflang="de">

Von Hand für jede Seite ist das nicht machbar. Der Tag Manager soll die Links deshalb für alle Seiten auf einmal erzeugen. Dafür braucht er auf jeder Seite die URLs der anderen Versionen. Die stehen meist schon im Sprachwechsler. Grundlagen zu Codes und Sets erklärt der Ratgeber hreflang.

Schritt 1. Links aus dem Sprachwechsler auslesen

Der Tag Manager hat einen Variablentyp „DOM-Element“, der Werte aus dem HTML einer Seite liest. Für jede Sprach- oder Länderversion legst du eine solche Variable an.

  1. Unter „Variablen“ bei den benutzerdefinierten Variablen auf „Neu“ klicken und den Typ „DOM-Element“ wählen.
  2. Als Auswahlmethode „CSS-Selektor“ nehmen und der Variable den Namen der Zielversion geben, etwa „Link zur deutschen Version“.
  3. Den Selektor findest du in Chrome. Rechtsklick auf den Link im Sprachwechsler, „Untersuchen“, dann im markierten Code „Copy“ und „Copy selector“. Ein Beispiel ist #menu-item-443-de > a.
  4. Als Attributname „href“ eintragen. Ohne Attribut liefert die Variable den Linktext, also etwa „DE“.
  5. Für jede weitere Version wiederholen.

Im Vorschaumodus prüfst du, ob die Variablen stimmen. Auf jeder Seite müssen sie die URLs der anderen Versionen zeigen, nicht die der aktuellen Seite. Der kopierte Selektor ist der schnelle Weg. Wer CSS-Selektoren kennt, findet meist robustere, die Template-Änderungen besser überstehen.

Schritt 2. Ein Tag je Sprachversion

Für jede Sprachversion legst du ein Tag vom Typ „Benutzerdefiniertes HTML“ an. Das Skript für die englischen Seiten erzeugt zwei Links. Der erste verweist mit der eingebauten Variable {{Page URL}} auf die Seite selbst, mit fest eingetragenem Sprachcode. Der zweite holt die URL der deutschen Version aus der Variable aus Schritt 1.

<script> // Selbstverweis der englischen Seite var link_en = document.createElement('link'); link_en.rel = 'alternate'; link_en.href = '{{Page URL}}'; link_en.hreflang = 'en'; document.head.appendChild(link_en); // Verweis auf die deutsche Version aus dem Sprachwechsler var link_de = document.createElement('link'); link_de.rel = 'alternate'; link_de.href = '{{Link zur deutschen Version}}'; link_de.hreflang = 'de'; document.head.appendChild(link_de); </script>

Den zweiten Block wiederholst du für jede weitere Version. Als Trigger nimmst du alle Seiten der englischen Version. Für die deutschen Seiten legst du ein zweites Tag an, mit „de“ im Selbstverweis und der Variable für die englische Version. Bei vielen Versionen geht es mit einer Nachschlagetabelle auch mit einem einzigen Tag, siehe unten.

Ältere Anleitungen nutzen jQuery('head').append(). Die Fassung oben kommt ohne jQuery aus und macht dasselbe.

Ein Tag für alle Versionen mit einer Nachschlagetabelle

Mit vielen Sprach- und Länderversionen wird ein Tag je Version unübersichtlich. Eine Nachschlagetabelle liefert dann den hreflang-Code der aktuellen Seite, im Beispiel je Domain. Weitere Versionen bekommen je eine Zeile in der Tabelle und einen Eintrag im Skript. Wie Nachschlagetabellen funktionieren und wofür du sie sonst nutzt, etwa für GA4, zeigt der Ratgeber Nachschlagetabellen im Google Tag Manager.

Eingabe (Page Hostname)Ausgabe (hreflang-Code der Seite)
www.example.comen
www.example.dede

Liegen die Versionen in Verzeichnissen, nimmst du statt der Nachschlagetabelle eine RegEx-Tabelle mit {{Page Path}} als Eingabe. Sie prüft Muster wie ^/de/ von oben nach unten, nimmt den ersten Treffer und kann einen Standardwert setzen. Mit beiden Varianten reicht ein einziges Custom-HTML-Tag für alle Seiten mit Sprachwechsler.

<script> (function () { // URLs der Versionen aus den Variablen aus Schritt 1 var versionen = { 'en': '{{Link zur englischen Version}}', 'de': '{{Link zur deutschen Version}}' }; // Selbstverweis über die Nachschlagetabelle versionen['{{hreflang-Code der Seite}}'] = '{{Page URL}}'; Object.keys(versionen).forEach(function (code) { var url = versionen[code]; if (!url || url === 'undefined') return; var link = document.createElement('link'); link.rel = 'alternate'; link.hreflang = code; link.href = url; document.head.appendChild(link); }); })(); </script>

Das Skript nimmt die URLs der Versionen aus den DOM-Variablen aus Schritt 1 und überschreibt den Eintrag der aktuellen Sprache mit der eigenen URL. Leere Variablen überspringt es, sodass auf Seiten ohne Gegenstück keine kaputten Links entstehen. Prüfe im Vorschaumodus auf je einer Seite pro Version, ob die Nachschlagetabelle den richtigen Code liefert.

Schritt 3. x-default ergänzen, optional

2017 leitete die Root-URL von searchviu.com Nutzer je nach Browsersprache auf die deutsche oder englische Startseite weiter. Das ist der klassische Fall für x-default. Ein drittes Tag fügt auf allen Startseiten-Versionen einen Link mit x-default auf die Root-URL ein.

<script> var link_xd = document.createElement('link'); link_xd.rel = 'alternate'; link_xd.href = 'https://www.example.com/'; link_xd.hreflang = 'x-default'; document.head.appendChild(link_xd); </script>

Soll stattdessen eine ganze Sprachversion als Standard gelten, feuerst du auf ihren Seiten den Link mit {{Page URL}} und auf allen anderen Versionen den Link mit der passenden Variable aus Schritt 1.

Funktioniert das?

Ein eigener Test von 2017 deutet darauf hin, dass Google hreflang im gerenderten HTML auswertet, beschrieben im JavaScript-SEO-Experiment zu hreflang. Google selbst dokumentiert hreflang per JavaScript nicht. Der Tag Manager schreibt die Links in den Head des gerenderten HTML.

Vor dem Einbau rankten bei Markensuchen auf google.de zwei URLs von searchVIU, die deutsche Startseite und die Root-URL mit englischem Snippet. Etwa eine Woche nach dem Einbau zeigte Google auf google.de nur noch die deutsche Version. Unsere Erklärung ist, dass Google die Sprachstruktur der Website mit hreflang und x-default auf der Root-URL besser verstanden hat. Es ist ein Fall auf einer Website bei Markensuchen, kein Test mit Kontrollgruppe.

WegVorteilNachteil
HTML im QuelltextGoogle liest es ohne Rendering, jedes Tool sieht esBraucht CMS, Plugin oder Entwicklung
XML-SitemapUnabhängig vom Template, gut für große WebsitesEigene Pflege, Fehler fallen spät auf
Google Tag ManagerOhne Entwicklung umsetzbarErst nach dem Rendering sichtbar, hängt an Selektoren

Grenzen der Methode

  • Tools, die nur den Rohquelltext lesen, finden die Links nicht. Prüfe im gerenderten HTML.
  • Google rendert Seiten mit Verzögerung. Bis die Angaben wirken, kann es länger dauern als bei hreflang im Quelltext.
  • Die Links müssen im Head landen. Steht dort vorher ein ungültiges Element wie img oder iframe, nimmt Google das Ende des Heads an und liest die folgenden Elemente nicht.
  • Ändert sich das Template, stimmt der Selektor womöglich nicht mehr, und die Variablen liefern leere oder falsche Werte.
  • Seiten ohne Gegenstück, etwa Produkte nur in einem Land, brauchen eine Trigger-Bedingung. Das Tag feuert dann nur, wenn der Link im Sprachwechsler existiert.

Kann dein CMS oder ein Plugin hreflang ausgeben, ist das die bessere Wahl. Der Tag Manager eignet sich als Übergang oder für Websites, an deren Templates du nicht herankommst. Die Methode funktioniert auch domainübergreifend, solange sich die Versionen verlinken.

Was hat sich seitdem geändert?

Den Bericht „Internationale Ausrichtung“ in der Search Console, in dem 2017 hreflang-Angaben auftauchten, gibt es nicht mehr. Ob Google die Links sieht, prüfst du heute mit der URL-Prüfung und dem gerenderten HTML unter „Gecrawlte Seite anzeigen“. Der Vorschaumodus des Tag Managers läuft inzwischen über Tag Assistant. Googles Dokumentation zu hreflang nennt weiterhin HTML, HTTP-Header und Sitemap und erwähnt JavaScript nicht. Für das Canonical schreibt Google, dass es per JavaScript gesetzt beim Rendern übernommen wird, empfiehlt aber das HTML. Für hreflang gibt es keine entsprechende Aussage. Das Ergebnis oben ist eine Beobachtung von 2017.

Häufige Fehler

  • Die Variable liefert auf jeder Seite die eigene URL statt der URL der anderen Version.
  • Der Selbstverweis fehlt, weil das Tag nur die anderen Versionen einträgt.
  • Das Tag einer Sprachversion feuert auf allen Seiten, und die Sprachcodes stimmen dann auf der Hälfte nicht.
  • Das Skript nutzt jQuery, das auf der Website nicht geladen ist.
  • Der Sprachwechsler verlinkt auf die Startseite der anderen Sprache statt auf die passende Seite.

Häufige Fragen

Kann ich hreflang mit dem Google Tag Manager einbauen?

Ja. Ein Custom-HTML-Tag schreibt die Links in den Head. Auf searchviu.com wirkten sie 2017 nach unserer Beobachtung etwa eine Woche nach dem Einbau. Google dokumentiert diesen Weg nicht.

Ist hreflang per GTM genauso gut wie im Quelltext?

Im Quelltext ist es sicherer. Google muss die Seite für GTM-Angaben erst rendern, und manche Tools sehen die Links gar nicht.

Warum findet mein SEO-Tool die hreflang-Links nicht?

Viele Tools lesen nur den Rohquelltext. Die Links aus dem Tag Manager stehen erst im gerenderten HTML.

Brauche ich ein Mehrsprachen-Plugin?

Nein. Wichtig ist nur, dass sich die Versionen gegenseitig verlinken, damit der Tag Manager die URLs auslesen kann.

Was ist eine Nachschlagetabelle im Google Tag Manager?

Eine benutzerdefinierte Variable, die je nach Wert einer anderen Variable einen festgelegten Wert ausgibt, hier den hreflang-Code je Hostname. Mehr dazu im Ratgeber Nachschlagetabellen im Google Tag Manager.

Funktioniert das über mehrere Domains?

Ja, solange der Sprachwechsler auf die passenden Seiten der anderen Domains verlinkt.

searchVIU rendert jede Seite in Google Chrome und speichert Rohquelltext und gerendertes HTML. So siehst du, ob hreflang-Links aus dem Tag Manager tatsächlich im Head ankommen. Der Themenreport Hreflang zeigt, was sich seit dem letzten Crawl geändert hat. Mehr dazu auf der Seite SEO Crawler.

Demo anfragen

Quellen

Abgerufen am 15.10.2026. Ist eine Angabe veraltet oder fehlt etwas, schreib uns.

  1. Google, Lokalisierte Versionen deiner Seiten: https://developers.google.com/search/docs/specialty/international/localized-versions · Stand 21.09.2026
  2. Google, JavaScript-SEO-Grundlagen: https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics · Stand 04.03.2026
  3. Google, Gültige Elemente im head: https://developers.google.com/search/docs/crawling-indexing/valid-page-metadata · Stand 10.12.2025
  4. Tag-Manager-Hilfe, Vorschau und Debugging: https://support.google.com/tagmanager/answer/6107056
  5. Tag-Manager-Hilfe, Benutzerdefinierte Variablen: https://support.google.com/tagmanager/answer/7683362
  6. Search-Console-Hilfe, Der Bericht „Internationale Ausrichtung“ wurde eingestellt: https://support.google.com/webmasters/answer/12474899