Kryteria sukcesu WCAG · Level A
WCAG 2.4.1: Pomijanie bloków
WCAG 2.4.1 wymaga, aby strony internetowe zapewniały mechanizm pomijania powtarzających się bloków treści, takich jak menu nawigacyjne, tak aby użytkownicy klawiatury i technologii asystujących mogli dotrzeć do głównej treści bez przechodzenia klawiszem Tab przez każdy link. Jest to wymaganie na poziomie A, co oznacza, że stanowi ono podstawę dostępnej nawigacji za pomocą klawiatury.
Co oznacza ta zasada
WCAG 2.4.1 Bypass Blocks stanowi: „Dostępny jest mechanizm umożliwiający pominięcie bloków treści powtarzających się na wielu stronach internetowych.” W praktyce oznacza to, że każdy zestaw linków, menu nawigacyjnych, banerów lub innych bloków treści, który pojawia się konsekwentnie na wielu stronach, musi mieć sposób, który pozwala użytkownikom pominąć go i przejść bezpośrednio do unikalnej treści bieżącej strony.
Najpowszechniej rozpoznawaną implementacją jest link „skip navigation” — element kotwicy umieszczony jako pierwszy fokusowalny element na stronie, prowadzący do głównego obszaru treści za pomocą identyfikatora fragmentu, takiego jak #main-content. WCAG akceptuje jednak także inne mechanizmy omijania, w tym poprawnie zbudowane regiony punktów orientacyjnych (takie jak elementy HTML5 <main>, <nav> i <header> lub ich odpowiedniki ARIA) oraz struktury nagłówków, które pozwalają użytkownikom czytników ekranu przeskakiwać między sekcjami.
Strona spełnia to kryterium, gdy prawdziwe jest co najmniej jedno z poniższych: link „skip” jest obecny i działa; strona używa znaczących elementów punktów orientacyjnych HTML5, które technologie asystujące udostępniają do szybkiej nawigacji; lub równoważny skrót klawiaturowy albo mechanizm nawigacji w obrębie strony pozwala użytkownikom omijać powtarzające się bloki. Link „skip” może być domyślnie wizualnie ukryty, ale musi stać się widoczny po uzyskaniu fokusu z klawiatury i musi faktycznie przenosić fokus klawiatury do elementu docelowego po aktywacji — nie tylko przewijać widok.
Strona nie spełnia tego kryterium, gdy: nie ma linku „skip”, struktury punktów orientacyjnych ani żadnego innego mechanizmu; link „skip” istnieje, ale jest trwale ukryty za pomocą display:none lub visibility:hidden (co uniemożliwia uzyskanie fokusu); docelowa kotwica linku „skip” nie istnieje w DOM; lub link jest obecny, ale nie przenosi fokusu, przez co użytkownicy klawiatury nadal są zmuszeni przechodzić tabulatorem przez każdy element nawigacji. WCAG przewiduje wyjątek dla stron, na których nie ma powtarzającego się bloku — na przykład jednokartkowego dokumentu bez nagłówka nawigacyjnego — ale wyjątek ten jest wąski i rzadko ma zastosowanie w przypadku rzeczywistych serwisów internetowych.
Dlaczego to ma znaczenie
To kryterium bezpośrednio wpływa na kilka grup użytkowników. Użytkownicy korzystający wyłącznie z klawiatury — w tym osoby z niepełnosprawnościami ruchowymi, takimi jak zespół cieśni nadgarstka, porażenie czy drżenie — nawigują wyłącznie za pomocą klawisza Tab, aby przechodzić między elementami interaktywnymi. Bez mechanizmu omijania muszą naciskać Tab dziesiątki razy tylko po to, by dotrzeć do pierwszej unikalnej treści na każdej odwiedzanej stronie. Typowy pasek nawigacyjny serwisu z 10–20 linkami, pomnożony przez setki odwiedzin stron, staje się znaczącym obciążeniem fizycznym i czasowym.
Użytkownicy czytników ekranu, którzy są niewidomi lub słabowidzący, polegają na regionach punktów orientacyjnych i nagłówkach, aby orientować się i przeskakiwać między sekcjami strony. Choć nowoczesne czytniki ekranu (JAWS, NVDA, VoiceOver) oferują własne skróty klawiszowe do nawigacji po punktach orientacyjnych i nagłówkach, skróty te działają tylko wtedy, gdy strona jest poprawnie zbudowana. Strona bez punktów orientacyjnych i bez linku „skip” wymusza liniowe czytanie każdego elementu od góry, w tym powtarzającej się nawigacji, za każdym razem, gdy strona się ładuje.
Rozważmy scenariusz z życia wzięty: obywatel z niepełnosprawnością wzroku w Turcji odwiedza portal e-administracji, aby złożyć zeznanie podatkowe. Portal ma górny pasek nawigacyjny z 18 linkami, ścieżkę okruszkową z 4 linkami oraz dodatkowy pasek boczny z 12 linkami — łącznie 34 naciśnięcia Tab przed dotarciem do pól formularza. Bez mechanizmu omijania użytkownik ten musi przechodzić przez wszystkie 34 elementy na każdej stronie wieloetapowego procesu. Prawidłowo zaimplementowany link „skip” redukuje to do jednego naciśnięcia klawisza.
Dostępność poznawcza również ma tu znaczenie: użytkownicy z zaburzeniami uwagi korzystają na tym, że mogą przejść bezpośrednio do istotnej treści, bez przetwarzania powtarzających się, rozpraszających elementów nawigacyjnych. Poza dostępnością dla osób z niepełnosprawnościami, dobrze zbudowane regiony punktów orientacyjnych poprawiają SEO, ponieważ roboty wyszukiwarek wykorzystują strukturę dokumentu do zrozumienia hierarchii treści i jej istotności. Dostępna architektura nawigacji i przejrzysta struktura punktów orientacyjnych przyczyniają się do lepszego indeksowania i potencjalnie wyższych pozycji w wynikach wyszukiwania.
Powiązane reguły Axe-core
- bypass: Ta reguła sprawdza, czy strona zapewnia jakikolwiek mechanizm omijania powtarzających się bloków nawigacyjnych. Axe analizuje stronę pod kątem obecności linku „skip” wskazującego istniejącą kotwicę w obrębie strony, obecności ról punktów orientacyjnych ARIA (
role='main',role='navigation'itd.) lub elementów punktów orientacyjnych HTML5 (<main>,<nav>,<header>,<footer>,<aside>) oraz atrybutów ARIAaria-labellubaria-labelledby, które sprawiają, że wiele punktów orientacyjnych jest rozróżnialnych. Reguła zgłasza naruszenie, gdy żaden z tych mechanizmów nie jest obecny. Należy zauważyć, że ta reguła w niektórych przypadkach wymaga ręcznej weryfikacji — na przykład axe może wykryć, że link „skip” istnieje, ale nie może automatycznie potwierdzić, że po aktywacji przenosi fokus klawiatury we właściwe miejsce. - skip-link: Ta reguła dotyczy konkretnie linków „skip” i sprawdza, czy element docelowy wskazywany przez atrybut
hreflinku „skip” (np.#main-content) faktycznie istnieje w DOM i jest osiągalny za pomocą fokusu z klawiatury. Jeśli link „skip” wskazuje nieistniejący identyfikator lub jeśli element docelowy nie jest fokusowalny (brakuje mu atrybututabindex, gdy jest elementem nieinteraktywnym), reguła zgłasza naruszenie. Pozwala to wychwycić częsty błąd polegający na dodaniu linku „skip” w HTML, ale zapomnieniu o dodaniu odpowiadającego atrybutuiddo elementu głównej treści. - tabindex: Ta reguła oznacza elementy z wartościami
tabindexwiększymi niż 0, które tworzą niestandardową kolejność tabulacji odbiegającą od naturalnej kolejności DOM. Choćtabindex='0'jest prawidłowy i konieczny, aby uczynić elementy nieinteraktywne fokusowalnymi (takie jak docelowy element linku „skip”<div>), używanietabindex='1',tabindex='2'i tak dalej zakłóca oczekiwaną sekwencję Tab na całej stronie, co może sprawić, że mechanizmy omijania będą nieprzewidywalne lub nieskuteczne. Narzędzia automatyczne mogą wykryć obecność dodatnich wartościtabindex, ale tester ludzki musi zweryfikować, czy wynikowa kolejność tabulacji ma logiczny sens i czy link „skip” pozostaje pierwszym fokusowalnym elementem w sekwencji.
Jak testować
- Skan automatyczny: Uruchom axe DevTools (rozszerzenie przeglądarki) lub Lighthouse (Chrome DevTools > Lighthouse > Accessibility) na stronie. Szukaj w szczególności naruszeń w ramach reguł
bypass,skip-linkitabindex. W axe DevTools przefiltruj wyniki według tych identyfikatorów reguł. W Lighthouse sprawdź sekcję „Navigation” w audycie dostępności. Zanotuj wszystkie pozycje „Needs Review” — axe oznacza niektóre kontrole omijania jako wymagające ręcznego potwierdzenia. - Test klawiatury (wszystkie przeglądarki): Otwórz stronę w przeglądarce bez aktywnego czytnika ekranu. Naciśnij raz Tab. Potwierdź, że pierwszym elementem, który uzyskał fokus, jest link „skip” (w tym momencie może stać się widoczny, jeśli wcześniej był poza ekranem). Naciśnij Enter, aby aktywować link „skip”. Potwierdź, że fokus klawiatury został przeniesiony do głównego obszaru treści — kolejne naciśnięcie Tab powinno przenieść do pierwszego elementu interaktywnego wewnątrz głównej treści, a nie do pierwszego linku nawigacyjnego. Jeśli fokus się nie przenosi, link „skip” jest uszkodzony.
- NVDA + Firefox: Uruchom NVDA i otwórz stronę w Firefox. Naciśnij skrót Insert+F7, aby otworzyć listę elementów i sprawdzić punkty orientacyjne. Alternatywnie naciśnij D, aby przeskakiwać między regionami punktów orientacyjnych i potwierdzić, że punkt orientacyjny
mainjest obecny i wyraźnie oznaczony. Naciśnij H, aby nawigować po nagłówkach i zweryfikować, że struktura nagłówków pozwala zidentyfikować sekcje strony. Przejdź tabulatorem do linku „skip” i aktywuj go klawiszem Enter, a następnie potwierdź, że NVDA ogłasza treść z wnętrza regionu głównego. - VoiceOver + Safari (macOS/iOS): Włącz VoiceOver (Command+F5 na Macu). Użyj Rotor (Control+Option+U), aby otworzyć menu punktów orientacyjnych i zweryfikować, że pojawiają się nazwane regiony punktów orientacyjnych. Przejdź tabulatorem do linku „skip” i naciśnij Enter; potwierdź, że VoiceOver czyta treść z głównego obszaru treści bezpośrednio po aktywacji. Na iOS użyj gestu Rotor, aby przełączyć się na punkty orientacyjne i przesuwaj palcem, aby się między nimi poruszać.
- JAWS + Chrome: Z aktywnym JAWS naciśnij Q, aby przejść bezpośrednio do punktu orientacyjnego głównej treści. Zweryfikuj, że JAWS ogłasza wejście do regionu głównego. Użyj Insert+F3, aby wyświetlić listę punktów orientacyjnych i potwierdzić odpowiednie etykiety. Przejdź tabulatorem od początku strony i zweryfikuj, że link „skip” jest ogłaszany jako pierwszy, z dostępną nazwą, taką jak „Skip to main content”.
- Weryfikacja elementu docelowego fokusu: Sprawdź wartość atrybutu
hreflinku „skip” (np.#main-content). Użyj narzędzi deweloperskich przeglądarki, aby potwierdzić, że element zid='main-content'istnieje w DOM. Jeśli ten element jest<div>lub innym nieinteraktywnym kontenerem, potwierdź, że matabindex='-1', aby uczynić go programowo fokusowalnym bez wprowadzania go do kolejności tabulacji.
Jak naprawić
Brak linku „skip” — Niepoprawne
<!-- Navigation appears first with no bypass mechanism -->
<div class='nav-wrapper'>
<a href='/home'>Home</a>
<a href='/about'>About</a>
<a href='/services'>Services</a>
<a href='/contact'>Contact</a>
</div>
<div class='content'>
<h1>Welcome</h1>
<p>Page content here.</p>
</div>
Brak linku „skip” — Poprawne
<!-- Skip link is the first focusable element; visually hidden until focused -->
<a href='#main-content' class='skip-link'>Skip to main content</a>
<nav aria-label='Primary navigation'>
<a href='/home'>Home</a>
<a href='/about'>About</a>
<a href='/services'>Services</a>
<a href='/contact'>Contact</a>
</nav>
<!-- tabindex='-1' allows the div to receive programmatic focus without
entering the natural tab order -->
<main id='main-content' tabindex='-1'>
<h1>Welcome</h1>
<p>Page content here.</p>
</main>
Link „skip” z nieistniejącym celem — Niepoprawne
<!-- The skip link exists but points to an ID that is not in the DOM -->
<a href='#content' class='skip-link'>Skip to main content</a>
<nav>...navigation links...</nav>
<!-- The id here is 'main', not 'content' — the skip link target is broken -->
<div id='main'>
<h1>Page Title</h1>
</div>
Link „skip” z nieistniejącym celem — Poprawne
<!-- href value exactly matches the id of the target element -->
<a href='#main-content' class='skip-link'>Skip to main content</a>
<nav>...navigation links...</nav>
<!-- id matches the href fragment; tabindex='-1' ensures focus is received -->
<main id='main-content' tabindex='-1'>
<h1>Page Title</h1>
</main>
Link „skip” trwale ukryty — Niepoprawne
<!-- display:none removes the element from the accessibility tree entirely -->
<a href='#main-content' style='display:none'>Skip to main content</a>
<!-- visibility:hidden also hides from screen readers and keyboard -->
<a href='#main-content' style='visibility:hidden'>Skip to main content</a>
Link „skip” trwale ukryty — Poprawne
<!-- CSS moves the link off-screen visually but keeps it in the tab order.
On :focus, it becomes visible so sighted keyboard users can see it. -->
<style>
.skip-link {
position: absolute;
left: -9999px;
top: auto;
width: 1px;
height: 1px;
overflow: hidden;
}
.skip-link:focus {
position: static;
width: auto;
height: auto;
overflow: visible;
}
</style>
<a href='#main-content' class='skip-link'>Skip to main content</a>
Brak struktury punktów orientacyjnych — Niepoprawne
<!-- Generic divs with no semantic role — screen readers cannot identify regions -->
<div class='header'>...logo and nav...</div>
<div class='sidebar'>...secondary links...</div>
<div class='page-body'>...main content...</div>
<div class='footer'>...footer links...</div>
Brak struktury punktów orientacyjnych — Poprawne
<!-- HTML5 semantic elements expose landmark roles to assistive technologies.
Multiple nav elements are distinguished with aria-label. -->
<header>
<nav aria-label='Primary navigation'>...main nav links...</nav>
</header>
<aside aria-label='Related resources'>...secondary links...</aside>
<main id='main-content' tabindex='-1'>...main content...</main>
<footer>
<nav aria-label='Footer navigation'>...footer links...</nav>
</footer>
Typowe błędy
- Ukrywanie linku „skip” za pomocą
display:nonelubvisibility:hiddenzamiast techniki CSS przenoszącej go poza ekran, co usuwa go zarówno z widocznego interfejsu, jak i z drzewa dostępności, czyniąc go całkowicie niefunkcjonalnym dla wszystkich użytkowników. - Dodanie linku „skip” z
href='#main-content', ale pominięcie odpowiadającego atrybutuid='main-content'na elemencie docelowym, przez co link po aktywacji nic nie robi. - Kierowanie linku „skip” do nieinteraktywnego elementu kontenerowego (takiego jak
<div>lub<section>) bez dodaniatabindex='-1', co oznacza, że przeglądarki przewiną widok, ale nie przeniosą fokusu klawiatury do elementu docelowego. - Umieszczanie linku „skip” w innym miejscu niż jako pierwszy fokusowalny element w DOM — na przykład po logo lub po pierwszym linku nawigacyjnym — co niweczy jego cel, ponieważ użytkownicy nadal muszą przechodzić tabulatorem przez treść, aby do niego dotrzeć.
- Używanie dodatnich wartości
tabindex(np.tabindex='1') w dowolnym miejscu na stronie, co reorganizuje kolejność tabulacji w nieprzewidywalny sposób i może przesunąć link „skip” z oczekiwanej pierwszej pozycji. - Uwzględnianie tylko jednego nienazwanego punktu orientacyjnego
<nav>, gdy strona ma wiele regionów nawigacyjnych (nawigacja główna, okruszki, nawigacja w stopce), co uniemożliwia użytkownikom czytników ekranu rozróżnienie ich za pomocą skrótów nawigacji po punktach orientacyjnych. - Poleganie wyłącznie na strukturze punktów orientacyjnych bez zapewnienia linku „skip”, w założeniu, że wszyscy użytkownicy czytników ekranu znają i używają skrótów do punktów orientacyjnych — widzący użytkownicy klawiatury, którzy nie korzystają z czytników ekranu, nie odnoszą żadnych korzyści z samych punktów orientacyjnych i polegają na widocznym linku „skip”.
- Obejmowanie całego korpusu strony jednym elementem
<main>, który zawiera nawigację, nagłówki i stopki, zamiast ograniczenia<main>do unikalnej treści strony. - Używanie
role='navigation'na elemencie<div>zawierającym nawigację bez zapewnieniaaria-label, gdy istnieje wiele punktów orientacyjnych nawigacji, co powoduje, że czytniki ekranu ogłaszają jedynie „navigation”, bez możliwości rozróżnienia regionów. - Prawidłowe zaimplementowanie linku „skip” w statycznym prototypie HTML, ale utrata go podczas renderowania w frameworku JavaScript (np. React, Angular, Vue), ponieważ komponent linku „skip” nie jest uwzględniony w głównym układzie lub jest warunkowo usuwany podczas hydratacji po stronie klienta.
Związek z tureckimi regulacjami dotyczącymi dostępności
Turejska Okrężnica Prezydencka 2025/10, opublikowana w Dzienniku Urzędowym nr 32933 w dniu 21 czerwca 2025 r., ustanawia obowiązkowe wymagania dotyczące dostępności stron internetowych i aplikacji mobilnych w oparciu o standardy zgodności WCAG 2.1 na poziomie AA oraz WCAG 2.2 na poziomie A. WCAG 2.4.1 Bypass Blocks jest kryterium poziomu A, co stawia je wśród najbardziej fundamentalnych wymagań wynikających z Okrężnicy — oznacza to, że reprezentuje ono poziom bazowy, poniżej którego cyfrowe usługi podmiotów objętych regulacją nie mogą się znaleźć.
Okrężnica obejmuje szeroki zakres podmiotów publicznych i prywatnych. Instytucje publiczne — w tym ministerstwa, gminy, agencje państwowe i jednostki powiązane z rządem — są zobowiązane do osiągnięcia pełnej zgodności w ciągu jednego roku od daty wejścia Okrężnicy w życie. Podmioty sektora prywatnego objęte regulacją mają dwuletnie okno na zapewnienie zgodności. Do objętych kategorii sektora prywatnego należą platformy e-commerce, banki i instytucje finansowe, szpitale i świadczeniodawcy opieki zdrowotnej, operatorzy telekomunikacyjni z 200 000 lub większą liczbą abonentów, biura podróży, prywatne firmy transportowe oraz szkoły prywatne upoważnione przez Ministerstwo Edukacji Narodowej (MoNE).
Dla tych podmiotów brak wdrożenia WCAG 2.4.1 oznacza, że ich strony internetowe są niezgodne na najbardziej podstawowym poziomie standardu. Portal rządowy, platforma bankowości internetowej, system rezerwacji wizyt w szpitalu czy proces finalizacji zakupu w e-commerce, który nie ma działającego mechanizmu „skip navigation”, pozostaje w bezpośredniej sprzeczności z wymaganiami Okrężnicy. Biorąc pod uwagę, że nawigacja klawiaturą jest fundamentalna dla użytkowników z niepełnosprawnościami ruchowymi, a użyteczność czytników ekranu w dużym stopniu zależy od struktury punktów orientacyjnych, kryterium to ma istotne znaczenie w audytach dostępności i ocenach regulacyjnych.
Organizacje przeprowadzające wewnętrzne audyty dostępności lub zlecające zewnętrzne oceny w ramach przygotowań do zapewnienia zgodności powinny traktować WCAG 2.4.1 jako element pierwszego przejścia — jedno z najłatwiejszych do wdrożenia rozwiązań i jedno z najbardziej wpływowych dla użytkowników polegających na dostępie za pomocą klawiatury i technologii asystujących. Brak jego uwzględnienia może zostać wskazany wprost w przeglądach regulacyjnych jako podstawowa niezgodność, potencjalnie wpływając na ogólny status zgodności organizacji z Okrężnicą.
