Start · Sprachen · JavaScript · Referenz · HTMLLinkElement.hreflang

HTMLLinkElement.hreflang

Eigenschaft

Liest oder setzt das <code>hreflang</code>-Attribut eines <code>&lt;link&gt;</code>-Elements, das die Sprache (und optional die Region) der verlinkten Ressource angibt.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLLinkElement.hreflang

Beschreibung

Die Eigenschaft hreflang des HTMLLinkElement-Interfaces spiegelt das HTML-Attribut hreflang wider. Sie enthält ein Sprach-Tag nach BCP 47, z. B. "de", "de-AT", "en-US" oder den Sonderwert "x-default". Damit gibt sie die Sprache (und gegebenenfalls die Region) der Ressource an, auf die der Link verweist, nicht die Sprache des aktuellen Dokuments.

In der Praxis wird das Attribut vor allem mit rel="alternate" eingesetzt. So kann man Suchmaschinen und anderen Clients mitteilen, dass eine Seite in anderen Sprach- oder Länderversionen existiert (Stichwort hreflang-SEO). Mit JavaScript kann man diese Alternativen auslesen, etwa um einen Sprachumschalter aufzubauen, oder in Single-Page-Anwendungen dynamisch setzen.

Die Eigenschaft ist ein reiner String-Reflektor: Beim Lesen erhält man den Attributwert oder einen leeren String, wenn das Attribut fehlt. Beim Schreiben wird das Attribut gesetzt. Der Browser prüft das Sprach-Tag nicht und normalisiert es auch nicht.

Parameter

Name Typ Default Beschreibung
$value string "" Beim Setzen: ein BCP-47-Sprach-Tag wie "fr", "pt-BR" oder "x-default".

Rückgabewert

Typ
string
Beschreibung
Den aktuellen Wert des hreflang-Attributs. Fehlt das Attribut, ist es ein leerer String "".

Beispiele

hreflang eines vorhandenen Links auslesen

// HTML: <link rel="alternate" href="https://example.com/en/" hreflang="en-US">
const link = document.querySelector('link[rel="alternate"]');
console.log(link.hreflang);
en-US

Sprachumschalter aus alternate-Links erzeugen

const alternates = [...document.querySelectorAll('link[rel="alternate"][hreflang]')];

const nav = document.createElement('nav');
for (const { hreflang, href } of alternates) {
  if (hreflang === 'x-default') continue;
  const a = document.createElement('a');
  a.href = href;
  a.hreflang = hreflang; // auch HTMLAnchorElement kennt hreflang
  a.textContent = hreflang.toUpperCase();
  nav.append(a, ' ');
}
document.body.prepend(nav);
console.log(alternates.map((l) => l.hreflang));
["de", "en-US", "fr", "x-default"]

Alternate-Link in einer SPA dynamisch setzen

const setAlternate = (lang, url) => {
  let link = document.head.querySelector(`link[rel="alternate"][hreflang="${lang}"]`);
  if (!link) {
    link = document.createElement('link');
    link.rel = 'alternate';
    link.hreflang = lang;
    document.head.append(link);
  }
  link.href = url;
  return link;
};

const l = setAlternate('de-AT', 'https://example.com/at/produkte');
console.log(l.outerHTML);
<link rel="alternate" hreflang="de-AT" href="https://example.com/at/produkte">

// Wichtig · Fallstricke

  • Keine Prüfung: Der Browser nimmt jeden String an, auch ungültige Werte wie "deutsch" oder "en_US" (Unterstrich statt Bindestrich). Wenn du prüfen willst, ob ein Tag gültig ist, kannst du Intl.getCanonicalLocales() verwenden. Diese Funktion wirft bei ungültigen Tags einen RangeError.
  • Nur ein Hinweis: hreflang beeinflusst weder das Laden noch das Rendern der Ressource.
  • SEO: Suchmaschinen werten hreflang-Links meist nur aus, wenn sie schon im ausgelieferten HTML stehen. Per JavaScript nachträglich gesetzte Links werden womöglich nicht erkannt. Außerdem sollten die Verweise gegenseitig sein, also jede Sprachversion auf alle anderen zeigen.
  • Die Sprache des aktuellen Dokuments steht nicht hier, sondern in document.documentElement.lang.
  • Browser-Kompatibilität: wird von allen gängigen Browsern seit Langem unterstützt.