Critères de succès WCAG · Level A
WCAG 2.4.1 : Contourner les blocs
WCAG 2.4.1 exige que les pages web fournissent un mécanisme permettant de passer les blocs de contenu répétés, comme les menus de navigation, afin que les utilisateurs de clavier et de technologies d’assistance puissent atteindre le contenu principal sans devoir parcourir chaque lien avec la touche de tabulation. Il s’agit d’une exigence de niveau A, ce qui signifie qu’elle constitue la base de la navigation accessible au clavier.
Ce que signifie cette règle
WCAG 2.4.1 Bypass Blocks stipule : « Un mécanisme est disponible pour contourner les blocs de contenu qui sont répétés sur plusieurs pages Web. » En pratique, cela signifie que tout ensemble de liens, menus de navigation, bannières ou autres blocs de contenu qui apparaissent de manière constante sur plusieurs pages doit offrir aux utilisateurs un moyen de les ignorer et d’accéder directement au contenu unique de la page actuelle.
L’implémentation la plus largement reconnue est un lien d’évitement de navigation — un élément d’ancrage placé comme tout premier élément focalisable de la page, pointant vers la zone de contenu principal via un identifiant de fragment tel que #main-content. Cependant, les WCAG acceptent également d’autres mécanismes de contournement, notamment des régions repères correctement structurées (comme les éléments HTML5 <main>, <nav> et <header> ou leurs équivalents ARIA) et des structures de titres qui permettent aux utilisateurs de lecteurs d’écran de passer d’une section à l’autre.
Une page répond à ce critère lorsque au moins une des conditions suivantes est remplie : un lien d’évitement est présent et fonctionnel ; la page utilise des éléments repères HTML5 significatifs que les technologies d’assistance exposent pour une navigation rapide ; ou un raccourci clavier équivalent ou un mécanisme de navigation interne à la page permet aux utilisateurs de contourner les blocs répétés. Le lien d’évitement peut être visuellement masqué par défaut, mais il doit devenir visible lorsque le clavier lui donne le focus, et il doit réellement déplacer le focus clavier vers la cible lorsqu’il est activé — et non simplement faire défiler la fenêtre d’affichage.
Une page ne répond pas à ce critère lorsqu’il n’y a ni lien d’évitement, ni structure de repères, ni autre mécanisme ; lorsqu’un lien d’évitement existe mais est définitivement masqué via display:none ou visibility:hidden (le rendant non focalisable) ; lorsque l’ancre cible du lien d’évitement n’existe pas dans le DOM ; ou lorsque le lien est présent mais ne déplace pas le focus, obligeant les utilisateurs au clavier à continuer de parcourir chaque élément de navigation. Les WCAG reconnaissent une exception pour les pages où il n’y a pas de bloc répété — par exemple, un document d’une seule page sans en-tête de navigation — mais cette exception est étroite et s’applique rarement aux sites Web du monde réel.
Pourquoi c’est important
Ce critère affecte directement plusieurs groupes d’utilisateurs. Les utilisateurs au clavier uniquement — y compris les personnes ayant des déficiences motrices telles que les troubles musculo-squelettiques, la paralysie ou les tremblements — naviguent entièrement en appuyant sur Tab pour se déplacer entre les éléments interactifs. Sans mécanisme de contournement, ils doivent appuyer des dizaines de fois sur Tab simplement pour atteindre le premier contenu unique de chaque page qu’ils visitent. Une barre de navigation typique avec 10 à 20 liens, multipliée par des centaines de visites de pages, devient une charge physique et temporelle significative.
Les utilisateurs de lecteurs d’écran qui sont aveugles ou malvoyants s’appuient sur les régions repères et les titres pour s’orienter et passer d’une section de la page à l’autre. Bien que les lecteurs d’écran modernes (JAWS, NVDA, VoiceOver) offrent leurs propres touches de raccourci pour naviguer entre repères et titres, ces raccourcis ne fonctionnent que lorsque la page est correctement structurée. Une page sans repères et sans lien d’évitement impose une lecture linéaire de chaque élément depuis le haut, y compris la navigation répétée, à chaque chargement de page.
Considérez un scénario réel : une personne malvoyante en Turquie visitant un portail de e-gouvernement pour déposer une déclaration d’impôts. Le portail comporte une barre de navigation supérieure avec 18 liens, un fil d’Ariane avec 4 liens et une barre latérale secondaire avec 12 liens — soit un total de 34 pressions sur Tab avant d’atteindre les champs du formulaire. Sans mécanisme de contournement, cette personne doit parcourir les 34 éléments sur chaque page du processus en plusieurs étapes. Un lien d’évitement correctement implémenté réduit cela à une seule pression de touche.
L’accessibilité cognitive est également un facteur : les utilisateurs ayant des troubles de l’attention bénéficient de la possibilité d’accéder directement au contenu pertinent sans devoir traiter des éléments de navigation répétés et distrayants. Au-delà de l’accès pour les personnes handicapées, des régions repères bien structurées améliorent le SEO, car les robots des moteurs de recherche utilisent la structure du document pour comprendre la hiérarchie et la pertinence du contenu. Une architecture de navigation accessible et une structure de repères claire contribuent à un meilleur indexage et potentiellement à un meilleur classement dans les résultats de recherche.
Règles Axe-core associées
- bypass : Cette règle vérifie si la page fournit un mécanisme permettant de contourner les blocs de navigation répétés. Axe inspecte la page pour détecter la présence d’un lien d’évitement ciblant une ancre interne existante, la présence de rôles repères ARIA (
role='main',role='navigation', etc.) ou d’éléments repères HTML5 (<main>,<nav>,<header>,<footer>,<aside>), ainsi que des attributs ARIAaria-labelouaria-labelledbyqui rendent plusieurs repères distinguables. La règle signale une violation lorsque aucun de ces mécanismes n’est présent. Notez que cette règle nécessite une vérification manuelle dans certains cas — par exemple, axe peut détecter qu’un lien d’évitement existe mais ne peut pas confirmer automatiquement qu’il déplace le focus clavier au bon endroit lorsqu’il est activé. - skip-link : Cette règle cible spécifiquement les liens d’évitement et vérifie si l’élément cible référencé par l’attribut
hrefdu lien d’évitement (par exemple,#main-content) existe réellement dans le DOM et est accessible au focus clavier. Si un lien d’évitement pointe vers un ID inexistant, ou si l’élément cible n’est pas focalisable (absence d’attributtabindexlorsqu’il s’agit d’un élément non interactif), la règle signale une violation. Cela permet de détecter l’erreur courante qui consiste à ajouter un lien d’évitement en HTML mais à oublier d’ajouter l’attributidcorrespondant à l’élément de contenu principal. - tabindex : Cette règle signale les éléments avec des valeurs de
tabindexsupérieures à 0, qui créent un ordre de tabulation personnalisé s’écartant de l’ordre naturel du DOM. Bien quetabindex='0'soit légitime et nécessaire pour rendre focalisables des éléments non interactifs (comme la cible d’un lien d’évitement sur un<div>), l’utilisation detabindex='1',tabindex='2', etc. perturbe la séquence Tab attendue sur l’ensemble de la page, ce qui peut rendre les mécanismes de contournement imprévisibles ou inefficaces. Les outils automatisés peuvent détecter la présence de valeurs detabindexpositives, mais un testeur humain doit vérifier si l’ordre de tabulation qui en résulte a un sens logique et si le lien d’évitement reste le premier élément focalisable de la séquence.
Comment tester
- Analyse automatisée : Exécutez axe DevTools (extension de navigateur) ou Lighthouse (Chrome DevTools > Lighthouse > Accessibility) sur la page. Recherchez spécifiquement les violations des règles
bypass,skip-linkettabindex. Dans axe DevTools, filtrez les résultats par ces identifiants de règles. Dans Lighthouse, consultez la section « Navigation » de l’audit d’accessibilité. Notez tout élément « Needs Review » — axe marque certains contrôles de contournement comme nécessitant une confirmation manuelle. - Test au clavier (tous navigateurs) : Ouvrez la page dans un navigateur sans lecteur d’écran actif. Appuyez une fois sur Tab. Vérifiez que le tout premier élément recevant le focus est un lien d’évitement (il peut apparaître visuellement à ce moment s’il était auparavant hors écran). Appuyez sur Entrée pour activer le lien d’évitement. Vérifiez que le focus clavier a été déplacé vers la zone de contenu principal — la pression suivante sur Tab doit atteindre le premier élément interactif à l’intérieur du contenu principal, et non le premier lien de navigation. Si le focus ne se déplace pas, le lien d’évitement est défectueux.
- NVDA + Firefox : Lancez NVDA et ouvrez la page dans Firefox. Appuyez sur le raccourci Insert+F7 pour ouvrir la liste des éléments et vérifier la présence de repères. Vous pouvez aussi appuyer sur D pour passer d’une région repère à l’autre et confirmer qu’un repère
mainest présent et clairement étiqueté. Appuyez sur H pour naviguer par titres et vérifier que la structure de titres rend les sections de la page identifiables. Placez le focus sur le lien d’évitement avec Tab, activez-le avec Entrée, puis vérifiez que NVDA annonce du contenu à l’intérieur de la région principale. - VoiceOver + Safari (macOS/iOS) : Activez VoiceOver (Commande+F5 sur Mac). Utilisez le Rotor (Contrôle+Option+U) pour ouvrir le menu des repères et vérifiez que des régions repères nommées apparaissent. Placez le focus sur le lien d’évitement avec Tab et appuyez sur Entrée ; vérifiez que VoiceOver lit le contenu de la zone de contenu principal immédiatement après l’activation. Sur iOS, utilisez le geste du Rotor pour passer aux repères et faites-les défiler par balayage.
- JAWS + Chrome : Avec JAWS actif, appuyez sur Q pour passer directement au repère de contenu principal. Vérifiez que JAWS annonce l’entrée dans la région principale. Utilisez Insert+F3 pour lister les repères et confirmer la pertinence des libellés. Parcourez la page depuis le début avec Tab et vérifiez que le lien d’évitement est annoncé en premier, avec un nom accessible tel que « Skip to main content ».
- Vérification de la cible du focus : Inspectez la valeur de l’attribut
hrefdu lien d’évitement (par exemple,#main-content). Utilisez les outils de développement de votre navigateur pour confirmer qu’un élément avecid='main-content'existe dans le DOM. Si cet élément est un<div>ou un autre conteneur non interactif, vérifiez qu’il possèdetabindex='-1'afin de le rendre focalisable par programmation sans l’insérer dans l’ordre naturel de tabulation.
Comment corriger
Lien d’évitement manquant — Incorrect
<!-- 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>
Lien d’évitement manquant — Correct
<!-- 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>
Lien d’évitement avec cible inexistante — Incorrect
<!-- 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>
Lien d’évitement avec cible inexistante — Correct
<!-- 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>
Lien d’évitement définitivement masqué — Incorrect
<!-- 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>
Lien d’évitement définitivement masqué — Correct
<!-- 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>
Absence de structure de repères — Incorrect
<!-- 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>
Absence de structure de repères — Correct
<!-- 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>
Erreurs courantes
- Masquer le lien d’évitement avec
display:noneouvisibility:hiddenau lieu d’une technique CSS hors écran, ce qui le retire à la fois de l’affichage visuel et de l’arborescence d’accessibilité, le rendant totalement non fonctionnel pour tous les utilisateurs. - Ajouter un lien d’évitement avec
href='#main-content'mais omettre l’attribut correspondantid='main-content'sur l’élément cible, ce qui fait que le lien ne fait rien lorsqu’il est activé. - Pointer le lien d’évitement vers un conteneur non interactif (comme un
<div>ou une<section>) sans ajoutertabindex='-1', ce qui signifie que les navigateurs feront défiler la fenêtre d’affichage mais ne déplaceront pas le focus clavier vers la cible. - Placer le lien d’évitement ailleurs que comme tout premier élément focalisable dans le DOM — par exemple, après le logo ou après le premier lien de navigation — ce qui va à l’encontre de son objectif puisque les utilisateurs doivent tout de même passer sur du contenu avec Tab pour l’atteindre.
- Utiliser des valeurs positives de
tabindex(par exemple,tabindex='1') n’importe où sur la page, ce qui réorganise l’ordre de tabulation de manière imprévisible et peut déplacer le lien d’évitement de sa position attendue en premier. - Inclure un seul repère
<nav>non nommé alors que la page comporte plusieurs zones de navigation (navigation principale, fil d’Ariane, navigation de pied de page), ce qui empêche les utilisateurs de lecteurs d’écran de les distinguer à l’aide des raccourcis de navigation par repères. - Se reposer uniquement sur la structure de repères sans fournir de lien d’évitement, en supposant que tous les utilisateurs de lecteurs d’écran connaissent et utilisent les raccourcis de repères — les utilisateurs voyants au clavier qui n’utilisent pas de lecteurs d’écran ne tirent aucun bénéfice des repères seuls et dépendent d’un lien d’évitement visible.
- Envelopper l’ensemble du corps de la page dans un seul élément
<main>qui inclut la navigation, les en-têtes et les pieds de page, plutôt que de limiter<main>au contenu unique de la page. - Utiliser
role='navigation'sur un<div>contenant la navigation sans fournir d’aria-labellorsqu’il existe plusieurs repères de navigation, ce qui fait que les lecteurs d’écran annoncent simplement « navigation » sans moyen de différencier les régions. - Implémenter correctement le lien d’évitement dans un prototype HTML statique mais le perdre lors du rendu par un framework JavaScript (par exemple, React, Angular, Vue) parce que le composant de lien d’évitement n’est pas inclus dans le layout racine ou est supprimé de manière conditionnelle lors de l’hydratation côté client.
Lien avec la réglementation d’accessibilité de la Turquie
La Circulaire présidentielle 2025/10 de la Turquie, publiée au Journal officiel n° 32933 le 21 juin 2025, établit des exigences obligatoires d’accessibilité Web et mobile basées sur les normes de conformité WCAG 2.1 niveau AA et WCAG 2.2 niveau A. WCAG 2.4.1 Bypass Blocks est un critère de niveau A, ce qui le place parmi les exigences les plus fondamentales de la Circulaire — cela signifie qu’il représente le seuil en dessous duquel les services numériques d’aucune entité couverte ne peuvent se situer.
La Circulaire couvre un large éventail d’entités des secteurs public et privé. Les institutions publiques — y compris les ministères, municipalités, agences d’État et organismes affiliés au gouvernement — doivent atteindre une conformité totale dans un délai d’un an à compter de la date d’entrée en vigueur de la Circulaire. Les entités du secteur privé soumises à la réglementation disposent d’un délai de deux ans pour se mettre en conformité. Les catégories du secteur privé couvertes incluent les plateformes de e-commerce, les banques et institutions financières, les hôpitaux et prestataires de soins de santé, les opérateurs de télécommunications comptant 200,000 abonnés ou plus, les agences de voyage, les entreprises de transport privé et les écoles privées autorisées par le ministère de l’Éducation nationale (MoNE).
Pour ces entités, le fait de ne pas implémenter WCAG 2.4.1 signifie que leurs sites Web ne sont pas conformes au niveau le plus élémentaire de la norme. Un portail gouvernemental, une plateforme de banque en ligne, un système de prise de rendez-vous hospitaliers ou un parcours de paiement e-commerce dépourvu de mécanisme fonctionnel de lien d’évitement de navigation est en violation directe des exigences de la Circulaire. Étant donné que la navigation au clavier est fondamentale pour les utilisateurs ayant des handicaps moteurs et que l’utilisabilité avec lecteur d’écran dépend fortement de la structure des repères, ce critère a un poids important dans les audits d’accessibilité et les évaluations réglementaires.
Les organisations qui réalisent des audits internes d’accessibilité ou commandent des évaluations à des tiers en vue de la conformité devraient traiter WCAG 2.4.1 comme un élément de première passe — l’un des gains les plus faciles à mettre en œuvre et l’un des plus impactants pour les utilisateurs qui dépendent du clavier et des technologies d’assistance. Le fait de ne pas le traiter peut être cité spécifiquement dans les examens réglementaires comme une non-conformité de base, susceptible d’affecter le statut global de conformité d’une organisation au regard de la Circulaire.
