CometWebPakiet badania

WCAG 2.1: liczba kryteriów i skan axe-core

Maciej Zmitrukiewicz · Pakiet badania

To materiał do artykułu WCAG 2.1: 4 zasady, poziom AA i różnice z 2.0 i 2.2. We wrześniu 2026 zrobiłem trzy małe pomiary: policzyłem kryteria sukcesu w każdej wersji WCAG, porównałem polską ustawę o dostępności z WCAG 2.1 i puściłem automatyczny skan na dziesięciu stronach mojej witryny. Żaden z nich nie ocenia zgodności strony z WCAG, także mojej. Angielska wersja tej notatki to methodology.md.

Kryteria według wersji i poziomu

Skrypt pobiera trzy rekomendacje W3C (/TR/WCAG20/, /TR/WCAG21/ i /TR/WCAG22/) i wyciąga z nich każde kryterium sukcesu z jego poziomem. Te adresy zawsze prowadzą do najnowszego wydania danej wersji, w przypadku WCAG 2.1 było to wydanie z 2025 roku, a W3C zaznacza, że kolejne wydania mają te same kryteria. Kryterium 4.1.1 Parsing policzyłem w WCAG 2.2 jako usunięte, bo specyfikacja oznacza je tam jako „Obsolete and removed”.

WersjaAAAAAARazemA + AAWytyczne
2.0251323613812
2.1302028785013
2.2312431865513

Między 2.0 a 2.1 doszło 17 kryteriów (5 A, 7 AA, 5 AAA), żadne nie zniknęło i żadne nie zmieniło poziomu. Między 2.1 a 2.2 doszło 9 (2 A, 4 AA, 3 AAA), a 4.1.1 usunięto, też bez zmian poziomu. W aktualnym wydaniu WCAG 2.1 kryterium 4.1.1 wciąż ma poziom A, ale z uwagą, że dla treści w HTML lub XML należy je uznać za zawsze spełnione.

Załącznik do polskiej ustawy

Drugi skrypt czyta ustawę o dostępności cyfrowej z 2019 roku (Dz.U. 2019 poz. 848) z eli.gov.pl i porównuje kryteria z jej załącznika z 50 kryteriami A i AA WCAG 2.1. Załącznik wymienia 49 z nich (30 A, 19 AA), a poziomy się zgadzają. Brakuje tylko 1.2.4 Napisy rozszerzone (na żywo). To pasuje do art. 3 ust. 2 pkt 1, który wyłącza ze stosowania ustawy multimedia nadawane na żywo, choć sama ustawa nie podaje powodu pominięcia.

Skan axe-core dziesięciu stron

Puściłem axe-core w czystym Chromium na dziesięciu stronach cometweb.io: /, /pl, /pricing, /insight/accessibility, /tools/contrast, /pl/tools/a11y-checklist, /contact, /blog/accessibility-audit-wcag-eaa, /pl/blog/audyt-dostepnosci-wcag-eaa i /pl/glossary/wcag. To po jednej stronie z każdego szablonu, obie strony główne i dwie pary językowe. Okno miało 1280 × 800 z ograniczonym ruchem, a baner cookies został w stanie, w jakim widzi go nowy użytkownik. Skan ograniczyłem do reguł WCAG 2.1 A i AA, a reguły eksperymentalne były wyłączone, jak domyślnie.

Każde z 50 kryteriów A i AA WCAG 2.1 dostało potem jeden wynik, od najpoważniejszego:

WynikCo znaczyKryteria
Naruszeniereguła dla tego kryterium wykryła błąd na co najmniej jednej stronie1
Do weryfikacjireguła nie rozstrzygnęła na co najmniej jednej stronie3
Reguły bez błędówreguły zadziałały na prawdziwej treści i nic nie znalazły11
Nie było czego sprawdzićreguła istnieje, ale na stronach nie było wideo, audio, meta refresh ani migania4
Tylko reguła eksperymentalnakryterium pokrywa wyłącznie eksperymentalna reguła axe3
Brak regułyżadna reguła axe-core nie pokrywa tego kryterium28

Gdy axe wiąże regułę z kryterium, reguła sprawdza część tego kryterium. „Reguły bez błędów” znaczy więc, że zautomatyzowana część nic nie znalazła na tych dziesięciu stronach. Przykład: image-alt sprawdza, czy obraz ma tekst alternatywny, a czy ten tekst jest trafny, oceniasz już sam.

Co skan znalazł na mojej stronie

Czego te dane nie pokażą

Pliki

Żeby to powtórzyć, uruchom python3 count_criteria.py i python3 count_annex_pl.py, które potrzebują tylko Pythona. Do skanu skopiuj criteria.csv i run_axe_scan.mjs do pustego katalogu, a potem uruchom npm i playwright@1.62.1 axe-core@4.13.0, npx playwright install chromium i node run_axe_scan.mjs. Liczby kryteriów wyjdą te same, dopóki dokumenty W3C się nie zmienią, a skan da inny wynik, kiedy zmienią się moje strony.

Wróć do artykułu