Stufe
A
Seit
WCAG 2.0
Einträge
66 / 193
/ WCAG-Kriterium

4.1.1 Syntaxanalyse

Der Code einer Seite muss wohlgeformt sein (Tags geschlossen, Elemente korrekt verschachtelt, kein Attribut und keine id doppelt), damit Software, die ihn liest, nicht raten muss.

/ Was es verlangt

Dieses Kriterium stammt aus einer Zeit, in der Screenreader HTML selbst analysierten und über fehlerhaftes Markup stolperten. Es verlangt von Inhalt in einer Auszeichnungssprache vier Dinge: Elemente haben vollständige Start- und End-Tags, sie sind gemäß ihrer Spezifikation verschachtelt, kein Element trägt dasselbe Attribut zweimal, und jede id ist eindeutig, außer die Spezifikation erlaubt es anders. War das Markup fehlerhaft, reparierte jedes Werkzeug es auf seine Weise, und eine Beschriftung oder Tabelle konnte am falschen Element landen.

Heute repariert der Browser Markup nach einem festen Algorithmus und übergibt assistiver Technologie einen fertigen Baum, deshalb hat das W3C 4.1.1 aus WCAG 2.2 entfernt. Für WCAG 2.0 und 2.1 hat es einen Hinweis veröffentlicht, wonach das Kriterium für Inhalte in HTML oder XML als stets erfüllt gelten soll. Wichtig bleibt die Folge: Eine doppelte id, durch die ein label oder ein aria-labelledby-Verweis auf das falsche Element zeigt, wird jetzt unter 1.3.1 oder 4.1.2 gemeldet.

Das W3C hat dieses Kriterium in WCAG 2.2 als überholt entfernt; es bleibt Teil von WCAG 2.0 und 2.1, wo es laut W3C für Inhalte in HTML und XML als stets erfüllt zu behandeln ist.

/ Woran Seiten scheitern

  • Derselbe id-Wert steht an zwei oder mehr Elementen einer Seite.
  • Eine Komponente wie ein Formular oder ein Dialog ist zweimal eingebunden, und jede id darin wiederholt sich.
  • Ein Element wird geöffnet und nie geschlossen, oder zwei Elemente werden in der falschen Reihenfolge geschlossen.
  • Ein Element steht dort, wo die Spezifikation es nicht erlaubt, etwa ein div in einem p oder ein Link in einem Link.
  • Ein Element trägt dasselbe Attribut zweimal, zum Beispiel zwei class-Attribute.

/ So prüfen Sie es selbst

  1. Lassen Sie die Seite durch den kostenlosen W3C Nu Html Checker laufen, über die Adresse oder durch Einfügen des Quelltexts.
  2. Filtern Sie die Ergebnisse nach vier Arten von Meldungen: doppelte ID, nicht geschlossenes Element, Element als Kind nicht erlaubt und doppeltes Attribut.
  3. Listen Sie in der Browserkonsole die id-Werte auf, die in der gerenderten Seite mehr als einmal vorkommen. Per Skript eingefügter Inhalt erscheint nie im rohen Quelltext.
  4. Suchen Sie für jede doppelte id auf der Seite nach den Attributen for, aria-labelledby, aria-describedby und aria-controls, die diesen Wert verwenden. Das sind die Duplikate, die verändern, was ein Nutzer hört.

/ So beheben Sie es

  • Geben Sie jeder id einen Wert, der auf der Seite eindeutig ist, und beginnen Sie mit denen, auf die for, aria-labelledby, aria-describedby und aria-controls verweisen.
  • Wird eine Komponente mehr als einmal gerendert, bilden Sie ihre ids aus einem Schlüssel der Instanz oder einem erzeugten Suffix und nicht aus einer festen Zeichenkette.
  • Schließen Sie jedes Element, das ein End-Tag braucht, und korrigieren Sie die Reihenfolge von End-Tags, die sich überschneiden.
  • Holen Sie Blockinhalt aus p-Elementen heraus und setzen Sie niemals ein a-Element oder eine Schaltfläche in ein anderes.
  • Löschen Sie wiederholte Attribute, sodass jedes Element nur ein class-, id- oder style-Attribut behält.

/ Was unser Scanner prüft

Zwei Prüfungen sehen nur auf ids. Die Prüfung duplicate-id liest die gerenderte Seite und meldet eine id, die im selben Baum mehr als einmal vorkommt, wobei Dokument und jeder Shadow Root getrennt zählen. F77 aus HTML_CodeSniffer meldet jeden id-Wert, der sich im Dokument wiederholt. Keine untersucht End-Tags, Verschachtelung oder wiederholte Attribute, und keine sagt, ob ein Duplikat tatsächlich ein label oder einen ARIA-Verweis bricht.

/ Wer es verletzt, nach unseren eigenen Messungen

Gemessene Stellen, die dieses Kriterium verletzen, meiste Vorkommen zuerst
StelleSektorVorkommenWert
Poznańcity · PL1541
Stuttgartcity · DE886
Gdańskcity · PL742
Bundesratgovernment · DE7014
Phoenixcity · US671
Seattlecity · US6612
Wrocławcity · PL402
Baltimorecity · US327
Radomcity · PL262
State of Texasgovernment · US2622
Internal Revenue Servicegovernment · US2220
Amtraktransport · US204
Centrum e-Zdrowiahealth · PL1460
Politechnika Łódzkaeducation · PL125
Szczecincity · PL122
Robert Koch-Instituthealth · DE1110
Cook Countygovernment · US1013
Politechnika Śląskaeducation · PL102
Rzeszówcity · PL108
Freie Universität Berlineducation · DE87
State of Washingtongovernment · US79
Bundesregierunggovernment · DE64
Statistisches Bundesamtgovernment · DE69
Uniwersytet Gdańskieducation · PL618
Uniwersytet Wrocławskieducation · PL615
Uniwersytet Łódzkieducation · PL69
New York Citycity · US537
Bundesministerium der Finanzengovernment · DE413
Hannovercity · DE410
Krajowa Administracja Skarbowagovernment · PL45
Nashvillecity · US412
Nürnbergcity · DE42
Politechnika Poznańskaeducation · PL44
Szkoła Główna Handlowaeducation · PL412
Warszawski Uniwersytet Medycznyeducation · PL413
Berliner Verkehrsbetriebetransport · DE321
Bundesverfassungsgerichtgovernment · DE318
Senat RPgovernment · PL324
Austincity · US220
Białystokcity · PL237
Bostoncity · US26
Bundesministerium des Innerngovernment · DE210
Bydgoszczcity · PL27
Centers for Disease Controlhealth · US28
Department of Laborgovernment · US246
Deutsche Bahntransport · DE25
Gdyniacity · PL27
Hamburgcity · DE223
Katowicecity · PL210
Kölncity · DE216
Lublincity · PL217
Opolecity · PL28
Pacjent.gov.plhealth · PL29
Philadelphiacity · US28
Polski Instytut Sztuki Filmowejculture · PL27
State of Floridagovernment · US28
Toruńcity · PL211
Uniwersytet Jagiellońskieducation · PL21
Uniwersytet Warszawskieducation · PL24
Uniwersytet im. Adama Mickiewiczaeducation · PL212
Urząd Ochrony Danych Osobowychgovernment · PL26
Düsseldorfcity · DE19
Generalna Dyrekcja Dróg Krajowych i Autostradtransport · PL134
Instytut Pamięci Narodowejgovernment · PL143
Politechnika Warszawskaeducation · PL112
Portlandcity · US187

Eine Seite je Stelle, automatisch im Wochenrhythmus gemessen. Behebungen seit dem letzten Durchlauf erscheinen beim nächsten, und jede Eintragsseite bietet ein Recht auf Gegendarstellung.

/ Fragen zu diesem Kriterium

Ist 4.1.1 Syntaxanalyse noch erforderlich?

Nicht in WCAG 2.2, dort wurde es als überholt entfernt. In WCAG 2.0 und 2.1 steht es weiterhin, ebenso in Normen, die auf 2.1 aufbauen, etwa EN 301 549 in Version 3.2.1. Für diese Versionen hat das W3C erklärt, dass das Kriterium für Inhalte in HTML oder XML als stets erfüllt gelten soll, ein Validierungsfehler allein ist also kein Verstoß mehr.

Warum wurde die Syntaxanalyse aus WCAG 2.2 entfernt?

Das Kriterium sollte assistive Technologie schützen, die HTML direkt analysierte und durch fehlerhaftes Markup aus dem Tritt geraten konnte. Heute liest assistive Technologie den Accessibility Tree, den der Browser aufbaut, und Browser reparieren Markup auf standardisierte Weise. Das W3C kam zu dem Schluss, dass die Probleme nicht mehr bestehen oder von anderen Kriterien abgedeckt werden, vor allem von 1.3.1 und 4.1.2.

Sind doppelte ids noch ein Problem für die Barrierefreiheit?

Sie können es sein. Teilen sich zwei Elemente eine id, löst ein label mit for-Attribut oder ein Verweis per aria-labelledby oder aria-describedby auf das erste davon auf. Ein Feld kann dann mit dem Namen eines anderen Feldes angesagt werden. Unter WCAG 2.2 wird das als Verstoß gegen 1.3.1 oder 4.1.2 gemeldet. Eine doppelte id, auf die nichts verweist, schadet niemandem.