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.

Testez votre site gratuitement

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

Avant (non conforme)
<!-- 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>
Après (conforme)
<!-- 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 ?
Uniquement quand les éléments HTML natifs ne suffisent pas. La première règle d'ARIA est : « Si vous pouvez utiliser un élément HTML natif avec la sémantique et le comportement souhaités, faites-le plutôt que d'ajouter un rôle ARIA. » Utilisez ARIA pour les composants qui n'existent pas en HTML natif : onglets, accordéons, menus contextuels, modales, etc.
Comment vérifier que mes attributs ARIA sont corrects ?
Consultez le WAI-ARIA Authoring Practices Guide (APG) pour chaque composant. Il définit les rôles, propriétés et comportements clavier requis. Testez avec un lecteur d'écran (NVDA est gratuit) pour vérifier les annonces. Scrutia vérifie automatiquement la conformité des attributs ARIA lors de son audit des 106 critères RGAA.
aria-label et aria-labelledby : quelle différence ?
aria-label prend une chaîne de texte en valeur : <nav aria-label="Navigation principale">. aria-labelledby référence l'id d'un autre élément dont le texte sert d'étiquette : <section aria-labelledby="titre-section"><h2 id="titre-section">Nos services</h2></section>. Préférez aria-labelledby quand un titre visible existe déjà — il évite la duplication de texte.
Est-ce qu'un mauvais ARIA est pire que pas d'ARIA ?
Oui, dans la plupart des cas. Un ARIA incorrect crée des attentes fausses chez l'utilisateur de lecteur d'écran. Il s'attend à un comportement qui n'existe pas, ce qui est plus désorientant que l'absence totale d'information. Si vous n'êtes pas sûr de votre implémentation ARIA, il vaut mieux ne pas l'ajouter et utiliser les éléments HTML natifs.
Les frameworks React/Vue gèrent-ils automatiquement les ARIA ?
Non. React et Vue ne gèrent pas les attributs ARIA automatiquement. C'est au développeur d'ajouter les bons rôles, propriétés et comportements clavier. Certaines bibliothèques de composants (Radix UI, Headless UI, React Aria) fournissent des composants accessibles par défaut avec les ARIA correctement implémentés. Préférez ces bibliothèques aux composants faits maison.

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