cd /news/developer-tools/un-relecteur-a-trouve-trois-criteres… · home topics developer-tools article
[ARTICLE · art-93451] src=dev.to ↗ pub= topic=developer-tools verified=true sentiment=· neutral

Un relecteur a trouvé trois critères WCAG erronés dans mon extension d'accessibilité. J'ai vérifié, et j'en ai trouvé huit.

A developer's WordPress accessibility scanner was rejected by a marketplace reviewer who found three incorrect WCAG criteria. Upon checking all 25 rules, the developer discovered eight were wrong, including misattributions to removed or inapplicable success criteria. The developer corrected the issues and updated the scanner to align with WCAG 2.2 and axe-core classifications.

read7 min views1 publishedAug 12, 2026

Je développe un scanner d'accessibilité pour WordPress. La semaine dernière, le

relecteur d'une place de marché l'a rejeté, et parmi les motifs figurait celui-ci :

Les règles de conformité doivent être corrigées. « Langue des passages » ne

valide que les attributs lang déjà présents et ne peut pas détecter les

passages en langue étrangère non balisés ; la règle du landmark principal est

WCAG 1.3.6 de niveau AAA mais elle est présentée comme un contrôle AA ; et les

id en double ne devraient pas être présentés comme un manquement WCAG 2.2 au

titre du 4.1.1.

Trois constats. Tous les trois justes. Ce qui suit est ce qui s'est passé quand

j'ai cessé de corriger les trois et vérifié les vingt-deux autres.

Je commence par le troisième, parce que c'est le plus facile à vérifier et le

plus largement faux.

Le critère de succès 4.1.1 Parsing a été retiré des WCAG 2.2. Ni déprécié ni

assoupli : retiré. La Recommandation du W3C le mentionne dans la

section conformité comme « Parsing (Obsolete and removed) ». Il est parti parce

que ce contre quoi il protégeait — les technologies d'assistance qui butaient sur

un balisage mal formé — a cessé d'être un mode de défaillance réel dès lors que

les navigateurs et les API d'accessibilité ont convergé sur la façon de récupérer

un HTML incorrect.

Mon scanner signalait les attributs id

en double comme un manquement au WCAG

4.1.1. Au regard des WCAG 2.2, ce critère n'est plus là pour être enfreint.

Les id en double méritent toujours d'être corrigés. Ils cassent les associations

label for

et les références aria-labelledby

, si bien que c'est le mauvais

élément qui est annoncé, ou aucun. Mais c'est un problème de 4.1.2 lorsqu'il casse réellement un nom accessible, et le détecter est un contrôle différent du

Le relecteur en avait trouvé trois. J'aurais pu en corriger trois. À la place,

j'ai pris les 25 règles et vérifié chacune face à la Recommandation WCAG 2.2 et

face à la manière dont axe-core classe la règle équivalente — parce

qu'axe-core est l'implémentation de référence sur laquelle repose une grande

partie de ce secteur, et qu'elle fait une distinction que j'avais perdue.

Huit règles étaient fausses.

Règle Annonçait En réalité
Id en double 4.1.1 Retiré des WCAG 2.2
Un seul landmark main
1.3.6 AAA 1.3.6 est Identify Purpose, un critère sans rapport
Langue des passages 3.1.2 AA
3.1.2 est de niveau A — et le contrôle ne faisait pas ce que son titre promettait
Texte de lien vague 2.4.4 Le 2.4.4 est satisfait par le contexte
Niveaux de titre sautés 1.3.1 Les WCAG n'imposent pas de niveaux séquentiels
h1 manquant
1.3.1 Bonne pratique
Titre vide 1.3.1 Bonne pratique
tabindex positif
2.4.3 Bonne pratique

Certaines méritent une phrase.

Texte de lien vague. Le 2.4.4 s'appelle Link Purpose (In Context). En

contexte. Un lien qui dit « en savoir plus » le satisfait si le paragraphe,

l'élément de liste ou la cellule qui l'entoure rend la destination claire — ce

qui est généralement le cas. Le critère qui exige que le texte du lien tienne

seul est le 2.4.9, et il est AAA. « En savoir plus » répété au fil d'une page est

donc un vrai problème d'utilisabilité pour qui parcourt les liens au clavier, et

ce n'est pas un manquement de niveau A.

Niveaux de titre. Aucun critère de succès n'exige qu'un h2

suive un h1

.

Le 1.3.1 Info and Relationships exige que la structure véhiculée visuellement

soit disponible par programme — utiliser des titres tout court est la façon de

le satisfaire. Passer de h1

à h3

est brouillon et dégrade la navigation au

lecteur d'écran, mais ce n'est pas ce que dit le 1.3.1. axe-core classe

heading-order

en bonne pratique, et ce depuis des années.

Langue des passages. Celle-ci était fausse deux fois. Le 3.1.2 est de niveau

A, pas AA — je m'étais trompé de niveau. Et le contrôle s'intitulait « Les

passages en langue étrangère doivent déclarer leur langue », ce qui promettait

une chose qu'aucun contrôle automatique ne peut faire : savoir qu'un passage est

dans une autre langue quand rien ne le signale. Ce que le code faisait vraiment,

c'était valider les attributs lang

déjà présents. C'est un contrôle utile. Ce

n'est pas le contrôle qu'annonçait le titre.

25 contrôles. Dix-huit correspondent à un critère de succès WCAG 2.2,

répartis sur quatorze critères distincts de niveaux A et AA : 1.1.1, 1.3.1,

1.3.5, 1.4.2, 1.4.3, 1.4.4, 2.4.1, 2.4.2, 2.4.4, 2.5.8, 3.1.1, 3.1.2, 3.3.2 et

4.1.2.

Sept relèvent des bonnes pratiques. À corriger, mais pas des manquements à la

conformité.

Avant l'audit, la page produit annonçait « 25 contrôles automatisés sur les

niveaux A et AA des WCAG 2.2 » et listait le 4.1.1 parmi les critères couverts.

Les deux affirmations étaient fausses, et la seconde était vérifiablement fausse

par quiconque avait lu la Recommandation 2.2.

Voici la partie qui m'a fait cesser de traiter cela comme un problème

d'étiquettes.

L'extension comporte un générateur pour les informations d'accessibilité

qu'exige l'Acte européen sur l'accessibilité. Il pré-remplit la section des

« obstacles connus » à partir de la dernière analyse et — c'était l'argument de

vente — associe à chaque obstacle son critère de succès WCAG.

Huit règles citant des critères erronés, obsolètes ou sans rapport écrivaient

donc ces numéros dans un document que le propriétaire du site publie comme une

déclaration juridique sur son propre service.

Une déclaration de conformité n'est pas un rapport. Un rapport qui exagère vous

gâche l'après-midi. Une déclaration publiée qui cite un critère inexistant, dans

un document que vous êtes légalement tenu de maintenir, relève d'une autre

catégorie d'erreur — et de celles que découvre votre client, pas vous.

C'est l'argument en faveur de la distinction, et c'est le seul qui compte. Un

outil qui présente chaque signalement comme un manquement WCAG gonfle deux

chiffres : le sien — 25 contrôles WCAG se lit mieux que 18 — et le vôtre. Et

c'est votre chiffre gonflé qui devient public.

Chaque règle déclare désormais ce qu'elle est :

{
    id: 'heading_order',
    wcag: '',
    level: '',
    standard: 'best-practice',
    ...
}

Le rapport affiche le critère là où il en existe un, et Bonne pratique là où

il n'y en a pas, au lieu d'un WCAG ()

vide.

Le générateur exige maintenant deux conditions indépendantes avant d'écrire

un critère dans un document juridique : la règle doit être marquée comme

rattachée aux WCAG, et sa valeur doit correspondre à ^\d+\.\d+\.\d+$

. L'une

ou l'autre aurait suffi à empêcher ce qui s'est produit. Je voulais celle qui

survit à quelqu'un modifiant l'autre.

Et les textes commerciaux disent désormais 18 et 7, dans le readme, la

documentation et la fiche de la place de marché. Ce fut le commit le moins

agréable de la semaine, et celui que je referais.

Trois questions qui valent la peine, dont aucune n'exige de me croire.

Signale-t-il encore le 4.1.1 ? Trente secondes de vérification, et cela vous

dit quand le jeu de règles a été lu face à la norme plutôt que copié d'un autre

outil.

Distingue-t-il les critères de succès des bonnes pratiques ? Si chaque

signalement porte un numéro de critère, une partie au moins de ces numéros est

décorative. L'implémentation de référence sur laquelle tourne ce secteur classe

environ un quart de ses règles en bonne pratique. Un outil qui n'en a aucune

n'est pas plus strict : il est moins rigoureux.

Où va le critère après le rapport ? S'il alimente une déclaration, un badge,

un PDF ou quoi que ce soit qu'un client publie, son exactitude cesse d'être une

affaire de qualité interne.

Les tests automatisés trouvent environ un tiers des obstacles réels

d'accessibilité. Corriger les étiquettes ne déplace pas ce chiffre. Un rapport

propre est bon signe, pas une déclaration de conformité, et les tests au clavier

et au lecteur d'écran par une personne restent le seul moyen de savoir.

Ce que l'audit a changé est plus étroit et valait, je crois, la semaine :

quand mon outil dit WCAG, désormais, il le pense.

Il est écrit par la personne qui développe l'extension dont il parle. C'est dit clairement plutôt que caché, pour que vous puissiez en tenir compte.

Accessibility Audit — WCAG & EAA Compliance Checker

Publié à l’origine sur groundedwp.com.

── more in #developer-tools 4 stories · sorted by recency
── more on @wordpress 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/un-relecteur-a-trouv…] indexed:0 read:7min 2026-08-12 ·