Skip to content
A11ySignal

Methodology

A score you cannot audit is not worth showing

Here is the whole formula. It is deliberately simple: you should be able to work out your own score by hand from a report, and predict what a fix will do to it.

The formula

A page starts at 100. Every failing element deducts points according to how badly it hurts someone, and the deduction for any single rule is capped.

criticalblocks peopleSomeone cannot complete the task at all.−5 each
serioushurts badlySomeone can get through, but only with real effort.−3 each
moderategets in the waySlows people down or confuses assistive technology.−1.5 each
minorrough edgeWorth fixing when you are next in the file.−0.5 each
pageScore = clamp(0, 100,
  100 − Σ  weight(impact) × min(failingElements, 10)
        rules
)

siteScore = mean(pageScore)   // every page counts the same

Why the cap exists

One broken template can produce four hundred identical failures — a product grid where every link has no accessible name, say. Without a cap, that page scores zero, and so does the page after you fix half of them. A score that cannot move is a score nobody checks.

Capping the deduction at 10 elements per rule keeps the number responsive to progress. The full count is always shown next to it, so nothing is hidden — the cap changes the score, not the report.

What the number is not

It is not a conformance percentage, and 100 does not mean compliant. It means no automated rule failed on the pages we could read. Automated checks cover roughly a third of WCAG; the rest — focus order, whether alt text is meaningful, whether a custom widget behaves like the pattern it imitates — needs a person.

Every criterion page says whether an automated rule covers it. Where none does, we say so rather than leaving a gap you might read as a pass. See what automated testing can and cannot find.

What runs, exactly

engineaxe-coreThe open-source rule engine from Deque, unmodified. Same engine as the browser extensions many teams already use, so results agree.4.13.0
browserchromiumA real browser at 1280×900, with JavaScript executed and the network settled before anything is measured.headless
targetwcag-2.2Rules tagged for WCAG 2.0, 2.1 and 2.2 at Level A and AA. Best-practice rules are off by default so a compliance score stays about compliance.Level AA
excludedbest-practiceAdvice no success criterion requires. Reported separately when you turn it on.opt-in

Grades

A grade is shorthand for a conversation with a client, nothing more. A 95 and a 96 are the same site.

A95–100Nothing measurable is failing.clean
B85–94A short list, mostly cosmetic.minor
C70–84Usable, with real obstacles.friction
D50–69Some people cannot finish some tasks.blocking
F0–49Large parts are unusable without a mouse and sight.broken

We run this on ourselves

Every build of this site is scanned by the same engine, and the build fails if anything serious appears. The first time we ran it we found thirteen contrast failures on our own home page, which is a good argument for continuous scanning and a poor one for trusting a design review.