Zum Inhalt springen
checkfrei
Menü

tabindex richtig einsetzen: Tab-Reihenfolge ohne Chaos

Stand: 3. Oktober 2026 · CAZ Labs

Kurz gesagt

Setz `tabindex` nie auf einen Wert größer als 0. Positive Werte ziehen einzelne Elemente vor alle anderen, und Tastatur-Nutzer springen dann quer über die Seite. Sinnvoll sind nur `tabindex="0"` und `tabindex="-1"`, die Reihenfolge selbst ergibt sich aus der Anordnung im HTML.

Was die tabindex-Werte bedeuten

  • Kein tabindex: Links, Buttons und Formularfelder sind von Haus aus mit Tab erreichbar, in der Reihenfolge, in der sie im HTML stehen. Das ist fast immer richtig so.
  • tabindex="0": Ein Element, das normalerweise keinen Fokus bekommt, wird in die normale Reihenfolge aufgenommen. Das brauchst du selten, meist ist ein echter <button> die bessere Wahl.
  • tabindex="-1": Das Element ist mit Tab nicht erreichbar, kann aber per Skript oder Sprunglink den Fokus bekommen. Typisch für Dialoge oder das Ziel eines Sprunglinks.
  • tabindex="1" und höher: Diese Elemente kommen vor allen anderen dran, sortiert nach ihrer Zahl. Erst danach geht es mit dem Rest der Seite in HTML-Reihenfolge weiter.

Warum das wichtig ist

Stell dir eine Seite vor, auf der jemand dem Kontaktbutton tabindex="1" gegeben hat, damit er schneller erreichbar ist. Beim ersten Tab landet der Fokus mitten auf der Seite. Beim zweiten springt er zurück zum Logo, weil ab da wieder die normale Reihenfolge gilt. Wer keine Maus nutzen kann, verliert an dieser Stelle die Orientierung.

Noch unübersichtlicher wird es bei Formularen mit durchnummerierten Feldern. Kommt später ein Feld ohne Nummer dazu, springt der Fokus nach dem letzten nummerierten Feld erst wieder hoch zum Menü und erreicht das neue Feld irgendwann im zweiten Durchgang.

Die WCAG verlangen unter 2.4.3 Fokus-Reihenfolge, dass die Reihenfolge Sinn und Bedienbarkeit erhält. Eine mit tabindex zusammengebaute Reihenfolge, die das nicht tut, ist dort als bekannter Fehler beschrieben. Formal verboten sind positive Werte nicht. In der Praxis gehen sie trotzdem fast immer schief, weil niemand sie pflegt, wenn sich die Seite ändert.

So prüfst du es selbst

Im kostenlosen Check von checkfrei suchen wir im HTML nach tabindex-Werten größer als 0. Finden wir einen, gibt es eine Warnung. Selbst prüfen kannst du es so:

  1. Quelltext öffnen (Strg+U) und nach tabindex suchen. Alles mit einer Zahl ab 1 ist ein Kandidat.
  2. Oder in der Browser-Konsole (F12) den Befehl unten ausführen. Er listet alle Elemente mit positivem tabindex, auch solche, die erst per JavaScript dazugekommen sind.
  3. Dann der wichtigste Test: Lade die Seite neu und geh mit der Tab-Taste einmal durch die ganze Seite. Der Fokus sollte ohne Sprünge von oben nach unten wandern.
js
[...document.querySelectorAll("[tabindex]")].filter((el) => parseInt(el.getAttribute("tabindex"), 10) > 0);

So behebst du es

Meist reicht es, die positiven Werte zu löschen. Stimmt die Reihenfolge danach nicht, steht das HTML in der falschen Reihenfolge, und genau dort setzt du an: Verschieb das Element im Quelltext an die Stelle, an die es logisch gehört.

WordPress

Positive tabindex-Werte stecken meist in Theme-Dateien, in Blöcken mit individuellem HTML oder in Formular-Plugins. Gravity Forms hat Feldern lange Zeit automatisch fortlaufende Werte gegeben. Siehst du solche Werte noch, schaltet der Filter gform_tabindex sie ab, etwa in der functions.php deines Child-Themes oder über ein Code-Snippet-Plugin.

php
add_filter( "gform_tabindex", "__return_false" );

HTML

Klickbare <div>-Elemente mit tabindex="0" und JavaScript sind ein häufiger Notbehelf. Ein <button> kann von Haus aus alles, was dort mühsam nachgebaut wird, inklusive Bedienung mit Enter und Leertaste.

html
<!-- vorher: eigene Reihenfolge per tabindex -->
<a href="/kontakt" tabindex="1">Kontakt</a>

<!-- nachher: kein tabindex, Reihenfolge über das HTML -->
<a href="/kontakt">Kontakt</a>

<!-- statt <div tabindex="0" onclick="..."> -->
<button type="button">Mehr anzeigen</button>

Next.js

In JSX heißt das Attribut tabIndex mit großem I. Für die Werte gilt dasselbe: 0 und -1 sind in Ordnung, alles darüber nicht. Komponentenbibliotheken für Dialoge und Menüs setzen tabIndex={-1} oft selbst, das ist gewollt.

Typische Fehler

  • Reihenfolge per CSS umgestellt: Mit order in Flexbox oder Grid lässt sich die Anzeige ändern, die Tab-Reihenfolge folgt aber weiter dem HTML. Das findet kein automatischer Check, nur der Test mit der Tastatur.
  • Fokus unsichtbar gemacht: outline: none ohne Ersatz. Dann weiß niemand, wo der Fokus gerade ist, und 2.4.7 Fokus sichtbar ist verletzt.

So prüft checkfrei

Wir suchen tabindex-Werte größer als 0. Gefunden gibt es eine Warnung.

Gewicht 1 von 3 im Bereich Barrierefreiheit.

Häufige Fragen

Was ist der Unterschied zwischen tabindex 0 und -1?

Mit 0 kommt ein Element in die normale Tab-Reihenfolge. Mit -1 bleibt es draußen, kann aber per Skript fokussiert werden, etwa wenn ein Dialog aufgeht.

Ist tabindex="1" verboten?

Formal ist er erlaubt. Praktisch geht er fast immer schief: Sobald jemand die Seite ändert, stimmt die Nummerierung nicht mehr, und die Tab-Reihenfolge wird unberechenbar.

Wie mache ich ein Element per Tastatur erreichbar?

Nimm das passende HTML-Element, also <a href> für Links und <button> für Aktionen. Die sind automatisch erreichbar. tabindex="0" ist der Notnagel für Fälle, in denen es kein passendes Element gibt.

Jetzt deine Seite prüfen

checkfrei prüft Tab-Reihenfolge und 68 weitere Punkte in einem Durchgang. Kostenlos und ohne Anmeldung.