WCAG-succescriteria · Level A
WCAG 2.4.1: Blokken overslaan
WCAG 2.4.1 vereist dat webpagina’s een mechanisme bieden om herhaalde blokken inhoud, zoals navigatiemenu’s, over te slaan, zodat toetsenbordgebruikers en gebruikers van ondersteunende technologie de hoofdinhoud kunnen bereiken zonder door elke link te hoeven tabben. Dit is een Level A-vereiste, wat betekent dat het de basis vormt voor toegankelijke toetsenbordnavigatie.
Wat Deze Regel Betekent
WCAG 2.4.1 Bypass Blocks stelt: "A mechanism is available to bypass blocks of content that are repeated on multiple Web pages." In praktische termen betekent dit dat elke verzameling links, navigatiemenu’s, banners of andere contentblokken die consequent op meerdere pagina’s verschijnt, een manier moet hebben waarmee gebruikers deze kunnen overslaan en direct naar de unieke inhoud van de huidige pagina kunnen springen.
De meest algemeen erkende implementatie is een skip navigation link — een ankerelement dat als allereerste focusbare item op de pagina wordt geplaatst en via een fragmentidentifier zoals #main-content naar het hoofdinhoudsgebied linkt. WCAG accepteert echter ook andere bypassmechanismen, waaronder correct gestructureerde landmark-regio’s (zoals HTML5-elementen <main>, <nav> en <header> of hun ARIA-equivalenten) en kopstructuren waarmee schermlezers gebruikers tussen secties kunnen laten springen.
Een pagina voldoet aan dit criterium wanneer ten minste één van de volgende punten waar is: er is een skiplink aanwezig en deze werkt; de pagina gebruikt betekenisvolle HTML5-landmarkelementen die door ondersteunende technologieën worden blootgesteld voor snelle navigatie; of een gelijkwaardige sneltoets op het toetsenbord of een navigatiemechanisme binnen de pagina stelt gebruikers in staat herhaalde blokken te omzeilen. De skiplink mag standaard visueel verborgen zijn, maar moet zichtbaar worden bij toetsenbordfocus, en moet de toetsenbordfocus daadwerkelijk naar het doel verplaatsen wanneer deze wordt geactiveerd — niet alleen het viewport laten scrollen.
Een pagina voldoet niet aan dit criterium wanneer: er geen skiplink, geen landmarkstructuur en geen ander mechanisme is; er een skiplink bestaat maar deze permanent verborgen is via display:none of visibility:hidden (waardoor hij niet focusbaar is); het doelanker van de skiplink niet in de DOM bestaat; of de link wel aanwezig is maar de focus niet verplaatst, waardoor toetsenbordgebruikers nog steeds gedwongen zijn om langs elk navigatie-item te tabben. WCAG erkent een uitzondering voor pagina’s waar geen herhaald blok is — bijvoorbeeld een enkelvoudig document zonder navigatieheader — maar deze uitzondering is beperkt en is zelden van toepassing op websites in de praktijk.
Waarom Het Belangrijk Is
Dit criterium heeft directe impact op verschillende groepen gebruikers. Gebruikers die uitsluitend het toetsenbord gebruiken — waaronder mensen met motorische beperkingen zoals RSI, verlamming of tremor — navigeren volledig door op Tab te drukken om tussen interactieve elementen te bewegen. Zonder bypassmechanisme moeten zij tientallen keren op Tab drukken om op elke pagina die zij bezoeken het eerste stuk unieke inhoud te bereiken. Een typische website-navigatiebalk met 10 tot 20 links, vermenigvuldigd met honderden paginaweergaven, wordt zo een aanzienlijke fysieke en tijdsbelasting.
Schermlezergebruikers die blind zijn of een beperkt gezichtsvermogen hebben, vertrouwen op landmark-regio’s en koppen om zich te oriënteren en tussen secties van een pagina te springen. Hoewel moderne schermlezers (JAWS, NVDA, VoiceOver) eigen sneltoetsen bieden voor het navigeren tussen landmarks en koppen, werken deze sneltoetsen alleen wanneer de pagina correct is gestructureerd. Een pagina zonder landmarks en zonder skiplink dwingt tot lineair lezen van elk element vanaf de bovenkant, inclusief herhaalde navigatie, telkens wanneer de pagina wordt geladen.
Denk aan een praktijksituatie: een slechtziende burger in Turkije die een e-overheidsportaal bezoekt om een belastingaangifte in te dienen. Het portaal heeft een bovenste navigatiebalk met 18 links, een kruimelpad met 4 links en een secundaire zijbalk met 12 links — in totaal 34 Tab-toetsaanslagen voordat de formuliervelden worden bereikt. Zonder bypassmechanisme moet deze gebruiker op elke pagina van het meerstapsproces alle 34 elementen doorlopen. Een correct geïmplementeerde skiplink reduceert dit tot één toetsaanslag.
Cognitieve toegankelijkheid is ook een factor: gebruikers met aandachtsgerelateerde aandoeningen profiteren ervan dat zij direct naar relevante inhoud kunnen gaan zonder herhaalde, afleidende navigatie-elementen te hoeven verwerken. Los van toegankelijkheid voor mensen met een beperking verbeteren goed gestructureerde landmark-regio’s ook de SEO, omdat zoekmachinecrawlers de documentstructuur gebruiken om de inhoudshiërarchie en relevantie te begrijpen. Toegankelijke navigatie-architectuur en een duidelijke landmarkstructuur dragen bij aan betere indexering en mogelijk hogere zoekresultaten.
Gerelateerde Axe-core-regels
- bypass: Deze regel controleert of de pagina een mechanisme biedt om herhaalde navigatieblokken te omzeilen. Axe inspecteert de pagina op de aanwezigheid van een skiplink die naar een bestaand anker binnen de pagina verwijst, op de aanwezigheid van ARIA-landmarkrollen (
role='main',role='navigation', enz.) of HTML5-landmarkelementen (<main>,<nav>,<header>,<footer>,<aside>), en op ARIA-attributenaria-labelofaria-labelledbydie meerdere landmarks van elkaar onderscheiden. De regel markeert een overtreding wanneer geen van deze mechanismen aanwezig is. Let op dat deze regel in sommige gevallen handmatige verificatie vereist — zo kan axe bijvoorbeeld detecteren dat er een skiplink bestaat, maar niet automatisch bevestigen dat deze bij activering de toetsenbordfocus naar de juiste locatie verplaatst. - skip-link: Deze regel richt zich specifiek op skiplinks en controleert of het doelelement waarnaar wordt verwezen door het
href-attribuut van een skiplink (bijv.#main-content) daadwerkelijk in de DOM bestaat en via het toetsenbord bereikbaar is. Als een skiplink naar een niet-bestaand ID verwijst, of als het doelelement niet focusbaar is (bijvoorbeeld omdat eentabindex-attribuut ontbreekt wanneer het een niet-interactief element is), markeert de regel een overtreding. Dit ondervangt de veelvoorkomende fout waarbij een skiplink in HTML wordt toegevoegd maar het bijbehorendeid-attribuut op het hoofdinhoudelement wordt vergeten. - tabindex: Deze regel markeert elementen met
tabindex-waarden groter dan 0, die een aangepaste tabvolgorde creëren die afwijkt van de natuurlijke DOM-volgorde. Hoeweltabindex='0'legitiem en noodzakelijk is om niet-interactieve elementen focusbaar te maken (zoals een skiplinkdoel<div>), verstoort het gebruik vantabindex='1',tabindex='2', enzovoort de verwachte Tab-volgorde op de hele pagina, wat bypassmechanismen onvoorspelbaar of ineffectief kan maken. Geautomatiseerde tools kunnen de aanwezigheid van positievetabindex-waarden detecteren, maar een menselijke tester moet verifiëren of de resulterende tabvolgorde logisch is en of de skiplink het eerste focusbare element in de volgorde blijft.
Hoe te Testen
- Geautomatiseerde scan: Voer axe DevTools (browserextensie) of Lighthouse (Chrome DevTools > Lighthouse > Accessibility) uit op de pagina. Let specifiek op overtredingen onder de regels
bypass,skip-linkentabindex. Filter in axe DevTools de resultaten op deze regel-ID’s. Controleer in Lighthouse de sectie "Navigation" van de toegankelijkheidsaudit. Noteer alle items met "Needs Review" — axe markeert sommige bypasscontroles als items die handmatige bevestiging vereisen. - Toetsenbordtest (alle browsers): Open de pagina in een browser zonder actieve schermlezer. Druk één keer op Tab. Bevestig dat het allereerste gefocuste element een skiplink is (deze kan nu visueel verschijnen als hij eerder buiten beeld was). Druk op Enter om de skiplink te activeren. Bevestig dat de toetsenbordfocus naar het hoofdinhoudsgebied is verplaatst — de volgende Tab-toetsaanslag moet het eerste interactieve element binnen de hoofdinhoud bereiken, niet de eerste navigatielink. Als de focus niet verplaatst, is de skiplink defect.
- NVDA + Firefox: Start NVDA en open de pagina in Firefox. Druk op de sneltoets Insert+F7 om de Elementenlijst te openen en op landmarks te controleren. Druk alternatief op D om tussen landmark-regio’s te springen en bevestig dat er een
main-landmark aanwezig is en duidelijk gelabeld is. Druk op H om per kop te navigeren en verifieer dat de kopstructuur de paginasecties herkenbaar maakt. Tab naar de skiplink en activeer deze met Enter, en bevestig vervolgens dat NVDA inhoud vanuit de main-regio aankondigt. - VoiceOver + Safari (macOS/iOS): Schakel VoiceOver in (Command+F5 op Mac). Gebruik de Rotor (Control+Option+U) om het Landmarks-menu te openen en verifieer dat benoemde landmark-regio’s verschijnen. Tab naar de skiplink en druk op Enter; bevestig dat VoiceOver direct na activering inhoud uit het hoofdinhoudsgebied voorleest. Gebruik op iOS het Rotor-gebaar om naar Landmarks te schakelen en veeg erdoorheen.
- JAWS + Chrome: Met JAWS actief, druk op Q om direct naar het main content-landmark te springen. Verifieer dat JAWS aankondigt dat de main-regio wordt betreden. Gebruik Insert+F3 om landmarks te tonen en bevestig passende labels. Tab vanaf het begin van de pagina en verifieer dat de skiplink als eerste wordt aangekondigd, met een toegankelijke naam zoals "Skip to main content."
- Verificatie van focustarget: Inspecteer de
href-waarde van de skiplink (bijv.#main-content). Gebruik de ontwikkelaarstools van je browser om te bevestigen dat er een element metid='main-content'in de DOM bestaat. Als dat element een<div>of een andere niet-interactieve container is, bevestig dan dat hettabindex='-1'heeft zodat het programmatisch focusbaar is zonder in de Tab-volgorde te worden opgenomen.
Hoe te Herstellen
Ontbrekende skiplink — Onjuist
<!-- 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>
Ontbrekende skiplink — Juist
<!-- 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>
Skiplink met niet-bestaand doel — Onjuist
<!-- 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>
Skiplink met niet-bestaand doel — Juist
<!-- 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>
Skiplink permanent verborgen — Onjuist
<!-- 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>
Skiplink permanent verborgen — Juist
<!-- 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>
Geen landmarkstructuur — Onjuist
<!-- 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>
Geen landmarkstructuur — Juist
<!-- 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>
Veelvoorkomende Fouten
- De skiplink verbergen met
display:noneofvisibility:hiddenin plaats van een off-screen CSS-techniek, waardoor deze zowel uit de visuele weergave als uit de toegankelijkheidsboom wordt verwijderd en volledig niet-functioneel wordt voor alle gebruikers. - Een skiplink toevoegen met
href='#main-content'maar het bijbehorende attribuutid='main-content'op het doelelement weglaten, waardoor de link niets doet wanneer deze wordt geactiveerd. - De skiplink laten verwijzen naar een niet-interactieve container (zoals een
<div>of<section>) zondertabindex='-1'toe te voegen, waardoor browsers wel de viewport scrollen maar de toetsenbordfocus niet naar het doel verplaatsen. - De skiplink ergens anders plaatsen dan als allereerste focusbare element in de DOM — bijvoorbeeld na het logo of na de eerste navigatielink — wat het doel ondermijnt, omdat gebruikers nog steeds langs content moeten tabben om de link te bereiken.
- Positieve
tabindex-waarden gebruiken (bijv.tabindex='1') ergens op de pagina, wat de tabvolgorde op onvoorspelbare manieren herorganiseert en de skiplink mogelijk van de verwachte eerste positie verplaatst. - Slechts één onbenoemde
<nav>-landmark opnemen wanneer de pagina meerdere navigatieregio’s heeft (primaire navigatie, kruimelpad, footernavigatie), waardoor schermlezergebruikers deze niet van elkaar kunnen onderscheiden met behulp van landmark-sneltoetsen. - Uitsluitend vertrouwen op landmarkstructuur zonder een skiplink te bieden, in de veronderstelling dat alle schermlezergebruikers landmark-sneltoetsen kennen en gebruiken — ziende toetsenbordgebruikers die geen schermlezer gebruiken hebben geen voordeel van alleen landmarks en zijn afhankelijk van een zichtbare skiplink.
- De volledige paginabody in één enkel
<main>-element wikkelen dat navigatie, headers en footers bevat, in plaats van<main>te beperken tot de unieke inhoud van de pagina. role='navigation'gebruiken op een<div>met navigatie zonder eenaria-labelte bieden wanneer er meerdere navigatielandmarks bestaan, waardoor schermlezers alleen "navigation" aankondigen zonder de regio’s van elkaar te kunnen onderscheiden.- De skiplink correct implementeren in een statisch HTML-prototype maar deze verliezen tijdens rendering door een JavaScript-framework (bijv. React, Angular, Vue) omdat de skiplinkcomponent niet in de rootlayout is opgenomen of voorwaardelijk wordt verwijderd tijdens client-side hydration.
Relatie met de Toegankelijkheidsregelgeving van Turkije
De Turkse Presidential Circular 2025/10, gepubliceerd in het Staatsblad nr. 32933 op 21 juni 2025, stelt verplichte toegankelijkheidseisen voor web en mobiel vast op basis van de conformiteitsstandaarden WCAG 2.1 niveau AA en WCAG 2.2 niveau A. WCAG 2.4.1 Bypass Blocks is een criterium op niveau A, waarmee het tot de meest fundamentele vereisten onder de Circulaire behoort — wat betekent dat het de ondergrens vormt waar geen enkele gedekte entiteit met haar digitale diensten onder mag komen.
De Circulaire heeft betrekking op een breed scala aan publieke en private entiteiten. Publieke instellingen — waaronder ministeries, gemeenten, overheidsinstanties en aan de overheid gelieerde organisaties — moeten binnen één jaar na de inwerkingtreding van de Circulaire volledige conformiteit bereiken. Private entiteiten die onder de regeling vallen, hebben een tweejarige nalevingstermijn. Gedekte categorieën in de private sector omvatten e-commerceplatforms, banken en financiële instellingen, ziekenhuizen en zorgaanbieders, telecomoperators met 200,000 of meer abonnees, reisbureaus, particuliere vervoersbedrijven en particuliere scholen die zijn gemachtigd door het Ministry of National Education (MoNE).
Voor deze entiteiten betekent het niet implementeren van WCAG 2.4.1 dat hun websites op het meest basale niveau niet aan de standaard voldoen. Een overheidsportaal, een onlinebankierplatform, een ziekenhuisafsprakensysteem of een e-commerce-checkoutflow zonder een functioneel skipnavigatiemechanisme is in directe strijd met de vereisten van de Circulaire. Gezien het feit dat toetsenbordnavigatie fundamenteel is voor gebruikers met motorische beperkingen en dat de bruikbaarheid van schermlezers sterk afhankelijk is van de landmarkstructuur, weegt dit criterium zwaar in toegankelijkheidsaudits en regelgevende beoordelingen.
Organisaties die interne toegankelijkheidsaudits uitvoeren of externe beoordelingen laten uitvoeren ter voorbereiding op naleving, moeten WCAG 2.4.1 behandelen als een item voor de eerste controle — een van de gemakkelijkste verbeteringen om te implementeren en een van de meest impactvolle voor gebruikers die afhankelijk zijn van toetsenbord- en ondersteunende technologie. Het niet aanpakken ervan kan in regelgevende beoordelingen specifiek worden aangehaald als een basale niet-conformiteit, wat mogelijk invloed heeft op de algehele nalevingsstatus van een organisatie onder de Circulaire.
