Attributs ARIA incorrects ou manquants
Le problème
Les attributs ARIA (Accessible Rich Internet Applications) permettent de rendre les composants web dynamiques accessibles aux technologies d'assistance. Le critère 7.1 du RGAA exige que chaque script soit compatible avec les technologies d'assistance, ce qui implique une utilisation correcte des attributs ARIA quand les éléments HTML natifs ne suffisent pas. Le problème des ARIA incorrects est multiple et prend de nombreuses formes. L'utilisation d'un role incorrect est la première erreur : attribuer role="button" à un élément qui se comporte comme un lien, ou role="menu" à une simple liste de liens de navigation. Chaque rôle ARIA implique des comportements et des interactions clavier spécifiques définis par le WAI-ARIA Authoring Practices Guide. Un role="menu" implique que les flèches directionnelles permettent de naviguer entre les items, que Entrée active l'item sélectionné, et que Échap ferme le menu. Si ces comportements ne sont pas implémentés, le rôle ARIA est menteur et désoriente l'utilisateur. L'absence d'attributs ARIA obligatoires est une autre erreur courante. Un composant onglet (role="tablist") doit inclure role="tab" sur chaque onglet, role="tabpanel" sur chaque panneau, aria-selected pour indiquer l'onglet actif, aria-controls pour lier chaque onglet à son panneau, et aria-labelledby pour lier chaque panneau à son onglet. Omettre un seul de ces attributs brise l'expérience du lecteur d'écran. La première règle d'ARIA est de ne pas l'utiliser si un élément HTML natif fait le travail. Un button HTML est toujours préférable à un div role="button". Un select HTML est toujours préférable à un div role="listbox" custom. L'ARIA n'ajoute pas de fonctionnalité native — il ne fait qu'annoncer des informations aux technologies d'assistance. Si le comportement sous-jacent n'est pas implémenté, l'ARIA crée une expérience pire que son absence.
Votre site a-t-il ce problème ?
106 critères RGAA analysés en 5 minutes par notre IA.
Impact sur les utilisateurs
Les attributs ARIA incorrects créent une dissonance entre ce que le lecteur d'écran annonce et ce que le composant fait réellement. Si un lecteur d'écran annonce « menu, 5 éléments » mais que les flèches directionnelles ne fonctionnent pas, l'utilisateur aveugle est désorienté. Il s'attend à un comportement qui n'existe pas. C'est pire que l'absence d'ARIA, car sans ARIA le lecteur d'écran annoncerait simplement des liens — et l'utilisateur saurait comment interagir avec eux. Les attributs aria-expanded, aria-selected, et aria-checked incorrects sont particulièrement problématiques : ils indiquent un état (ouvert/fermé, sélectionné/non sélectionné) qui ne reflète pas la réalité. L'utilisateur croit qu'un menu est fermé alors qu'il est ouvert, ou qu'une case est cochée alors qu'elle ne l'est pas. Les ARIA mal implémentés sont une cause fréquente d'échec aux audits d'accessibilité car ils démontrent une tentative de conformité sans la rigueur nécessaire.
Exemple de code
<!-- Menu avec ARIA incorrect -->
<div role="menu">
<a href="/accueil">Accueil</a>
<a href="/produits">Produits</a>
<a href="/contact">Contact</a>
</div>
<!-- Onglets incomplets -->
<div>
<button aria-selected="true">Onglet 1</button>
<button>Onglet 2</button>
</div>
<div>Contenu onglet 1</div>
<div style="display:none">Contenu onglet 2</div><!-- Navigation simple : pas besoin de role="menu" -->
<nav aria-label="Navigation principale">
<ul>
<li><a href="/accueil">Accueil</a></li>
<li><a href="/produits">Produits</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</nav>
<!-- Onglets avec ARIA complet -->
<div role="tablist" aria-label="Sections">
<button role="tab" id="tab-1" aria-selected="true"
aria-controls="panel-1">Onglet 1</button>
<button role="tab" id="tab-2" aria-selected="false"
aria-controls="panel-2" tabindex="-1">Onglet 2</button>
</div>
<div role="tabpanel" id="panel-1" aria-labelledby="tab-1">
Contenu onglet 1
</div>
<div role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>
Contenu onglet 2
</div>Questions fréquentes
Quand doit-on utiliser les attributs ARIA ?
Comment vérifier que mes attributs ARIA sont corrects ?
aria-label et aria-labelledby : quelle différence ?
Est-ce qu'un mauvais ARIA est pire que pas d'ARIA ?
Les frameworks React/Vue gèrent-ils automatiquement les ARIA ?
Votre site a-t-il ce problème ?
Scrutia audite votre site sur 106 critères RGAA en 5 minutes. Navigation clavier, composants ARIA, focus visible, contrastes, et bien plus.
Lancer un audit gratuit