Audit for the Accessibility Act
Directive (EU) 2019/882 has applied since 28 June 2025, and eventually somebody gets asked whether the site complies. A list of axe rule ids does not answer that question, because a rule id is not a legal reference and forty-seven violations is not a sentence anyone can act on. Below is how I turn the scan into a report a non-developer can use, what it found when I ran it against my own site, and the reason a clean run is a floor rather than a certificate.
The questionHow do I check whether my website meets the European Accessibility Act?
How the working version is put together
Open the page in a real browser
A hosted Actor drives an actual Chromium, crawls up to 25 internal pages from the URL you give it, and runs the axe-core WCAG 2.1 A and AA rule set against the rendered DOM. Fonts and media are blocked to keep runs cheap, because axe judges an image from its markup rather than its pixels. Anything that only exists after JavaScript runs is still there to be tested, which is the whole reason for using a browser instead of fetching HTML.
Force reduced motion, then wait for the page to settle
An early version of this returned 12 failures on one run and 81 on the next against the same page. Nothing had changed. Axe was measuring text mid-fade during entry animations, reading colours that existed for a few hundred milliseconds and never again. So it now forces reduced motion and waits for the network to go quiet before it measures anything. A test that gives two different answers to one question is not a test.
Give the page one of three states
FAIL when at least one rule failed outright. NEEDS REVIEW when nothing failed but something came back undecided and a person has to look at it. NO AUTOMATED FAILURES when the automated pass found nothing, which is the strongest thing a machine is entitled to say and deliberately not the word compliant.
Attach the legal reference and a sentence a person can read
Every finding carries its rule id and severity for the developer, then the WCAG success criteria it breaks and the EN 301 549 clauses the directive points at for whoever is answering the regulator. Then one sentence on what a real visitor hits, and one on the fix. A missing alt attribute comes back as a screen reader announcing nothing where sighted visitors see a picture, rather than as the string image-alt.
Refuse to score a page it could not open
A site behind a hard bot wall fails its row honestly instead of reporting a page nobody could open as clean. That happened to w3.org during testing, which was a good day for the tool. A 403 returns an error row and never a pass, because the single worst outcome here is a green result that means the scanner was blocked.
What it found on my own site
Fifty serious contrast failures, across three pages of fractionalhq.uk. That is the site you are reading, built by me, and it was the first thing I pointed the Actor at once it worked. Colours that looked fine to me were failing the ratio for the size and weight they were set at.
I fixed them, and I re-ran the contrast check against the live site while writing this page: zero failing elements across six pages. Owning that is more useful to you than a clean sheet would be, because it tells you what the tool is for. It catches the thing you stopped seeing.
What automation cannot cover
Deque publish an Automated Accessibility Coverage Report putting automated testing at 57% of accessibility issues by volume, while noting that only 16 of the 50 WCAG 2.1 AA success criteria have automated checks at all. Those are their numbers rather than mine, and they are the most generous credible figures I could find.
So here is what no scanner does. It cannot tell you whether your alternative text is actually descriptive, only that some text exists. It cannot judge focus order, or whether an error message helps anyone, or whether your captions are accurate. A keyboard-only pass and a screen-reader pass are still needed, and so is somebody who knows what they are looking at. NO AUTOMATED FAILURES says the automated checks found nothing. It does not say the site is accessible.
Scope is a question about your business, not your page
The Act covers a defined set of consumer products and services sold in the EU, and every member state wrote it into its own law, so the letter that lands on a desk cites a national act rather than the directive. In Germany that is the Barrierefreiheitsstärkungsgesetz, the BFSG.
The Actor does flag whether the pages it saw carry features of the kind the directive covers, such as a basket or a checkout or a booking flow, and it says in words which ones it saw. It never claims a business is legally in scope, because it cannot know. That depends on what a company sells and how large it is, and microenterprises providing services are treated differently again. No page scan can see any of that.
What it costs to run
One event per page rendered and audited. A page that could not be fetched costs nothing, and neither does a site that times out or gets bot-blocked or answers with an error. Run it empty and you get two sample rows free, one failing and one clean, so you can see the shape before spending anything.
The honest cost is afterwards. What comes out is an engineering to-do list with the right legal references attached, which is a genuinely useful thing to hold before you commission a real audit, and no substitute for one. Somebody still has to do the work, and somebody still has to book the manual pass.
When I would tell you not to bother
If a manual audit has already been done and you are holding the report, this mostly hands you a list you already have. Go and fix that one. Come back when you want it rechecked on a schedule so the fixes stay fixed.
If the question you need answered is whether the Act applies to your business, no scan can give it to you and neither can I. That one needs a lawyer who knows what you sell and how many people you employ.
What lands on your desk
- One row per site and one per page, with three honest states and never the word compliant
- Every failing rule mapped to its WCAG criteria and EN 301 549 clauses
- A plain-language sentence per finding on what a visitor hits, and one on the fix
- A paragraph report you can paste into an email, alongside the machine-readable JSON
- If you want the failures fixed and the audit run on a schedule afterwards, that is the work I do
Open the proof
Published case studies of systems that are running. Each links to the thing itself.
Directive (EU) 2019/882, the text itself ↗The BFSG, Germany's implementing law ↗Deque's Automated Accessibility Coverage Report ↗WCAG 2.1 success criteria, from the W3C ↗My n8n creator profile ↗
Questions this page answers
- What standard does it test against?
- The axe-core WCAG 2.1 A and AA rule set, run in a real Chromium against the rendered DOM. Every finding is then mapped to the WCAG success criteria it breaks and the EN 301 549 clauses the directive points at.
- Can an automated scan prove I comply with the Accessibility Act?
- No. Deque's own coverage report puts automated testing at 57% of issues by volume, with only 16 of the 50 WCAG 2.1 AA criteria having automated checks at all. A clean run says the automated checks found nothing, which is a floor rather than a certificate, and keyboard, screen-reader and cognitive checks still need a person.
- Have you run it on your own site?
- I have, and it found 50 serious contrast failures across three pages of fractionalhq.uk. I fixed them, and re-ran the contrast check against the live site while writing this page: zero failing elements across six pages.
- Does it tell me whether the Act applies to my business?
- It doesn't, and it never claims to. It flags whether the pages it saw carry features of the kind the directive covers, such as a basket or a checkout, and says which ones it saw. Whether you're in scope depends on what you sell and how large you are, and microenterprises providing services are treated differently again.
- What happens if a site blocks the scanner?
- It fails that row honestly rather than reporting a page nobody could open as clean. That happened to w3.org during testing. A 403 returns an error row and is never charged.
Want this built and handed over working?
One line is enough to start. You get an honest answer on fit, and a number rather than a discovery call.
Start a brief