Wie diese Prüfung funktioniert
Scanaris analysiert das HTML, das deine Seite ausliefert, ohne JavaScript auszuführen oder einen Browser zu öffnen, und führt acht Barrierefreiheitstests durch, die sich am Code mit Sicherheit entscheiden lassen. Drei haben mittleren Schweregrad: dass das <html>-Tag die Sprache mit lang angibt, dass die <meta name="viewport"> existiert, und dass kein Formularfeld (input, select, textarea, ohne versteckte Felder und Buttons) ohne zugängliche Beschriftung ist, also ein <label for> hat, in einem <label> steht oder aria-label, aria-labelledby oder title trägt. Die anderen fünf haben niedrigen Schweregrad: Bilder ohne alt-Attribut (ein leeres alt="" ist für dekorative gültig; was fehlschlägt, ist das Fehlen des Attributs), Links mit href und Buttons ohne Text, ohne aria-label und ohne Bild mit alt darin, doppelte id-Attribute, Elemente mit tabindex größer als null, und leere Überschriften h1 bis h6. Jeder fehlgeschlagene Test öffnet seinen eigenen Befund mit der Anzahl.
Warum das wichtig ist
Rund 15 % der Bevölkerung haben eine Behinderung, und viel mehr Menschen nutzen das Web in bestimmten Momenten mit Screenreader, nur per Tastatur oder mit maximalem Zoom. Für sie ist ein Bild ohne alt eine Lücke, ein Feld ohne Beschriftung ein Kasten, von dem man nicht weiß, was hineingehört, und ein Button, der nur ein Icon ist, wird als „Schaltfläche" angesagt, mehr nicht. Über die Ethik hinaus ist es Gesetz: Der European Accessibility Act gilt seit Juni 2025 für die meisten digitalen Dienste von Unternehmen, und in den USA gehen die Klagen wegen unzugänglicher Websites jedes Jahr in die Tausende. Und es ist SEO: alt, Sprache und Überschriftenstruktur sind genau das, was Google liest.
So behebst du es
- Sprache:
<html lang="de">. In Nuxt wird es inapp.head.htmlAttrsgesetzt oder vom i18n-Modul; in Next.js am<html>des Root-Layouts; in WordPress schreibt eslanguage_attributes()im Theme. - Viewport:
<meta name="viewport" content="width=device-width, initial-scale=1">. Ohnemaximum-scale=1oderuser-scalable=no, die den Zoom blockieren. - Formularbeschriftungen: ein
<label for="email">pro Feld mit seinerid, oder das Feld innerhalb des<label>. Zeigt das Design keine sichtbare Beschriftung,aria-label="E-Mail-Adresse". Derplaceholderzählt nicht: Er verschwindet beim Tippen. - Bilder: beschreibendes
altbei informativen („Umsatzdiagramm drittes Quartal"),alt=""bei dekorativen. Die Bildkomponenten von Nuxt und Next.js verlangen das Attribut. - Icon-Links und -Buttons:
aria-label="Menü öffnen"oder ein visuell versteckter Text mit einersr-only-Klasse. Inline-SVG-Icons bekommenaria-hidden="true". - Doppelte Ids: stammen meist von wiederholten Komponenten mit fest codierter Id. Leite die Id aus einer Prop ab oder nutze
useId(). - Positive Tabindex: ändere sie auf
0und ordne die Elemente im HTML in der Reihenfolge, in der sie durchlaufen werden sollen. - Leere Überschriften: dienten sie dem Layout, ersetze sie durch ein
div; enthalten sie ein Icon, gib ihnen Text.
Prüf, ob es behoben ist
curl -s https://deinedomain.de | grep -oE '<html[^>]*>|<meta name="viewport"[^>]*>'
curl -s https://deinedomain.de | grep -oE '<img[^>]*>' | grep -vc 'alt='
Der erste Befehl sollte lang und den Viewport zeigen; der zweite 0 ergeben. Für den Rest listen dir das Lighthouse-Panel von Chrome (Reiter Barrierefreiheit) oder die Erweiterung axe DevTools jedes Element mit seinem Selektor.
Häufige Fragen
Bedeutet das Bestehen dieser acht Tests, dass meine Seite barrierefrei ist?
Nein. Es sind die acht, die sich ohne Browser mit Sicherheit prüfen lassen. Farbkontrast, sichtbarer Fokus, tatsächliche Lesereihenfolge und mit JavaScript gebaute Komponenten brauchen eine Prüfung mit Browserwerkzeugen und, für etwas Ernsthaftes, ein menschliches Audit. Sie zu bestehen bedeutet aber, dass du die häufigsten und am leichtesten vermeidbaren Fehler nicht machst.
Meine App ist eine SPA und das anfängliche HTML ist fast leer.
Dann sieht die Prüfung wenig, und Google auch. Ein Grund mehr, zumindest den Hauptinhalt serverseitig zu rendern; Inhalt ohne JavaScript erklärt es.
Warum ist ein leeres alt korrekt, ein fehlendes aber nicht?
Weil alt="" dem Screenreader sagt „überspring dieses Bild, es ist dekorativ", während der Reader ohne Attribut den Dateinamen vorliest, der meist so etwas wie IMG_4821.jpg ist. Die Überschriftenstruktur, die die Navigation per Screenreader beeinflusst, prüft auch Überschriften.