Automated accessibility testing: what it can and cannot prove
Updated 2026-08-08 · computed from 50 EN 301 549 criteria
Of the 50 web success criteria in EN 301 549 chapter 9, 31 (62%) have an automated check — axe-core, our own worker code, or both. The other 19 need a human, always.
What this is. A criterion-by-criterion map of EN 301 549 chapter 9 (the web-accessibility chapter referenced by the European Accessibility Act): for each of the 50 success criteria, whether an automated check exists — an axe-core rule, one of Verscala’s own worker checks, or both — and where automation stops entirely.
What this is not. “Automated” means a test exists that can find failures, not that passing it proves conformance. An automated pass never certifies a page as accessible — it only means the specific things a machine can check did not fail. The 19 criteria below with no automated check at all still need a human, and so do the 31 with one, for everything the check cannot see.
The chapter at a glance
Coverage by WCAG principle
EN 301 549’s web chapter incorporates WCAG’s four organising principles — Perceivable, Operable, Understandable, Robust — grouped here by the first digit of each criterion’s WCAG number, an objective, publicly documented split, not an editorial one. Automation coverage is uneven across them: structural and interface-level requirements automate more readily than judgement calls about meaning.
| Perceivable (12/20) | 12 |
|---|---|
| Operable (12/17) | 12 |
| Understandable (5/10) | 5 |
| Robust (2/3) | 2 |
What automation cannot prove
These 19 criteria have no automated check at all in our data — not a gap in our tooling specifically, but the honest state of automated accessibility testing generally: judging whether an alternative is truly equivalent, whether an error message is genuinely helpful, or whether a navigation pattern stays predictable is not something a script can decide. Every one of these needs a human reviewer, every time.
- 1.2.3 Audio description or media alternative (pre-recorded)
- 1.2.4 Captions (live)
- 1.2.5 Audio description (pre-recorded)
- 1.3.2 Meaningful sequence
- 1.3.3 Sensory characteristics
- 1.4.5 Images of text
- 1.4.11 Non-text contrast
- 1.4.13 Content on hover or focus
- 2.1.4 Character key shortcuts
- 2.3.1 Three flashes or below threshold
- 2.5.1 Pointer gestures
- 2.5.2 Pointer cancellation
- 2.5.4 Motion actuation
- 3.2.1 On focus
- 3.2.2 On input
- 3.3.1 Error identification
- 3.3.3 Error suggestion
- 3.3.4 Error prevention (legal, financial, data)
- 4.1.3 Status messages
Where our own checks go beyond bare axe-core
11 criteria get an automated check only because Verscala’s own worker code adds one — axe-core’s static-markup rules do not reach real-browser behaviour like keyboard traps, focus order, or resize/reflow at all. Each of these is a heuristic with a named, documented limitation, not a silent guess — the full caveat for each check is on its criterion page.
- 1.2.2 Captions (pre-recorded)a11y-video-no-captions
- 1.4.2 Audio controla11y-autoplay-media
- 1.4.4 Resize texta11y-resize-200
- 1.4.10 Reflowa11y-reflow-320
- 2.1.2 No keyboard trapa11y-keyboard-trap
- 2.4.3 Focus Ordera11y-focus-order
- 2.4.5 Multiple waysa11y-multiple-ways
- 2.4.6 Headings and labelsa11y-empty-heading
- 2.4.7 Focus visiblea11y-focus-invisible
- 3.2.3 Consistent navigationa11y-inconsistent-navigation
- 3.2.4 Consistent identificationa11y-inconsistent-identification
Why Verscala does not publish site scores
With only 62% of EN 301 549’s web criteria having any automated check — and none of those checks proving conformance on their own — a single numeric “accessibility score” for a site would compress a mostly-manual standard into a number automation cannot honestly produce. That is why Verscala’s own scanner reports findings against the rules it actually ran, not a score, and why our methodology and accessibility statement name the same 31/50 figure, not a friendlier one.
How this was made
Every number on this page is computed at build time from data/a11y/en301549-coverage.json — generated from EN 301 549 V3.2.1 ch.9 + axe-core 4.13.0 + worker/lib checks — by a single aggregator script, separate from the one behind our other report; a test recomputes the figures from that same source and fails if the published snapshot drifts. This is the identical dataset that drives our methodology page and the per-criterion pages under /wcag/, read once here as a single narrative instead of a lookup table.
Scan your website See exactly which of these 50 criteria our free scan actually checked on your site.