{"slug": "un-relecteur-a-trouve-trois-criteres-wcag-errones-dans-mon-extension-d-j-ai-et-j", "title": "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.", "summary": "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.", "body_md": "Je développe un scanner d'accessibilité pour WordPress. La semaine dernière, le\n\nrelecteur d'une place de marché l'a rejeté, et parmi les motifs figurait celui-ci :\n\nLes règles de conformité doivent être corrigées. « Langue des passages » ne\n\nvalide que les attributs lang déjà présents et ne peut pas détecter les\n\npassages en langue étrangère non balisés ; la règle du landmark principal est\n\nWCAG 1.3.6 de niveau AAA mais elle est présentée comme un contrôle AA ; et les\n\nid en double ne devraient pas être présentés comme un manquement WCAG 2.2 au\n\ntitre du 4.1.1.\n\nTrois constats. Tous les trois justes. Ce qui suit est ce qui s'est passé quand\n\nj'ai cessé de corriger les trois et vérifié les vingt-deux autres.\n\nJe commence par le troisième, parce que c'est le plus facile à vérifier et le\n\nplus largement faux.\n\n**Le critère de succès 4.1.1 Parsing a été retiré des WCAG 2.2.** Ni déprécié ni\n\nassoupli : retiré. La [Recommandation du W3C](https://www.w3.org/TR/WCAG22/) le mentionne dans la\n\nsection conformité comme « Parsing (Obsolete and removed) ». Il est parti parce\n\nque ce contre quoi il protégeait — les technologies d'assistance qui butaient sur\n\nun balisage mal formé — a cessé d'être un mode de défaillance réel dès lors que\n\nles navigateurs et les API d'accessibilité ont convergé sur la façon de récupérer\n\nun HTML incorrect.\n\nMon scanner signalait les attributs `id`\n\nen double comme un manquement au WCAG\n\n4.1.1. Au regard des WCAG 2.2, ce critère n'est plus là pour être enfreint.\n\nLes id en double méritent toujours d'être corrigés. Ils cassent les associations\n\n`label for`\n\net les références `aria-labelledby`\n\n, si bien que c'est le mauvais\n\nélément qui est annoncé, ou aucun. Mais c'est un problème de 4.1.2 *lorsqu'il\ncasse réellement un nom accessible*, et le détecter est un contrôle différent du\n\nLe relecteur en avait trouvé trois. J'aurais pu en corriger trois. À la place,\n\nj'ai pris les 25 règles et vérifié chacune face à la Recommandation WCAG 2.2 et\n\nface à la manière dont [axe-core](https://github.com/dequelabs/axe-core) classe la règle équivalente — parce\n\nqu'axe-core est l'implémentation de référence sur laquelle repose une grande\n\npartie de ce secteur, et qu'elle fait une distinction que j'avais perdue.\n\nHuit règles étaient fausses.\n\n| Règle | Annonçait | En réalité |\n|---|---|---|\n| Id en double | 4.1.1 | Retiré des WCAG 2.2 |\nUn seul landmark `main`\n|\n1.3.6 AAA | 1.3.6 est Identify Purpose, un critère sans rapport |\n| Langue des passages | 3.1.2 AA\n|\n3.1.2 est de niveau A — et le contrôle ne faisait pas ce que son titre promettait |\n| Texte de lien vague | 2.4.4 | Le 2.4.4 est satisfait par le contexte |\n| Niveaux de titre sautés | 1.3.1 | Les WCAG n'imposent pas de niveaux séquentiels |\n`h1` manquant |\n1.3.1 | Bonne pratique |\n| Titre vide | 1.3.1 | Bonne pratique |\n`tabindex` positif |\n2.4.3 | Bonne pratique |\n\nCertaines méritent une phrase.\n\n**Texte de lien vague.** Le 2.4.4 s'appelle *Link Purpose (In Context)*. En\n\ncontexte. Un lien qui dit « en savoir plus » le satisfait si le paragraphe,\n\nl'élément de liste ou la cellule qui l'entoure rend la destination claire — ce\n\nqui est généralement le cas. Le critère qui exige que le texte du lien tienne\n\nseul est le 2.4.9, et il est AAA. « En savoir plus » répété au fil d'une page est\n\ndonc un vrai problème d'utilisabilité pour qui parcourt les liens au clavier, et\n\nce n'est pas un manquement de niveau A.\n\n**Niveaux de titre.** Aucun critère de succès n'exige qu'un `h2`\n\nsuive un `h1`\n\n.\n\nLe 1.3.1 *Info and Relationships* exige que la structure véhiculée visuellement\n\nsoit disponible par programme — utiliser des titres *tout court* est la façon de\n\nle satisfaire. Passer de `h1`\n\nà `h3`\n\nest brouillon et dégrade la navigation au\n\nlecteur d'écran, mais ce n'est pas ce que dit le 1.3.1. axe-core classe\n\n`heading-order`\n\nen bonne pratique, et ce depuis des années.\n\n**Langue des passages.** Celle-ci était fausse deux fois. Le 3.1.2 est de niveau\n\nA, pas AA — je m'étais trompé de niveau. Et le contrôle s'intitulait « Les\n\npassages en langue étrangère doivent déclarer leur langue », ce qui promettait\n\nune chose qu'aucun contrôle automatique ne peut faire : savoir qu'un passage est\n\ndans une autre langue quand rien ne le signale. Ce que le code faisait vraiment,\n\nc'était valider les attributs `lang`\n\ndéjà présents. C'est un contrôle utile. Ce\n\nn'est pas le contrôle qu'annonçait le titre.\n\n25 contrôles. **Dix-huit correspondent à un critère de succès WCAG 2.2**,\n\nrépartis sur quatorze critères distincts de niveaux A et AA : 1.1.1, 1.3.1,\n\n1.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\n\n4.1.2.\n\n**Sept relèvent des bonnes pratiques.** À corriger, mais pas des manquements à la\n\nconformité.\n\nAvant l'audit, la page produit annonçait « 25 contrôles automatisés sur les\n\nniveaux A et AA des WCAG 2.2 » et listait le 4.1.1 parmi les critères couverts.\n\nLes deux affirmations étaient fausses, et la seconde était vérifiablement fausse\n\npar quiconque avait lu la Recommandation 2.2.\n\nVoici la partie qui m'a fait cesser de traiter cela comme un problème\n\nd'étiquettes.\n\nL'extension comporte un générateur pour les informations d'accessibilité\n\nqu'exige l'Acte européen sur l'accessibilité. Il pré-remplit la section des\n\n« obstacles connus » à partir de la dernière analyse et — c'était l'argument de\n\nvente — associe à chaque obstacle son critère de succès WCAG.\n\nHuit règles citant des critères erronés, obsolètes ou sans rapport écrivaient\n\ndonc ces numéros dans un document que le propriétaire du site publie comme une\n\ndéclaration juridique sur son propre service.\n\nUne déclaration de conformité n'est pas un rapport. Un rapport qui exagère vous\n\ngâche l'après-midi. Une déclaration publiée qui cite un critère inexistant, dans\n\nun document que vous êtes légalement tenu de maintenir, relève d'une autre\n\ncatégorie d'erreur — et de celles que découvre votre client, pas vous.\n\nC'est l'argument en faveur de la distinction, et c'est le seul qui compte. Un\n\noutil qui présente chaque signalement comme un manquement WCAG gonfle deux\n\nchiffres : le sien — *25 contrôles WCAG* se lit mieux que *18* — et le vôtre. Et\n\nc'est votre chiffre gonflé qui devient public.\n\nChaque règle déclare désormais ce qu'elle est :\n\n```\n{\n    id: 'heading_order',\n    wcag: '',\n    level: '',\n    standard: 'best-practice',\n    ...\n}\n```\n\nLe rapport affiche le critère là où il en existe un, et **Bonne pratique** là où\n\nil n'y en a pas, au lieu d'un `WCAG ()`\n\nvide.\n\nLe générateur exige maintenant **deux conditions indépendantes** avant d'écrire\n\nun critère dans un document juridique : la règle doit être marquée comme\n\nrattachée aux WCAG, *et* sa valeur doit correspondre à `^\\d+\\.\\d+\\.\\d+$`\n\n. L'une\n\nou l'autre aurait suffi à empêcher ce qui s'est produit. Je voulais celle qui\n\nsurvit à quelqu'un modifiant l'autre.\n\nEt les textes commerciaux disent désormais 18 et 7, dans le readme, la\n\ndocumentation et la fiche de la place de marché. Ce fut le commit le moins\n\nagréable de la semaine, et celui que je referais.\n\nTrois questions qui valent la peine, dont aucune n'exige de me croire.\n\n**Signale-t-il encore le 4.1.1 ?** Trente secondes de vérification, et cela vous\n\ndit quand le jeu de règles a été lu face à la norme plutôt que copié d'un autre\n\noutil.\n\n**Distingue-t-il les critères de succès des bonnes pratiques ?** Si chaque\n\nsignalement porte un numéro de critère, une partie au moins de ces numéros est\n\ndécorative. L'implémentation de référence sur laquelle tourne ce secteur classe\n\nenviron un quart de ses règles en bonne pratique. Un outil qui n'en a aucune\n\nn'est pas plus strict : il est moins rigoureux.\n\n**Où va le critère après le rapport ?** S'il alimente une déclaration, un badge,\n\nun PDF ou quoi que ce soit qu'un client publie, son exactitude cesse d'être une\n\naffaire de qualité interne.\n\nLes tests automatisés trouvent environ un tiers des obstacles réels\n\nd'accessibilité. Corriger les étiquettes ne déplace pas ce chiffre. Un rapport\n\npropre est bon signe, pas une déclaration de conformité, et les tests au clavier\n\net au lecteur d'écran par une personne restent le seul moyen de savoir.\n\nCe que l'audit a changé est plus étroit et valait, je crois, la semaine :\n\nquand mon outil dit WCAG, désormais, il le pense.\n\nIl 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.\n\n[Accessibility Audit — WCAG & EAA Compliance Checker](https://wpbay.com/product/accessibility-audit/)\n\n*Publié à l’origine sur groundedwp.com.*", "url": "https://wpnews.pro/news/un-relecteur-a-trouve-trois-criteres-wcag-errones-dans-mon-extension-d-j-ai-et-j", "canonical_source": "https://dev.to/grounded/un-relecteur-a-trouve-trois-criteres-wcag-errones-dans-mon-extension-daccessibilite-jai-verifie-4cnl", "published_at": "2026-08-12 10:26:16+00:00", "updated_at": "2026-08-12 10:47:30.324444+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools"], "entities": ["WordPress", "W3C", "axe-core", "Deque Labs"], "alternates": {"html": "https://wpnews.pro/news/un-relecteur-a-trouve-trois-criteres-wcag-errones-dans-mon-extension-d-j-ai-et-j", "markdown": "https://wpnews.pro/news/un-relecteur-a-trouve-trois-criteres-wcag-errones-dans-mon-extension-d-j-ai-et-j.md", "text": "https://wpnews.pro/news/un-relecteur-a-trouve-trois-criteres-wcag-errones-dans-mon-extension-d-j-ai-et-j.txt", "jsonld": "https://wpnews.pro/news/un-relecteur-a-trouve-trois-criteres-wcag-errones-dans-mon-extension-d-j-ai-et-j.jsonld"}}