Seitensprache fehlt (html-has-lang)

Die Regel html-has-lang meldet eine Seite, deren <html>-Element kein oder ein leeres lang-Attribut hat. Screenreader, Übersetzungsdienste und Browser müssen dann raten, in welcher Sprache die Seite geschrieben ist. Die Lösung ist ein Attribut im Seiten-Template: <html lang="de">.

Was die Regel bedeutet

WCAG 3.1.1 Sprache der Seite verlangt, dass die Standardsprache jeder Seite technisch ermittelbar ist. In HTML übernimmt das das lang-Attribut am Wurzelelement. Sein Wert ist ein Sprachcode wie de, de-DE oder en.

Die Regel ist bewusst einfach: Sie ist erfüllt, wenn <html> ein nicht leeres lang trägt. Ein nicht leeres xml:lang genügt ebenfalls, aber nur bei XHTML-Dokumenten, die als XML ausgeliefert werden. Auf einer normalen HTML-Seite schlägt xml:lang ohne lang an, weil Browser es dort ignorieren.

Was die Regel nicht prüft:

  • ob der Wert ein gültiger Sprachcode ist – dafür gibt es undefined;
  • ob der Code die Sprache nennt, in der die Seite tatsächlich geschrieben ist – eine deutsche Seite mit lang="en" besteht;
  • anderssprachige Passagen innerhalb der Seite – das regelt WCAG 3.1.2, geprüft von undefined.

Wen es betrifft

Vor allem blinde und sehbehinderte Menschen, die einen Screenreader nutzen. Der Screenreader wählt Stimme und Ausspracheregeln nach der Seitensprache. Fehlt lang, nimmt er seine eigene Voreinstellung – eine deutsche Seite mit englischer Stimme vorgelesen ist kaum zu verstehen, und umgekehrt. Auch die Übersetzungsfunktion des Browsers, die Silbentrennung mit hyphens: auto und die Rechtschreibprüfung in Formularfeldern hängen an der Seitensprache.

Eine fehlende Seitensprache ist häufig: Die WebAIM Million 2026 fand sie auf 13,5 % der eine Million meistbesuchten Startseiten [3].

Warum die Prüfung anschlägt

  • Handgeschriebene oder alte Templates, die mit einem nackten <html> beginnen.
  • Static-Site-Generatoren und Starterkits, deren Basislayout nie eine Sprache gesetzt hat.
  • CMS-Themes, die das Attribut aus einer Einstellung ausgeben, die in dieser Installation leer ist.
  • Single-Page-Apps, bei denen der Server eine leere Hülle schickt und lang erst später per JavaScript gesetzt wird – oder gar nicht.
  • xml:lang ohne lang, übernommen aus alten XHTML-Vorlagen.
  • Fehlerseiten, Landingpages und Newsletter-Webansichten, die außerhalb des Haupt-Templates entstehen.

So beheben Sie es

  1. Suchen Sie das eine Template oder Layout, das <html> ausgibt – alle Seiten erben davon.
  2. Ergänzen Sie lang mit der Hauptsprache der Seite. Der kurze Code (de, en) genügt; eine Region (de-AT, de-CH) nur, wenn sie einen Unterschied macht, etwa bei der Rechtschreibung.
  3. Auf mehrsprachigen Websites setzen Sie den Wert pro Seite aus der Locale – nie als festen Text in einem gemeinsamen Template.
<!-- Vorher: keine Seitensprache -->
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Versand und Rückgabe – Beispiel-Shop</title>
  </head>
  <body>
    <main><h1>Versand und Rückgabe</h1></main>
  </body>
</html>
<!-- Nachher: Seitensprache am Wurzelelement gesetzt -->
<!doctype html>
<html lang="de">
  <head>
    <meta charset="utf-8">
    <title>Versand und Rückgabe – Beispiel-Shop</title>
  </head>
  <body>
    <main><h1>Versand und Rückgabe</h1></main>
  </body>
</html>

Bei einer Single-Page-App gehört das Attribut in das serverseitig gerenderte oder statische index.html. document.documentElement.lang nach dem Laden zu setzen hilft zwar, aber Crawler und Hilfsmittel, die die erste Antwort lesen, sehen die Seite dann noch ohne Sprache.

So prüfen Sie es von Hand

  1. Öffnen Sie den Seitenquelltext (Strg+U bzw. Cmd+Option+U) und sehen Sie sich das <html>-Tag an – oder geben Sie in der Browserkonsole document.documentElement.lang ein. Ein leeres Ergebnis heißt: keine Sprache.
  2. Prüfen Sie, ob der Wert zur Sprache des Textes passt. Eine falsche Sprache sieht die Regel nicht.
  3. Testen Sie Seiten aus jedem Template: Startseite, Artikel, Shop, Suchergebnisse, 404-Seite.
  4. Lesen Sie mit einem Screenreader (NVDA ist unter Windows kostenlos, VoiceOver ist in macOS und iOS eingebaut) den ersten Absatz vor und hören Sie hin: Passt die Aussprache zur Sprache?

Zugehöriges WCAG-Kriterium

3.1.1 Sprache der Seite, Stufe A. Verwandt: 3.1.2 Sprache von Teilen für anderssprachige Passagen innerhalb der Seite.

So meldet Reviseberg diese Regel

Reviseberg führt html-has-lang auf jeder gecrawlten Seite bei 1280 px aus. Weil das Attribut aus einem gemeinsamen Template kommt, erscheint der Befund meist auf allen Seiten gleichzeitig – ein Element pro Seite. In der Befundliste sehen Sie die Regel mit Schweregrad, WCAG-Kriterium 3.1.1 und Stufe, der Zahl der Seiten und den Punkten, die ein Fix zurückbringt. Im Detail stehen der Selektor (html), der HTML-Ausschnitt des öffnenden Tags und alle betroffenen Seiten. So erkennen Sie, ob ein Template die ganze Website betrifft oder nur eine einzelne Seite ausschert. Befunde können Sie mit Begründung als „ignorieren“, „nicht behebbar“ oder „Fehlalarm“ markieren; jede Entscheidung wird protokolliert.

Verwandte Regeln

  • undefined – die Seite hat ein lang, aber der Wert ist kein gültiger Sprachcode.
  • undefined – ein ungültiges lang an einer Passage innerhalb der Seite.
  • undefined – die andere Angabe auf Template-Ebene, die jede Seite braucht.

Seitensprache auf Ihrer ganzen Website prüfen – kostenloser Scan

Häufige Fragen

Reicht lang="de" oder brauche ich de-DE?

de genügt für WCAG 3.1.1. Ein Regionscode wie de-DE, de-AT oder de-CH hilft der Rechtschreibprüfung und manchen Stimmen, ist aber freiwillig.

Meine Website ist nur auf Deutsch. Brauche ich das Attribut trotzdem?

Ja. Ein Screenreader geht nicht von Deutsch aus, sondern von seiner eigenen Voreinstellung – und die kann Englisch oder jede andere Sprache sein.

Zählt es, wenn JavaScript lang setzt?

Browser und Hilfsmittel lesen das Attribut aus dem DOM, sobald es gesetzt ist. Sicherer ist es trotzdem im HTML, das der Server schickt, denn Werkzeuge, die die erste Antwort lesen, sehen einen später gesetzten Wert nicht.

Prüft die Regel, ob die Sprache stimmt?

Nein. Sie prüft nur, ob überhaupt ein Wert da ist. Ob er gültig ist, prüft html-lang-valid; ob es die richtige Sprache ist, entscheidet ein Mensch.

Quellen

  1. W3C, Understanding SC 3.1.1 Language of Page – https://www.w3.org/WAI/WCAG22/Understanding/language-of-page
  2. Deque University, axe-core 4.13 Regel html-has-lang – https://dequeuniversity.com/rules/axe/4.13/html-has-lang
  3. WebAIM, The WebAIM Million (2026) – https://webaim.org/projects/million/
  4. W3C, Technique H57: Using the language attribute on the HTML element – https://www.w3.org/WAI/WCAG22/Techniques/html/H57
  5. W3C Internationalization, Language tags in HTML and XML – https://www.w3.org/International/articles/language-tags/

Sehen Sie, was ein Scan auf Ihrer Website findet

Eine Seite in rund 30 Sekunden, ohne E-Mail. Der vollständige Bericht umfasst bis zu 100 Seiten und einen Tastatur-Durchlauf.