Skip to main content
Les problèmes d’accessibilité affectent les utilisateurs qui dépendent des technologies d’assistance — lecteurs d’écran, navigation au clavier, contrôle vocal et loupes d’écran. Dans de nombreuses juridictions, la conformité à l’accessibilité web est légalement obligatoire.

missing-form-labels

Moyen WCAG 1.3.1, 2.4.6

Description

Les éléments de saisie de formulaire n’ont pas d’étiquette associée, rendant leur purpose peu clair pour les lecteurs d’écran et les technologies d’assistance.

Importance

Les utilisateurs de lecteurs d’écran naviguent dans les formulaires en parcourant les champs étiquetés. Un champ sans étiquette est annoncé comme « champ de texte » ou « zone de saisie » sans indication de son purpose. Cela rend le formulaire pratiquement inutilisable sans la vue.

Comment QAOS le détecte

L’agent analyse le DOM pour les éléments <input>, <textarea> et <select> qui n’ont pas de <label> associé (via le couplage for/id), d’attribut aria-label ou aria-labelledby.

Exemples

<!-- Étiquette manquante -->
<input type="email" name="email" placeholder="Saisir l'email">

<!-- Correct : étiquette explicite -->
<label for="email">Adresse email</label>
<input type="email" id="email" name="email">

<!-- Correct : aria-label -->
<input type="search" aria-label="Rechercher des produits">

Comment corriger

Associez chaque champ de formulaire à une étiquette visible via <label for="...">, ou fournissez un nom accessible via aria-label ou aria-labelledby. Le texte d’espace réservé n’est pas un substitut à une étiquette.

button-no-text

Moyen WCAG 4.1.2

Description

Les boutons n’ont pas de texte visible, rendant leur purpose ambigu pour tous les utilisateurs — surtout ceux qui ne peuvent pas voir les icônes ou qui utilisent des lecteurs d’écran.

Comment QAOS le détecte

L’agent capture une capture d’écran et identifie les boutons qui ne contiennent pas de texte visible — y compris les boutons avec icône uniquement où l’icône n’a pas d’étiquette accessible.

Exemples

<!-- Bouton vide — aucune indication de purpose -->
<button type="submit"></button>

<!-- Bouton icône sans nom accessible -->
<button><svg>...</svg></button>

<!-- Correct : bouton icône avec étiquette accessible -->
<button aria-label="Supprimer l'élément"><svg>...</svg></button>

Comment corriger

Pour les boutons avec icône uniquement, ajoutez un aria-label avec une action descriptive. Pour les boutons avec texte masqué, utilisez CSS sr-only ou aria-label au lieu de display:none :
<button aria-label="Sauvegarder le document">
  <svg>...</svg>
</button>

missing-alt-text

Moyen WCAG 1.1.1

Description

Les éléments <img> n’ont pas d’attribut alt du tout. Cela est distinct d’un alt="" vide — un attribut alt manquant amène les lecteurs d’écran à annoncer le nom de fichier de l’image à la place.

Comment QAOS le détecte

L’agent analyse le DOM pour les éléments <img> où l’attribut alt est complètement absent.

Exemples

<!-- Alt manquant — le lecteur d'écran annonce le nom du fichier -->
<img src="company-logo.png">

<!-- Correct : alt descriptif -->
<img src="company-logo.png" alt="Acme Corporation">

<!-- Correct : image décorative (alt vide) -->
<img src="divider.png" alt="">

Comment corriger

Ajoutez un attribut alt à chaque élément <img>. Pour les images qui transmettent des informations, rédigez une description concise. Pour les images purement décoratives, utilisez alt="" (chaîne vide) pour indiquer aux lecteurs d’écran de les ignorer.

empty-alt-informative-image

Faible WCAG 1.1.1

Description

Des images avec un attribut alt="" vide qui transmettent réellement des informations significatives — telles que des graphiques, des infographies ou des photos de produits dont l’utilisateur a besoin pour comprendre le contenu.

Comment QAOS le détecte

L’agent identifie les éléments <img alt=""> et utilise une analyse basée sur LLM pour déterminer si l’image semble transmettre des informations (basée sur le nom de fichier, le contexte environnant et le contenu de l’image).

Exemples

<!-- Image informative incorrectement marquée comme décorative -->
<img src="revenue-chart-2024.png" alt="">
<img src="product-photo.jpg" alt="">

Comment corriger

Fournissez un texte alt descriptif pour les images informatives. Réservez alt="" aux images véritablement décoratives :
<img src="revenue-chart-2024.png" alt="Graphique des revenus montrant une croissance de 40 % au T3 2024">

insufficient-color-contrast

Moyen WCAG 1.4.3

Description

Les éléments de texte ont un ratio de contraste couleur premier plan/arrière-plan inférieur au minimum WCAG de 4,5:1 pour le texte normal (3:1 pour le grand texte). Cela rend le texte difficile ou impossible à lire pour les utilisateurs avec une faible vision ou un daltonisme.

Comment QAOS le détecte

L’agent calcule le ratio de contraste réel entre les couleurs du texte et de l’arrière-plan à partir des styles CSS calculés et signale tout texte en dessous du seuil.

Exemples

/* Échec : gris clair sur blanc — ratio ~2,8:1 */
color: #999999;
background: #ffffff;

/* Réussite : gris foncé sur blanc — ratio ~7:1 */
color: #595959;
background: #ffffff;

Comment corriger

Utilisez un outil de vérification du contraste (WebAIM Contrast Checker) pour vérifier toutes les combinaisons texte/arrière-plan. Visez au moins 4,5:1 pour le corps du texte et 3:1 pour le grand texte (18pt+ ou 14pt+ gras).

text-too-small

Moyen WCAG 1.4.4

Description

Le texte a une taille de police inférieure à 14 pixels, le rendant difficile à lire — surtout pour les utilisateurs plus âgés, les utilisateurs avec une faible vision ou les utilisateurs sur des écrans haute densité.

Comment QAOS le détecte

L’agent calcule la taille de police rendue de tous les nœuds de texte à partir du CSS calculé et signale tout ce qui est inférieur à 14px.

Comment corriger

Définissez une taille de police minimale de 14px pour tout le corps du texte. Utilisez des unités relatives (em, rem) plutôt que des pixels afin que les utilisateurs puissent mettre le texte à l’échelle avec les paramètres du navigateur :
body { font-size: 1rem; }       /* 16px par défaut */
.caption { font-size: 0.875rem; } /* 14px */

not-keyboard-reachable

Élevé WCAG 2.1.1

Description

Les éléments interactifs — éléments qui répondent aux événements de clic — ne peuvent pas être atteints par tabulation au clavier. Cela affecte les éléments <div> ou <span> utilisés comme boutons, les menus déroulants personnalisés et tout composant interactif non natif qui manque d’attribut tabindex.

Importance

Les utilisateurs qui ne peuvent pas utiliser une souris (handicaps moteurs, utilisateurs avancés, navigateurs au clavier) dépendent entièrement de la touche Tab pour atteindre les éléments interactifs. Un élément inatteignable est complètement inaccessible pour eux.

Comment QAOS le détecte

L’agent identifie les éléments avec des gestionnaires de clic ou des rôles interactifs qui ne sont pas nativement focalisables (pas un <button>, <a>, <input>, etc.) et vérifie s’ils ont tabindex ou un rôle ARIA approprié.

Exemples

<!-- Inatteignable : div avec gestionnaire de clic, pas de tabindex -->
<div onclick="openModal()">Ouvrir les paramètres</div>

<!-- Correct : élément button (nativement focalisable) -->
<button onclick="openModal()">Ouvrir les paramètres</button>

<!-- Correct : div avec tabindex et rôle -->
<div role="button" tabindex="0" onclick="openModal()">Ouvrir les paramètres</div>

Comment corriger

Utilisez des éléments HTML natifs (<button>, <a>, <input>) partout où c’est possible — ils sont focalisables par défaut. Pour les éléments interactifs personnalisés, ajoutez tabindex="0" et le role ARIA approprié.

not-keyboard-activatable

Élevé WCAG 2.1.1

Description

Des éléments qui peuvent être focalisés via le clavier (soit nativement soit via tabindex) mais qui ne peuvent pas être activés avec une saisie au clavier. Typiquement des éléments personnalisés de type bouton qui ne répondent qu’aux clics de souris, pas à Entrée ou Espace.

Comment QAOS le détecte

L’agent se déplace par tabulation vers les éléments focalisables et appuie sur Entrée et Espace, vérifiant si l’élément répond de la même façon qu’un clic de souris.

Exemples

<!-- Focalisable mais non activable au clavier -->
<div tabindex="0" onclick="handleAction()">Cliquez-moi</div>

Comment corriger

Ajoutez des gestionnaires d’événements clavier aux éléments interactifs personnalisés :
element.addEventListener('keydown', (e) => {
  if (e.key === 'Enter' || e.key === ' ') {
    e.preventDefault()
    handleAction()
  }
})
Ou mieux, remplacez l’élément personnalisé par un <button> natif qui gère cela automatiquement.

missing-focus-indicator

Moyen WCAG 2.4.7

Description

Les éléments interactifs ont leur anneau de focus par défaut supprimé via CSS (outline: none ou outline: 0) sans indicateur de focus alternatif fourni.

Importance

Les utilisateurs au clavier ont besoin de savoir quel élément est actuellement focalisé. Sans indicateur de focus visible, la navigation au clavier devient une navigation aveugle.

Comment QAOS le détecte

L’agent se déplace par tabulation vers les éléments interactifs et capture une capture d’écran, utilisant une analyse basée sur LLM pour déterminer si un indicateur de focus visible est présent.

Comment corriger

N’utilisez jamais outline: none sans fournir un style de focus alternatif :
/* Ne faites pas cela */
:focus { outline: none; }

/* Faites cela à la place */
:focus-visible {
  outline: 2px solid #8265fd;
  outline-offset: 2px;
}

color-only-distinction

Élevé WCAG 1.4.1

Description

Des informations critiques sont transmises en utilisant la couleur comme seul différenciateur visuel — aucune étiquette texte, symbole, icône, motif ou différence de forme n’accompagne l’indice de couleur.

Importance

Environ 8 % des hommes et 0,5 % des femmes ont une forme de déficience de la vision des couleurs. Quand la couleur est le seul indicateur de sens (ex. : une bordure rouge signifiant « obligatoire »), ces utilisateurs ne reçoivent aucune information. Cela affecte tous les utilisateurs daltoniens, ainsi que les utilisateurs sur des écrans monochromes.

Comment QAOS le détecte

L’agent capture une capture d’écran et analyse les éléments où la couleur semble être le seul facteur distinctif — par exemple, les champs obligatoires marqués uniquement avec une bordure rouge et sans astérisque, texte ou icône.

Exemples

<!-- Seule la couleur distingue le champ obligatoire — inaccessible -->
<input type="text" style="border-color: red;">

<!-- Correct : couleur + marqueur texte -->
<label>Nom <span aria-hidden="true" style="color: red;">*</span></label>
<input type="text" aria-required="true">

Comment corriger

Combinez toujours la couleur avec au moins un autre indice visuel — texte, icône, motif ou forme :
  • Champs obligatoires : ajoutez un astérisque ou le texte « obligatoire »
  • Indicateurs d’état : ajoutez des étiquettes textuelles (« Erreur », « Succès », « Avertissement »)
  • Graphiques : utilisez des motifs ou des étiquettes directes en plus du codage couleur

image-as-text

Moyen WCAG 1.4.5

Description

Du texte significatif est rendu comme une image rastérisée (PNG, JPG, GIF) plutôt que comme du texte HTML réel. Cela rend le texte non zoomable, non recherchable, impossible à restyliser et souvent absent de la sortie du lecteur d’écran.

Importance

Les utilisateurs qui ont besoin de zoomer le texte, d’ajuster la taille de police, de changer le contraste ou de copier le texte ne peuvent pas le faire quand le « texte » est en réalité une image de pixels. Les moteurs de recherche ne peuvent pas non plus indexer le texte des images, réduisant la découvrabilité.

Comment QAOS le détecte

L’agent capture une capture d’écran et utilise l’analyse visuelle pour identifier les images qui semblent contenir du texte significatif — tels que les titres, les messages promotionnels ou les étiquettes de navigation — sans alternative textuelle lisible équivalente.

Comment corriger

Remplacez le texte basé sur des images par du texte HTML stylisé. Utilisez CSS pour les polices personnalisées, les couleurs et les effets visuels. Si un logo ou une marque doit être une image, fournissez un attribut alt descriptif.

iframe-missing-title

Moyen WCAG 4.1.2

Description

Un élément <iframe> n’a pas d’attribut title, rendant impossible pour les utilisateurs de lecteurs d’écran de comprendre le purpose du contenu intégré avant de décider d’y entrer.

Importance

Les lecteurs d’écran annoncent les iframes par leur titre avant de permettre à l’utilisateur d’y entrer. Sans titre, l’iframe est annoncé comme « frame » sans indication de ce qu’il contient — forçant les utilisateurs à entrer et explorer juste pour comprendre le contexte.

Comment QAOS le détecte

L’agent analyse le DOM pour les éléments <iframe> sans attribut title.

Exemples

<!-- Pas de titre — le lecteur d'écran annonce "frame" -->
<iframe src="payment.html" width="600" height="400"></iframe>

<!-- Correct : titre descriptif -->
<iframe src="payment.html" title="Formulaire de paiement sécurisé" width="600" height="400"></iframe>

Comment corriger

Ajoutez un attribut title concis et descriptif à chaque <iframe> :
<iframe src="map-embed.html" title="Carte montrant l'emplacement de notre bureau"></iframe>
<iframe src="video-player.html" title="Vidéo de démonstration du produit"></iframe>