Contexte et enjeux

Le rapport WebAIM Million 2026 indique que 16,2 % des images des un million de pages d’accueil n’ont aucun attribut alt. Parmi les images munies d’un alt, 10,8 % utilisent des valeurs génériques ou dupliquées, comme alt="image" ou le nom de fichier. Ainsi, plus d’un quart des images affichées sur les sites les plus visités présentent un texte alternatif manquant, vague ou copié. Les outils automatisés détectent l’absence d’attribut, mais ne jugent pas la pertinence du texte fourni, ce qui conduit à des faux positifs lorsqu’une règle trop stricte serait appliquée.

Règles déterministes et détection de répétition

Le plugin GitHub Accessibility Scanner s’appuie sur cinq règles sans appel réseau : absence ou chaîne vide, nom de fichier, placeholder (TODO, tbd), mot générique (image, logo, chart) et répétition d’un même alt sur des images adjacentes. Ces règles sont purement syntaxiques ; elles ne nécessitent aucune connaissance du contenu visuel. La règle de répétition a d’abord été implémentée en parcourant les images dans l’ordre du DOM, ce qui a généré des signalements erronés lorsque deux logos identiques étaient séparés visuellement (ex. logo du pied de page et du header). Le correctif repose sur la géométrie des boîtes englobantes : deux images sont considérées comme adjacentes si l’écart maximal entre leurs bords est inférieur à un facteur du plus grand côté. Le calcul est illustré ci‑dessous :

const gap = Math.max(horizontalGap, verticalGap)
const largerDim = Math.max(
    a.boundingBox.width, a.boundingBox.height,
    b.boundingBox.width, b.boundingBox.height)
return gap > GAP_MULTIPLIER * largerDim
Le multiplicateur GAP_MULTIPLIER reste un paramètre empirique, ajusté à partir de pages réelles plutôt que dérivé d’une spécification.

Intégration d'un modèle de vision

Une règle optionnelle envoie le alt, le contexte textuel (titre, en‑tête le plus proche, <figcaption>, présence de lien) et l’image à un modèle de vision hébergé par GitHub Models. Le modèle reçoit jusqu’à 600 caractères de texte environnant et peut distinguer quatre états : décoratif, redondant avec une légende, fonctionnel (lien) ou informatif. La première version proposait systématiquement une amélioration du texte, même lorsque l’alternative était déjà adéquate, ce qui saturait les rapports. Trois ajustements ont résolu le problème : un processus décisionnel séquentiel qui s’arrête dès qu’une condition correspond, des règles anti‑nitpick qui respectent la formulation de l’auteur, et une sortie structurée contraignant le modèle à choisir un seul état parmi les quatre.

Limites et perspectives

Les règles déterministes offrent une détection fiable mais ne couvrent que les cas où le texte est objectivement invalide. Les scénarios où la pertinence dépend du contexte visuel restent hors de portée sans modèle. Le paramètre de proximité spatiale n’est pas normalisé ; il peut varier selon la densité de mise en page et nécessite un calibrage continu. De plus, le plugin ne différencie pas les images qui sont le seul contenu d’un lien, ce qui peut conduire le modèle à interpréter à tort un alt comme décoratif. Malgré ces contraintes, l’approche hybride montre qu’une combinaison de règles simples et d’intelligence artificielle peut réduire le bruit des vérifications automatisées tout en conservant la confiance des développeurs.