Tools

Pa11y

Een open-source commandoregeltoets voor toegankelijkheid. CI-vriendelijke aanvulling op axe-core CLI; pa11y-ci drijft de nachtelijke regressieworkflows voor toegankelijkheid die de meeste grote programma's hanteren.

Pa11y is een open-source geautomatiseerde toegankelijkheidstester. Oorspronkelijk ontwikkeld bij Nature Publishing Group en nu onderhouden door een onafhankelijke community, is Pa11y het afgelopen decennium het standaardgereedschap geworden voor “toegankelijkheidstests in CI”.

Wat Pa11y doet

Pa11y neemt via de commandoregel een URL en voert toegankelijkheidscontroles uit op de gegenereerde pagina, met een lijst van overtredingen als uitvoer:

$ pa11y https://example.com
Welcome to Pa11y

> Running Pa11y on 1 URLs:
...

Error: This element does not have an attribute "alt".
   • Element: <img src="..." />
   • Code: HTML_CS.Principle1.Guideline1_1.1_1_1.H37
   • Selector: body > section:nth-child(2) > img

Pa11y draait in een headless browser (intern Puppeteer of Playwright) en ziet daardoor de gegenereerde DOM in plaats van enkel de broncode — wat betekent dat het JavaScript-gegenereerde content kan auditen op dezelfde manier als een echte gebruiker die tegenkomt.

Ondersteunde rule engines

Pa11y heeft van oudsher twee rule engines ondersteund:

  • HTML_CodeSniffer (de standaard; de oorspronkelijke ruggengraat van Pa11y).
  • axe-core (via pa11y --runner axe).

Beide kunnen tegelijk worden gebruikt met samengevoegde resultaten — een modus voor “alles wat ik automatisch kan detecteren”. De meeste moderne Pa11y-installaties gebruiken uitsluitend de axe-core runner, omdat axe-core de meest actieve regelontwikkeling heeft.

pa11y-ci — de multi-URL workflow

Het voornaamste gebruik is pa11y-ci, een wrapper die Pa11y uitvoert op veel URL’s tegelijk en een passende statuscode teruggeeft voor CI:

$ pa11y-ci --sitemap https://example.com/sitemap.xml

Dit is precies de workflow die de meeste toegankelijkheidsprogramma’s hanteren voor nachtelijke regressies: de sitemap van de site invoeren in pa11y-ci via een cron-schema, de build laten mislukken bij nieuwe overtredingen, en een melding sturen wanneer het aantal overtredingen toeneemt.

Configuratie staat in .pa11yci (of een JSON-bestand) en biedt per-URL uitsluitingen, ernstdrempels, viewportformaten, aangepaste acties (inloggen, doorklikken) en overige automatisering.

Pa11y vs axe-core vs Lighthouse

Een bruikbaar mentaal model:

  • axe-core is de rule engine — de onderliggende detectiebibliotheek. Men gebruikt het via een wrapper.
  • Lighthouse is één wrapper, geoptimaliseerd voor volledige kwaliteitsaudits van sites (prestaties + toegankelijkheid + best practices + SEO).
  • Pa11y is een andere wrapper, geoptimaliseerd voor uitsluitend toegankelijkheids-CI-gating over veel URL’s op schaal.
  • axe-core CLI is de derde optie — kale axe, zonder Pa11y-wrapper, ook CI-vriendelijk.

Voor diepgaande analyse per pagina is Lighthouse beter. Voor site-brede regressietests met veel URL’s is Pa11y de praktische standaard. Voor build-blokkerende PR-controles op één URL werken axe-core CLI en Lighthouse-CI beide prima.

Beperkingen

Pa11y erft alle beperkingen van geautomatiseerde tools:

  • 30-40% van de WCAG-problemen zijn automatisch detecteerbaar; de rest vereist menselijk oordeel.
  • Het kan toetsenbordnavigatie, focusvolgorde of schermlezersgedrag niet testen.
  • Het draait in een headless browser en kan daardoor problemen missen die alleen zichtbaar worden tijdens echte gebruikersinteractie (rage-clicks, formulier- verlating, onverwachte modale stapeling).

Binnen het plafond van automatische detectie is Pa11y echter het meest operationeel flexibele gereedschap van de grote opties — met name wanneer het auditbereik “de hele site, elke nacht” betreft in plaats van “deze specifieke PR”.