Was Stufe AA wirklich bedeutet
WCAG kennt drei Stufen. A ist der Boden, AA ist die Stufe, von der europäische Vergabeverfahren und EN 301 549 ausgehen, und AAA ist ein Ziel, das niemand über eine ganze Website erreichen muss. Verlangt eine Ausschreibung „WCAG 2.2 AA“, meint sie jedes Erfolgskriterium der Stufen A und AA, auf jeder Seite im Umfang, in jedem Zustand, den Nutzende erreichen können.
Erfolgskriterien sind prüfbare Aussagen, keine Techniken. „Kontrast (Minimum)“ sagt Ihnen nicht, welches Token zu ändern ist; es sagt, welches gemessene Verhältnis ein Text erreichen muss. Dieser Unterschied zählt in einer Prüfung: Ein Befund ist belastbar, wenn er das Kriterium, das Element und die Messung nennt, nicht wenn er ein Werkzeug nennt.
Eine Website besteht oder scheitert nicht als Ganzes. Konformität wird je Seite erklärt, und ein einziges nicht konformes Element auf einer Seite nimmt die Erklärung für diese Seite zurück. Deshalb schlägt fortlaufende Überwachung eine einmalige Prüfung: Ein Theme-Update kann die Erklärung für hundert Seiten auf einmal aufheben.
Die neun Kriterien, die WCAG 2.2 ergänzt hat
Sechs davon liegen auf A oder AA und fallen damit in den Umfang einer Bewertung nach EN 301 549. Die letzte Spalte sagt, ob ein Scanner es beurteilen kann oder ein Mensch muss.
| EK | Name | Stufe | Wie es geprüft wird |
|---|---|---|---|
| 2.4.11 | Fokus nicht verdeckt (Minimum) | AA | manuell |
| 2.4.12 | Fokus nicht verdeckt (erweitert) | AAA | manuell |
| 2.4.13 | Erscheinungsbild des Fokus | AAA | manuell |
| 2.5.7 | Ziehbewegungen | AA | manuell |
| 2.5.8 | Zielgröße (Minimum) | AA | automatisiert |
| 3.2.6 | Konsistente Hilfe | A | manuell |
| 3.3.7 | Redundante Eingabe | A | manuell |
| 3.3.8 | Barrierefreie Authentifizierung (Minimum) | AA | teils automatisiert |
| 3.3.9 | Barrierefreie Authentifizierung (erweitert) | AAA | manuell |
Was der Scanner prüft, Regel für Regel
Jede automatisierte Regel trägt beide Verweise, sodass ein Befund für die Entwicklung als WCAG-Erfolgskriterium und für die prüfende Person als Klausel aus EN 301 549 lesbar ist. Dies sind die Regeln in der öffentlichen Zuordnungstabelle; der Katalog im Produkt ist größer und wird zentral gepflegt.74 rules seeded
| Regel | What it detects | WCAG | EN 301 549 | Übliche Wirkung |
|---|---|---|---|---|
| accesskeys | Zwei Elemente beanspruchen dieselbe Zugriffstaste | 2.1.1 | 9.2.1.1 | serious |
| area-alt | Bereich einer Bildkarte ohne Alternativtext | 1.1.1, 2.4.4, 4.1.2 | 9.1.1.1, 9.2.4.4, 9.4.1.2 | critical |
| aria-allowed-attr | ARIA-Attribut bei dieser Rolle nicht zulässig | 4.1.2 | 9.4.1.2 | critical |
| aria-command-name | Eigene Schaltfläche, Link oder Menüpunkt ohne Namen | 4.1.2 | 9.4.1.2 | serious |
| aria-hidden-body | Gesamtes Dokument vor assistiver Technologie verborgen | 4.1.2 | 9.4.1.2 | critical |
| aria-hidden-focus | Fokussierbares Element vor assistiver Technologie verborgen | 1.3.1, 4.1.2 | 9.1.3.1, 9.4.1.2 | serious |
| aria-input-field-name | Eigenes Eingabefeld ohne zugänglichen Namen | 4.1.2 | 9.4.1.2 | serious |
| aria-meter-name | Meter ohne zugänglichen Namen | 1.1.1 | 9.1.1.1 | serious |
| aria-progressbar-name | Fortschrittsanzeige ohne zugänglichen Namen | 1.1.1 | 9.1.1.1 | serious |
| aria-required-attr | ARIA-Rolle fehlt ein erforderliches Attribut | 4.1.2 | 9.4.1.2 | critical |
| aria-required-children | Zusammengesetzte Rolle ohne die erforderlichen Kindrollen | 1.3.1 | 9.1.3.1 | critical |
| aria-required-parent | ARIA-Rolle außerhalb des erforderlichen Containers | 1.3.1 | 9.1.3.1 | critical |
| aria-roles | Rollenwert ist keine anerkannte ARIA-Rolle | 4.1.2 | 9.4.1.2 | critical |
| aria-toggle-field-name | Kontrollkästchen, Optionsfeld oder Schalter ohne zugänglichen Namen | 4.1.2 | 9.4.1.2 | serious |
| aria-tooltip-name | Tooltip-Rolle ohne Text | 4.1.2 | 9.4.1.2 | serious |
| aria-valid-attr | Attributname ist kein gültiges ARIA-Attribut | 4.1.2 | 9.4.1.2 | critical |
| aria-valid-attr-value | ARIA-Attribut verweist auf einen Wert, der nicht auflösbar ist | 4.1.2 | 9.4.1.2 | critical |
| audio-caption | Audio ohne Untertitel- oder Transkriptspur | 1.2.1 | 9.1.2.1 | critical |
| autocomplete-valid | autocomplete-Wert nicht erkannt | 1.3.5 | 9.1.3.5 | serious |
| avoid-inline-spacing | Textabstand durch einen Inline-Stil festgelegt | 1.4.12 | 9.1.4.12 | serious |
| blink | Blinkender Inhalt, der nicht gestoppt werden kann | 2.2.2 | 9.2.2.2 | serious |
| button-name | Schaltfläche ohne zugänglichen Namen | 4.1.2 | 9.4.1.2 | critical |
| bypass | Keine Möglichkeit, die wiederholte Navigation zu überspringen | 2.4.1 | 9.2.4.1 | serious |
| color-contrast | Textkontrast unter dem geforderten Verhältnis | 1.4.3 | 9.1.4.3 | serious |
| css-orientation-lock | Inhalt auf eine Bildschirmausrichtung festgelegt | 1.3.4 | 9.1.3.4 | serious |
| definition-list | Definitionsliste aus falschen Kindelementen aufgebaut | 1.3.1 | 9.1.3.1 | serious |
| dlitem | Definitionsbegriff oder -beschreibung außerhalb einer Liste | 1.3.1 | 9.1.3.1 | serious |
| document-title | Seite hat keinen Titel | 2.4.2 | 9.2.4.2 | serious |
| duplicate-id-active | Doppelte id an einem interaktiven Element | 4.1.1 | 9.4.1.1 | serious |
| empty-heading | Überschrift ohne Text | 1.3.1 | 9.1.3.1 | minor |
| empty-table-header | Tabellenkopfzelle ohne Text | 1.3.1 | 9.1.3.1 | minor |
| focus-order-semantics | Fokussierbares Element ohne interaktive Rolle | 2.4.3 | 9.2.4.3 | minor |
| form-field-multiple-labels | Feld an mehr als ein Label gebunden | 3.3.2 | 9.3.3.2 | moderate |
| frame-title | Frame ohne Titel | 2.4.1, 4.1.2 | 9.2.4.1, 9.4.1.2 | serious |
| heading-order | Überschriftenebene übersprungen | 1.3.1 | 9.1.3.1 | moderate |
| html-has-lang | Seitensprache nicht angegeben | 3.1.1 | 9.3.1.1 | serious |
| html-lang-valid | Sprachcode der Seite ist ungültig | 3.1.1 | 9.3.1.1 | serious |
| html-xml-lang-mismatch | lang und xml:lang stimmen nicht überein | 3.1.1 | 9.3.1.1 | moderate |
| identical-links-same-purpose | Links mit gleichem Text führen woandershin | 2.4.9 | 9.2.4.9 | minor |
| image-alt | Bild ohne Textalternative | 1.1.1 | 9.1.1.1 | critical |
| input-button-name | Eingabeschaltfläche ohne Wert oder Label | 4.1.2 | 9.4.1.2 | critical |
| input-image-alt | Bildschaltfläche ohne Alternativtext | 1.1.1, 4.1.2 | 9.1.1.1, 9.4.1.2 | critical |
| label | Formularfeld ohne programmatisches Label | 1.3.1, 4.1.2 | 9.1.3.1, 9.4.1.2 | critical |
| landmark-banner-is-top-level | Banner-Landmark in einem anderen Bereich verschachtelt | 1.3.1 | 9.1.3.1 | moderate |
| landmark-complementary-is-top-level | Complementary-Landmark in einem anderen Bereich verschachtelt | 1.3.1 | 9.1.3.1 | moderate |
| landmark-no-duplicate-main | Mehr als ein Main-Landmark auf der Seite | 1.3.1 | 9.1.3.1 | moderate |
| landmark-one-main | Seite hat kein einzelnes Main-Landmark | 1.3.1, 2.4.1 | 9.1.3.1, 9.2.4.1 | moderate |
| landmark-unique | Zwei Landmarks teilen sich Rolle und Namen | 1.3.1 | 9.1.3.1 | moderate |
| link-name | Link ohne erkennbaren Text | 2.4.4, 4.1.2 | 9.2.4.4, 9.4.1.2 | serious |
| list | Liste enthält Elemente, die keine Listenpunkte sind | 1.3.1 | 9.1.3.1 | moderate |
| listitem | Listenpunkt außerhalb einer Liste | 1.3.1 | 9.1.3.1 | serious |
| marquee | Laufender Marquee-Inhalt | 2.2.2 | 9.2.2.2 | serious |
| meta-viewport | Zoom durch das Viewport-Meta-Tag deaktiviert | 1.4.4 | 9.1.4.4 | serious |
| nested-interactive | Interaktives Element in einem anderen verschachtelt | 4.1.2 | 9.4.1.2 | serious |
| no-autoplay-audio | Audio startet von selbst und dauert länger als drei Sekunden | 1.4.2 | 9.1.4.2 | moderate |
| object-alt | Eingebettetes Objekt ohne Textalternative | 1.1.1 | 9.1.1.1 | serious |
| p-as-heading | Absatz wie eine Überschrift gestaltet | 1.3.1 | 9.1.3.1 | serious |
| page-has-heading-one | Seite hat keine Überschrift der Ebene eins | 1.3.1 | 9.1.3.1 | moderate |
| presentation-role-conflict | Präsentationsrolle durch anderes Markup aufgehoben | 4.1.2 | 9.4.1.2 | minor |
| region | Inhalt liegt außerhalb jedes Landmarks | 1.3.1 | 9.1.3.1 | moderate |
| role-img-alt | Element mit der Rolle img hat keinen Alternativtext | 1.1.1 | 9.1.1.1 | serious |
| scrollable-region-focusable | Scrollbarer Bereich ist per Tastatur nicht erreichbar | 2.1.1 | 9.2.1.1 | serious |
| select-name | Auswahlfeld ohne zugänglichen Namen | 1.3.1, 4.1.2 | 9.1.3.1, 9.4.1.2 | critical |
| server-side-image-map | Serverseitige Bildkarte im Einsatz | 2.1.1 | 9.2.1.1 | minor |
| summary-name | Zusammenfassung eines Ausklappelements ohne Namen | 4.1.2 | 9.4.1.2 | serious |
| svg-img-alt | Bedeutungstragendes SVG ohne Textalternative | 1.1.1 | 9.1.1.1 | serious |
| tabindex | Positiver tabindex überschreibt die natürliche Fokusreihenfolge | 2.4.3 | 9.2.4.3 | serious |
| table-fake-caption | Tabellentitel als Beschriftung gestaltet statt als solche ausgezeichnet | 1.3.1 | 9.1.3.1 | serious |
| target-size | Touch-Ziel kleiner als 24 mal 24 Pixel | 2.5.8 | 9.2.5.8 | moderate |
| td-has-header | Datenzelle in einer großen Tabelle hat keine Kopfzelle | 1.3.1 | 9.1.3.1 | serious |
| td-headers-attr | Datenzelle keiner Kopfzelle zugeordnet | 1.3.1 | 9.1.3.1 | serious |
| th-has-data-cells | Tabellenkopf ohne zugeordnete Datenzellen | 1.3.1 | 9.1.3.1 | serious |
| valid-lang | Sprache eines Abschnitts ist kein gültiger Code | 3.1.2 | 9.3.1.2 | serious |
| video-caption | Video ohne Untertitelspur | 1.2.2 | 9.1.2.2 | critical |
Was die Automatisierung sehen kann und was nicht
Neben jedem Wert in Conforma steht derselbe Satz, denn die Zahl ist nur ein Teil des Bildes. Automatisierte Regeln sind hervorragend bei messbaren Eigenschaften und blind für Absicht.
Automatisierte Tests erfassen nur einen Teil der Barrieren. Für eine vollständige Bewertung ist eine manuelle Prüfung erforderlich.
Wie Conforma WCAG 2.2 AA prüft
- Automatisierte Regeln laufen auf jeder Seite eines Scans, und jeder Verstoß wird als Befund festgehalten, mit der Regel, dem Selektor, dem HTML-Ausschnitt und einem Bildschirmfoto des Elements an Ort und Stelle.
- Jeder Befund trägt beide Verweise: das WCAG-Erfolgskriterium und die Klausel aus EN 301 549, sodass ein Bericht für die Entwicklung und für die Beschaffung gleich lesbar ist.
- Befunde bekommen einen Fingerabdruck aus Regel, Selektor und Pfad. Eine Behebung, die nach einem Deployment zurückkommt, wird als Regression gemeldet, statt still als neue Arbeit gezählt zu werden.
- Die manuelle Checkliste deckt ab, was Regeln nicht beurteilen können, mit Videonachweis, der eingesetzten assistiven Technologie und einer benannten prüfenden Person, und sie wird in dasselbe Nachweispaket versiegelt wie der automatisierte Lauf.
Fragen, die wir dazu bekommen
Ist WCAG 2.2 AA dasselbe wie die Erfüllung des Barrierefreiheitsgesetzes?
Nein. Der European Accessibility Act ist das Gesetz, EN 301 549 ist die harmonisierte Norm, mit der man es belegt, und EN 301 549 verweist für Webinhalte auf WCAG 2.2 Stufe AA. AA zu erreichen ist die technische Grundlage einer Erklärung, kein Zertifikat.
Müssen wir jetzt von 2.1 auf 2.2 wechseln?
Für alles Neue lautet die sichere Antwort ja. WCAG 2.2 ist abwärtskompatibel: Inhalte, die 2.2 erfüllen, erfüllen auch 2.1 — gegen die neuere Fassung zu prüfen kostet also nichts und deckt beides ab.
Bedeutet ein perfekter automatisierter Wert, dass die Website konform ist?
Er bedeutet, dass auf den gescannten Seiten kein automatisiert feststellbarer Verstoß gefunden wurde. Tastaturbedienung, Fokusreihenfolge und der Ablauf im Screenreader brauchen weiterhin einen Menschen, bevor irgendetwas behauptet wird.