WCAG-Erfolgskriterien · Level AA

WCAG 4.1.3: Statusmeldungen

WCAG 4.1.3 verlangt, dass Statusmeldungen – wie Bestätigungen von Formularübermittlungen, Fehlermeldungen und Warenkorbaktualisierungen – programmatisch über Rolle oder Eigenschaft ermittelbar sind, damit unterstützende Technologien sie ankündigen können, ohne dass der Benutzer den Fokus verschieben muss. Dies stellt sicher, dass Nutzer, die auf Screenreader angewiesen sind, wichtige Rückmeldungen erhalten, selbst wenn der Fokus nicht auf die Meldung wechselt.

Was diese Regel bedeutet

Das WCAG-Erfolgskriterium 4.1.3 Statusmeldungen (Level AA, eingeführt in WCAG 2.1 und übernommen in WCAG 2.2) besagt: „In Inhalten, die mit Auszeichnungssprachen implementiert sind, können Statusmeldungen programmatisch über Rolle oder Eigenschaften ermittelt werden, sodass sie dem Nutzer von unterstützenden Technologien präsentiert werden können, ohne den Fokus zu erhalten.“

Praktisch bedeutet das: Immer wenn Ihre Benutzeroberfläche eine Meldung erzeugt, um den Nutzer über ein Ergebnis zu informieren – eine Suche liefert Ergebnisse, eine Formularübermittlung ist erfolgreich, ein Artikel wird in den Warenkorb gelegt, nach der Validierung tritt ein Fehler auf oder ein Prozess wird abgeschlossen – muss diese Meldung für unterstützende Technologien (AT) so verfügbar gemacht werden, dass der Nutzer nicht zu ihr navigieren muss. Die zentrale Vorgabe ist, dass die Meldung nicht davon abhängen darf, Tastatur- oder programmatischen Fokus zu erhalten, um angesagt zu werden.

Das Kriterium gilt für alle Inhalte, die in einer Auszeichnungssprache geschrieben sind (HTML, SVG usw.), und umfasst vier breite Kategorien von Statusmeldungen, die von WCAG anerkannt werden:

  • Erfolgsmeldungen: Bestätigungen wie „Ihre Bestellung wurde aufgegeben“ oder „Einstellungen erfolgreich gespeichert.“
  • Fehler- oder Warnmeldungen: Validierungsfeedback wie „E-Mail-Adresse ist nicht gültig“ oder „Bitte füllen Sie alle Pflichtfelder aus.“
  • Fortschritts- oder Statusaktualisierungen: Meldungen wie „Laden… bitte warten“ oder „Upload zu 60% abgeschlossen.“
  • Kontextänderungs-Meldungen: dynamische Aktualisierungen wie „5 Ergebnisse gefunden“ oder „3 Artikel in Ihrem Warenkorb.“

Eine Meldung besteht dieses Kriterium, wenn ihr eine geeignete ARIA-Live-Region-Rolle oder -Eigenschaft zugewiesen wird – meist role="status", role="alert", aria-live="polite" oder aria-live="assertive" –, sodass Screenreader sie automatisch ansagen, wenn sie erscheint oder sich ändert, ohne dass der Nutzer zu ihr tabben muss.

Eine Meldung verfehlt das Kriterium, wenn sie dynamisch (über JavaScript) in den DOM eingefügt wird, aber keine Live-Region-Semantik trägt, sodass Screenreader-Nutzer nicht bemerken, dass sich etwas auf der Seite geändert hat.

Eine wichtige von WCAG definierte Ausnahme: Wenn eine Statusmeldung dadurch übermittelt wird, dass der Fokus auf das Meldungselement verschoben wird (zum Beispiel ein Dialog, der den Fokus erhält, oder ein alert()-Dialog), gilt das Kriterium nicht für diese Interaktion – die Fokusverschiebung selbst erfüllt das Erfordernis. Das Kriterium bezieht sich speziell auf Meldungen, die ohne Fokusänderung erscheinen.

Warum das wichtig ist

Screenreader-Nutzer navigieren Seiten linear oder springen zwischen Landmarken, Überschriften und interaktiven Steuerelementen. Wenn eine Seite stillschweigend ein Banner „Ihre Nachricht wurde gesendet“ in den DOM einfügt, ohne es anzusagen, hat ein blinder Nutzer keine Möglichkeit zu wissen, dass die Aktion erfolgreich war. Er könnte das Formular erneut absenden, unendlich warten oder die Aufgabe aus Verwirrung einfach abbrechen. Dasselbe Problem betrifft Nutzer mit Sehbehinderung, die auf Zoom und Vergrößerung angewiesen sind – eine Statusmeldung, die außerhalb ihres aktuellen Viewports erscheint, bleibt unbemerkt, sofern sie nicht akustisch angesagt wird.

Motorisch beeinträchtigte Nutzer, die auf Schaltersteuerung oder Blickverfolgungstechnologie angewiesen sind, sind gleichermaßen betroffen. Diese Nutzer können eine Seite oft nicht schnell nach neuen Inhalten absuchen; sie sind darauf angewiesen, dass AT relevante Informationen zu ihnen bringt. Ohne Live-Region-Ansagen wird jede Statusaktualisierung zu einem Nadel-im-Heuhaufen-Problem.

Auch kognitiv vielfältige Nutzer profitieren: Klare, unmittelbare Rückmeldungen bestätigen, dass eine Aktion abgeschlossen ist, und verringern die kognitive Belastung durch Unsicherheit. Wenn AT „Artikel in den Warenkorb gelegt“ ansagt, muss ein Nutzer mit kognitiver Beeinträchtigung nicht visuell nach einer Bestätigung suchen, bevor er fortfährt.

Ein konkretes Szenario aus der Praxis: Eine blinde Person füllt auf der Website einer türkischen Bank einen mehrteiligen Versicherungsantrag aus. Sie sendet das Formular ab, aber die clientseitige Validierung wird ausgelöst und zeigt fünf rote Fehlermeldungen in der Nähe der Felder an. Da keine Live-Region vorhanden ist, bleibt der Screenreader des Nutzers (JAWS oder NVDA) stumm. Die Person geht davon aus, dass das Formular erfolgreich übermittelt wurde, und schließt den Browser-Tab – und verliert damit den gesamten Antrag. Mit einem korrekt implementierten role="alert" oder einer zusammenfassenden Live-Region hätte die AT sofort „3 Fehler gefunden. Bitte überprüfen Sie die hervorgehobenen Felder“ angesagt und der Person ermöglicht, die Probleme zu beheben.

Aus geschäftlicher Sicht schadet nicht zugängliches Status-Feedback direkt den Konversionsraten. Weltweit leben etwa 1,3 Milliarden Menschen mit irgendeiner Form von Behinderung, und die Sicherstellung zugänglicher Statusmeldungen reduziert Formularabbrüche, Support-Ticket-Volumen und das rechtliche Risiko im Zusammenhang mit Nichtkonformität. Für türkische Organisationen kann mangelnde Barrierefreiheit zudem einen Verstoß gegen das Behindertengesetz Nr. 5378 und die später in diesem Artikel beschriebenen neueren Verpflichtungen aus der Präsidialverfügung darstellen.

Verwandte Axe-core-Regeln

  • aria-live (automatisiert): Die axe-core-Regel aria-live prüft, ob Elementen mit dem Attribut aria-live einer der gültigen Werte zugewiesen ist: off, polite oder assertive. Sie markiert Elemente, bei denen aria-live auf einen ungültigen oder falsch geschriebenen Wert gesetzt ist (z. B. aria-live="true" oder aria-live="yes"), was dazu führen würde, dass die Live-Region von unterstützender Technologie stillschweigend ignoriert wird. Diese Regel stellt sicher, dass das Attribut korrekt formuliert ist, wenn Entwickler eine Live-Region erstellen wollen, damit Screenreader sie tatsächlich berücksichtigen.
  • Manuelles Testen (für vollständige Abdeckung erforderlich): Automatisierte Tools können WCAG 4.1.3 nicht vollständig prüfen, weil der zentrale Fehlertyp eine fehlende Live-Region bei einer dynamisch erzeugten Meldung ist – ein Fehlen, das statische Codeanalyse nur schwer zuverlässig erkennen kann. Ein Tool, das den DOM vor einer Nutzerinteraktion scannt, kann nicht wissen, welche Elemente später zu Statusmeldungen werden. Axe-core markiert möglicherweise kein <div>, das nach einem Button-Klick Text injiziert bekommt, weil das Div zum Scanzeitpunkt leer ist oder noch nicht existiert. Manuelles Testen mit einem laufenden Screenreader ist daher unerlässlich: Ein Tester muss die Statusmeldung auslösen und auf eine Ansage achten. Wenn keine Ansage erfolgt und der Fokus sich nicht bewegt hat, ist das Kriterium nicht erfüllt – unabhängig davon, was automatisierte Tools melden.

Wie man testet

  1. Automatischer Scan mit axe DevTools oder Lighthouse: Installieren Sie die Browser-Erweiterung axe DevTools (Chrome oder Firefox) und führen Sie einen Vollseiten-Scan durch. Suchen Sie nach Verstößen unter der Regel aria-live. Prüfen Sie außerdem auf Probleme, die unter aria-roledescription oder fehlerhafter Verwendung von aria-atomic markiert sind. Denken Sie daran, dass ein sauberer automatischer Scan nicht bedeutet, dass 4.1.3 erfüllt ist – er bedeutet nur, dass keine fehlerhaften Live-Region-Attribute gefunden wurden. Notieren Sie alle markierten Elemente und beheben Sie sie, bevor Sie zu den manuellen Schritten übergehen.
  2. Alle dynamischen Statusmeldungen identifizieren: Überprüfen Sie die Seite und ihr JavaScript, um jede Nutzerinteraktion zu erfassen, die eine Statusmeldung ohne Seitenneuladen oder Fokusänderung erzeugt. Häufige Beispiele sind: Feedback zur Formularübermittlung, Warenkorbanzahl-Badges, Suchergebnisanzahlen, Datei-Upload-Fortschritt, Newsletter-Anmeldebestätigungen, Filterergebnis-Aktualisierungen und Sitzungs-Timeout-Warnungen.
  3. Manueller Test mit NVDA + Firefox: Öffnen Sie die Seite mit laufendem NVDA. Lösen Sie jede erfasste Statusmeldung aus (Formular absenden, Artikel in den Warenkorb legen, Suche ausführen). Hören Sie genau hin – NVDA sollte den Meldungstext innerhalb von ein bis zwei Sekunden automatisch ansagen. Wenn Sie nichts hören und sich der Fokus nicht bewegt hat, ist das Kriterium nicht erfüllt. Verwenden Sie den NVDA-Sprachbetrachter (Tools > Speech Viewer), um ein Textprotokoll aller Ansagen zur Überprüfung der Genauigkeit zu sehen.
  4. Manueller Test mit JAWS + Chrome: Wiederholen Sie dieselben Interaktionen mit JAWS. Bestätigen Sie, dass Meldungen mit role="status" mit einer höflichen Unterbrechung angesagt werden und dass Meldungen mit role="alert" sofort unterbrechen. Prüfen Sie, dass JAWS dieselbe Meldung nicht mehrfach ansagt, bedingt durch falsche Einstellungen von aria-atomic oder aria-relevant.
  5. Manueller Test mit VoiceOver + Safari (macOS/iOS): Verwenden Sie VoiceOver auf macOS mit Safari und wiederholen Sie dieselben Interaktionen. Beachten Sie, dass VoiceOver mit aria-live etwas anders umgehen kann als Screenreader unter Windows – stellen Sie sicher, dass Ansagen erfolgen und sinnvoll formuliert sind.
  6. DOM nach der Interaktion inspizieren: Verwenden Sie die DevTools des Browsers, lösen Sie die Statusmeldung aus und inspizieren Sie dann das erschienene Element. Bestätigen Sie, dass es role="status", role="alert" oder ein gültiges aria-live-Attribut hat. Wenn die Meldung als reiner Text in einen unmarkierten Container injiziert wird, ist das ein Fehler. Prüfen Sie außerdem, dass der Live-Region-Container im DOM vor dem Injizieren der Meldung vorhanden war – Screenreader kündigen nur Änderungen an bereits existierenden Live-Regionen an, nicht Elemente, die frisch in den DOM eingefügt werden.

Wie man es behebt

Formularvalidierungs-Zusammenfassung – Falsch

<!-- Error summary injected after failed submission -->
<div id='error-summary' class='error-box'>
  <p>Please fix the following errors before submitting:</p>
  <ul>
    <li>Email address is required.</li>
    <li>Password must be at least 8 characters.</li>
  </ul>
</div>
<!-- Problem: no role or aria-live attribute; screen readers will not announce this -->

Formularvalidierungs-Zusammenfassung – Richtig

<!-- role="alert" causes immediate announcement when content is injected -->
<div id='error-summary' role='alert' class='error-box'>
  <p>Please fix the following errors before submitting:</p>
  <ul>
    <li>Email address is required.</li>
    <li>Password must be at least 8 characters.</li>
  </ul>
</div>
<!-- The container must be present in the DOM before JavaScript injects content into it -->

Warenkorb-Artikelanzahl – Falsch

<!-- Cart badge updated via JavaScript after user clicks "Add to cart" -->
<button id='add-to-cart'>Add to Cart</button>
<span id='cart-count' class='badge'>0</span>
<!-- Problem: cart-count has no live region; update from 0 to 1 is silent to screen readers -->

Warenkorb-Artikelanzahl – Richtig

<!-- Separate polite live region announces cart update without interrupting the user -->
<button id='add-to-cart'>Add to Cart</button>
<span id='cart-count' class='badge' aria-hidden='true'>1</span>

<!-- Visually hidden live region provides the announcement -->
<div
  id='cart-status'
  role='status'
  aria-live='polite'
  aria-atomic='true'
  class='visually-hidden'
>
  <!-- JavaScript updates this text: "1 item in your cart" -->
</div>
<!-- aria-atomic="true" ensures the full sentence is read, not just the changed number -->

Suchergebnisanzahl – Falsch

<!-- Results count rendered after AJAX search -->
<p id='results-info'>Showing 24 of 140 results for "laptop"</p>
<!-- Problem: element is replaced entirely via innerHTML; no live region present -->

Suchergebnisanzahl – Richtig

<!-- Live region pre-exists in the DOM; JavaScript updates its content after search -->
<p
  id='results-info'
  role='status'
  aria-live='polite'
  aria-atomic='true'
>
  Showing 24 of 140 results for "laptop"
</p>
<!-- role="status" implies polite + atomic; explicit attributes added for clarity and compatibility -->

Datei-Upload-Fortschritt – Falsch

<!-- Progress percentage injected into DOM during upload -->
<div class='progress-container'>
  <div class='progress-bar' style='width: 60%'></div>
  <span id='progress-text'>60%</span>
</div>
<!-- Problem: percentage updates are visual only; no announcement to AT -->

Datei-Upload-Fortschritt – Richtig

<!-- Use aria-valuenow on a progressbar role, plus a separate polite status for milestones -->
<div class='progress-container'>
  <div
    role='progressbar'
    aria-valuenow='60'
    aria-valuemin='0'
    aria-valuemax='100'
    aria-label='File upload progress'
    class='progress-bar'
    style='width: 60%'
  >
  </div>
</div>
<div
  id='upload-status'
  role='status'
  aria-live='polite'
  aria-atomic='true'
  class='visually-hidden'
>
  Upload complete. Your file has been saved.
</div>
<!-- Only announce key milestones (25%, 50%, 75%, complete) to avoid over-announcement -->

Häufige Fehler

  • Das Live-Region-Element gleichzeitig mit der Meldung erstellen: Wenn Sie einem neu erstellten DOM-Element role="alert" hinzufügen und es sofort befüllen, schlägt dies oft fehl, weil Screenreader den neuen Knoten noch nicht als Live-Region registriert haben. Rendern Sie den leeren Container immer beim Laden der Seite und aktualisieren Sie seinen Textinhalt erst, wenn die Statusmeldung bereit ist.
  • aria-live="assertive" für nicht dringende Meldungen verwenden: Assertive Live-Regionen unterbrechen alles, was der Screenreader gerade liest. Wenn Sie assertive für Routine-Meldungen wie „Artikel in den Warenkorb gelegt“ verwenden, frustrieren Sie Nutzer, weil ihr Lesefluss ständig unterbrochen wird. Reservieren Sie assertive (oder role="alert") für wirklich zeitkritische Fehler oder Warnungen; verwenden Sie für alles andere polite.
  • aria-live auf einen ungültigen Wert wie "true" oder "1" setzen: Nur "off", "polite" und "assertive" sind gültige Werte. Ungültige Werte deaktivieren die Live-Region stillschweigend ohne Browserwarnung, sodass die axe-core-Regel aria-live das Element markiert.
  • Sich ausschließlich auf Farbe oder Symbole zur Statuskommunikation verlassen: Ein grünes Häkchen-Symbol oder ein roter Rahmen, der in die Seite injiziert wird, ist ein rein visuelles Signal. Ohne begleitenden Text in einer Live-Region erhalten Screenreader-Nutzer keine Information. Kombinieren Sie visuelle Indikatoren immer mit einer textbasierten Live-Region-Ansage.
  • aria-atomic="true" weglassen, wenn ein Teil eines Satzes aktualisiert wird: Wenn JavaScript nur eine Zahl innerhalb eines Satzes aktualisiert (z. B. Änderung von „3“ zu „4“ in „4 Artikel im Warenkorb“), werden einige Screenreader nur den geänderten Knoten ansagen und „4“ ohne Kontext sagen. aria-atomic="true" am Container weist AT an, die gesamte Region als Einheit zu lesen.
  • Jedes inkrementelle Fortschrittsupdate ansagen: Wenn während eines Datei-Uploads jede Sekunde eine neue Statusmeldung injiziert wird („10%“, „11%“, „12%“…), wird der Nutzer mit Ansagen überflutet und der Screenreader unbenutzbar. Sagen Sie nur bedeutende Meilensteine oder den endgültigen Abschlusszustand an.
  • Den Live-Region-Container in Elemente setzen, die bedingt mit display:none oder visibility:hidden versteckt werden: Eine Live-Region innerhalb eines versteckten Eltern-Elements ist wirkungslos und wird nichts ansagen, selbst wenn das Live-Region-Element selbst sichtbar ist. Stellen Sie sicher, dass die Vorfahrenkette der Live-Region zum Zeitpunkt der Ansage nicht versteckt ist.
  • role="alert" für Erfolgsmeldungen verwenden, die nach einer Navigation erscheinen: Wenn eine Statusmeldung über einen Seitenreload hinweg bestehen bleibt (z. B. eine serverseitig gerenderte Flash-Meldung nach einem Redirect), kann role="alert" zu doppelten oder zu aggressiven Ansagen führen. Ziehen Sie stattdessen role="status" oder eine Fokusverschiebung in den Meldungsbereich in Betracht, damit sich die Ansage natürlich in die Navigation des Nutzers einfügt.
  • Annehmen, dass Tooltip- oder Toast-Bibliotheken Live-Regionen automatisch handhaben: Viele gängige UI-Komponentenbibliotheken (z. B. Bootstrap Toasts, benutzerdefinierte Tooltip-Systeme) fügen standardmäßig keine ARIA-Live-Region-Attribute hinzu. Inspizieren Sie immer das gerenderte HTML von Drittkomponenten und ergänzen Sie role="status" oder aria-live, wenn diese fehlen.
  • Vor der Veröffentlichung nicht mit echten Screenreadern testen: Automatisierte Tools wie axe können eine fehlende Live-Region bei einer dynamischen Statusmeldung nicht erkennen. Wenn Sie sich ausschließlich auf automatisierte Audits verlassen, bleiben 4.1.3-Fehler unentdeckt. Machen Sie manuelle Screenreader-Tests – mit NVDA, JAWS und VoiceOver – zu einem festen Bestandteil Ihres QA-Prozesses für jede Funktion, die dynamisches Feedback erzeugt.

Bezug zu den Barrierefreiheitsvorschriften der Türkei

Die türkische Präsidialverfügung Nr. 2025/10, veröffentlicht im Amtsblatt Nr. 32933 am 21. Juni 2025, legt verbindliche digitale Barrierefreiheitsverpflichtungen für eine breite Palette von Organisationen fest, die in der Türkei tätig sind. Die Verfügung verweist auf WCAG 2.1 und WCAG 2.2 als technischen Standard für die Konformität und verlangt ausdrücklich Konformität auf Level AA als Basislinie für die meisten erfassten Einrichtungen.

WCAG 4.1.3 Statusmeldungen ist ein Kriterium auf Level AA, was bedeutet, dass es direkt in den verpflichtenden Geltungsbereich der Verfügung für alle erfassten Einrichtungen fällt. Die folgenden Arten von Organisationen sind ausdrücklich erfasst:

  • Öffentliche Institutionen und Behörden – alle zentralen und lokalen Regierungsstellen, Ministerien, Gemeinden und Staatsbetriebe müssen AA-Konformität über ihre digitalen Dienste hinweg erreichen.
  • Banken und Finanzinstitute – reguliert von der Bankenaufsichts- und Regulierungsbehörde (BDDK), bieten diese Einrichtungen kritische Online-Dienste an (Internetbanking, Kreditanträge, Kartenverwaltung), bei denen dynamisches Status-Feedback – wie Transaktionsbestätigungen, Fehlermeldungen und Kontostandsaktualisierungen – äußerst häufig ist. Fehler bei 4.1.3 beeinträchtigen direkt die finanzielle Unabhängigkeit von Nutzern mit Behinderungen.
  • E-Commerce-Plattformen – der Online-Handel ist ein primärer Anwendungsfall für Statusmeldungen (Warenkorbaktualisierungen, Bestellbestätigungen, Lagerbestandswarnungen). E-Commerce-Betreiber müssen sicherstellen, dass diese dynamischen Benachrichtigungen für alle Nutzer zugänglich sind.
  • Krankenhäuser und Gesundheitseinrichtungen – Terminbuchungssysteme, Portale für Testergebnisse und Patientendashboards verwenden häufig Statusmeldungen. Nicht zugängliche Gesundheitsinformationen können für Menschen mit Behinderungen schwerwiegende Folgen haben.
  • Telekommunikationsunternehmen mit 200.000 oder mehr Abonnenten – Portale zur Kontoverwaltung, Abrechnungsbenachrichtigungen und Service-Status-Updates müssen alle Level AA erfüllen, einschließlich 4.1.3.
  • Reisebüros und private Transportunternehmen – Buchungsbestätigungen, Rückmeldungen zur Sitzplatzwahl und Nachrichten zu Reiseplanaktualisierungen sind zentral für das Nutzererlebnis und müssen programmatisch ermittelbar sein.
  • Private Schulen und Bildungseinrichtungen, die vom Bildungsministerium (MoNE) autorisiert sind – Lernmanagementsysteme, Notenportale und Einschreibeplattformen müssen Statusmeldungen barrierefrei bereitstellen, um allen Schülern und Eltern zu dienen.

Das Barrierefreiheitslogo (Erişilebilirlik Logosu), herausgegeben vom Ministerium für Familie und Sozialdienste, ist das offizielle Zertifizierungszeichen für digital barrierefreie türkische Websites und Anwendungen. Um für das Logo in Frage zu kommen, muss eine Organisation vollständige Konformität auf Level AA nachweisen – was 4.1.3 einschließt. Da Statusmeldungen in modernen Weboberflächen allgegenwärtig sind, sollte jede Organisation, die das Erişilebilirlik Logosu anstrebt, 4.1.3 als verpflichtenden Auditpunkt behandeln und Live-Region-Muster konsequent in allen Bereichen mit dynamischen Inhalten implementieren.

Organisationen, die nicht konform sind, riskieren Verwaltungsmaßnahmen im Rahmen der Verfügung, den Verlust der Berechtigung für das Barrierefreiheitslogo und Reputationsschäden in einem Markt, der zunehmend auf Barrierefreiheit achtet. Die korrekte Umsetzung von WCAG 4.1.3 ist nicht nur ein technisches Kontrollkästchen – sie ist eine konkrete Investition in gleichberechtigten digitalen Zugang für die etwa 8,5 Millionen Bürger der Türkei, die mit Behinderungen leben.