onpage

Seitensprache deklarieren

MetricSpot prüft auf ein gültiges lang-Attribut auf <html>. Ohne es spricht der Screenreader falsch aus, hreflang verliert seinen Anker, und Übersetzungstools raten.

Was diese Prüfung macht

Liest das lang-Attribut auf dem Wurzelelement <html> und prüft, ob es ein gültiger BCP 47-Sprach-Tag ist (en, en-US, es, de, de-AT, pt-PT). Die Prüfung fällt durch, wenn:

  • Das Attribut fehlt.
  • Der Wert leer ist (lang="").
  • Der Wert keinem bekannten Sprach-Subtag entspricht.

Warum es wichtig ist

Das lang-Attribut ist einer der billigsten HTML-Hygiene-Gewinne — ein Attribut auf einem Element — aber seine Abwesenheit bricht gleich drei Konsumenten gleichzeitig.

  • Screenreader wechseln Stimme / Aussprache-Engine anhand von lang. Eine französische Seite mit lang="en" wird von der englischen Stimme gelesen, die jedes Wort falsch ausspricht. NVDA, JAWS, VoiceOver und TalkBack verhalten sich alle so.
  • Browser-Übersetzung (Chromes „Diese Seite übersetzen”, Safaris Übersetzungsmenü) nutzt lang als Quellsprache. Ohne lang muss sie aus dem Inhalt raten — langsamer und auf kurzen Seiten unzuverlässiger.
  • hreflang-Anker. Deine <link rel="alternate" hreflang="…">-Tags brauchen eine Selbst-Deklaration auf der Wurzel — Googles Dokumentation empfiehlt ausdrücklich, lang auf jeder Seite zu deklarieren, um das hreflang-Netzwerk zu bestätigen.
  • SEO. Google nutzt lang als eines mehrerer Signale, um zu entscheiden, in welchem Land / welcher Sprache die Seite ausgespielt wird. Der Bericht „Internationale Ausrichtung” der Search Console markiert Seiten ohne lang.
  • KI-Extraktion. Mehrsprachige LLM-Systeme chunken Inhalt mit der deklarierten Sprache als Hinweis. Falsch deklariertes lang senkt den Vertrauens-Score des Chunks.

Wie du es behebst

Setze lang auf das <html>-Element. Nutze einen Zwei-Buchstaben-Sprachcode für allgemeine Inhalte oder sprache-region, wenn dein Inhalt regional spezifisch ist:

<!DOCTYPE html>
<html lang="de">
<html lang="pt-PT">  <!-- Europäisches Portugiesisch, getrennt von pt-BR -->

Mehrsprachige Sites — pro Seite deklarieren. lang auf <html> sollte dem Hauptinhalt der Seite entsprechen, nicht der Default-Sprache der Site. Hast du eine spanische Übersetzung unter /es/, braucht diese Seite <html lang="es">, nicht <html lang="de">.

Astro:

---
const { lang = "de" } = Astro.props;
---
<html lang={lang}>

Dann lang="es" aus deinem spanischen Layout übergeben.

Next.js (App Router):

// app/layout.tsx
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="de">
      <body>{children}</body>
    </html>
  );
}

Für Per-Locale-Routes: in app/[locale]/layout.tsx aufteilen und die Locale aus den Params lesen.

WordPress: Das <html>-Element wird vom language_attributes()-Aufruf deines Themes generiert, der die Sprache aus Einstellungen → Allgemein liest. Das Template macht das bereits — der Fehler bedeutet fast immer, dass das Theme die header.php überschrieben und den Aufruf entfernt hat. Setze <html <?php language_attributes(); ?>> wieder ein.

Gemischtsprachige Inhalte. Ist ein Absatz oder Block in einer anderen Sprache als die Seite, deklariere es inline:

<p>Die Franzosen nennen es <span lang="fr">le mot juste</span>.</p>

Screenreader wechseln für das Span die Stimme und zurück.

Selbst auditieren: DevTools → Konsole → document.documentElement.lang → sollte "de" zurückgeben, nicht "".

Häufig gestellte Fragen

Soll ich de oder de-DE verwenden?

Nutze de, es sei denn, dein Inhalt ist gezielt deutschlanddeutsch (oder österreichisch, schweizerisch) und das spielt für Übersetzung/Aussprache eine Rolle. de deckt alle deutschsprachigen Locales ab; de-DE engt es ein. Für die meisten Sites ist der breitere Tag richtig.

Was ist der Unterschied zwischen lang und xml:lang?

lang ist für HTML, xml:lang für XML (und XHTML). Moderne HTML5-Seiten brauchen nur lang. Beides anzugeben ist nur Rauschen.

Mein CMS setzt überall lang="de-DE". Ist das falsch?

Nicht falsch, nur enger als nötig. Bei deutschland-spezifischen Sites lass es so. Bei Sites mit globaler deutschsprachiger Zielgruppe (DACH) wechsle auf reines de.

Quellen

Zuletzt aktualisiert 2026-05-11