Research · Original test, September 2026

Four accessibility checkers, one page, thirty known defects

We wrote a page with thirty WCAG failures we could name, then ran axe-core, Lighthouse, HTML_CodeSniffer and IBM Equal Access against it. This is what each tool found, what it missed, what it flagged for the wrong reason, and the five defects that no automated checker can find. The fixture is published so you can repeat it.

Updated September 2026Reviewed by The Accessibility.build team

Headline results

defects found outright by IBM Equal Access, the most of the four
19 of 30This benchmark,
found by axe-core, with 2 more flagged for review
16 of 30This benchmark,
found by Lighthouse, which scored the page 49 out of 100
15 of 30This benchmark,
found by HTML_CodeSniffer via Pa11y
12 of 30This benchmark,
found by all four tools
10 of 30This benchmark,
found by none of them
5 of 30This benchmark,

Method

The fixture is a single HTML page containing thirty deliberate defects, each mapped to a WCAG 2.2 success criterion, chosen to span the common failure classes (text alternatives, names and labels, contrast, structure, ARIA, keyboard, timing and media) and to include several that require judgement rather than pattern matching. It was served over HTTP from localhost and each tool was run on 2 September 2026 in headless Chrome 143 with default settings and the WCAG 2.2 AA policy where a tool offers one.

A defect counts as found when the tool reports a violation on the right element for the right reason. A report that only appears in a needs-review or potential category is recorded separately, because most continuous-integration setups fail a build on violations and never surface the rest. A report on the right element for the wrong reason is recorded as wrong.

Download the fixture page and run it yourself. It is marked noindex; each defect is labelled in a comment.

The tools

Tools tested, versions, and totals found, missed and flagged for review
ToolVersionFoundReview onlyWrong reasonMissedNote
axe-core4.13.0 via @axe-core/puppeteer162012Also reported 26 'region' and 2 'landmark-one-main' best-practice findings that are not WCAG failures.
Lighthouse12.8.2, accessibility category only150015Runs a subset of axe rules. Scored the page 49 out of 100.
HTML_CodeSniffervia Pa11y 10.0.0, WCAG2AA standard120117Reported 17 messages; one was a misclassification of a data table.
IBM Equal Accessaccessibility-checker 4.0.31, WCAG_2_2 policy1930820 violations plus 10 potential violations flagged for review.

Defect by defect

Each result is a word, not a colour: Found, Missed, Review (reported only as needing human review) or Wrong (reported on the right element for the wrong reason).

Thirty seeded defects with the criterion each fails and the result from each of the four tools
IDSeeded defectCriterionaxe-coreLighthouseHTML_CSIBM
F01No lang attribute on the html element3.1.1Yes: FoundYes: FoundYes: FoundYes: Found
F02Image with no alt attribute1.1.1Yes: FoundYes: FoundYes: FoundYes: Found
F03First heading is an h3 (skipped levels)axe has a heading-order rule tagged best-practice; it did not fire here.1.3.1, 2.4.6No: MissedNo: MissedNo: MissedNo: Missed
F04Grey text on white at 2.85:11.4.3Yes: FoundYes: FoundYes: FoundYes: Found
F05Small grey text at 4.48:1HTML_CodeSniffer flagged only the first contrast failure.1.4.3Yes: FoundYes: FoundNo: MissedYes: Found
F06Link text 'click here'A name exists; whether it is a useful name is a judgement no tool makes.2.4.4No: MissedNo: MissedNo: MissedNo: Missed
F07Link whose only content is an image with empty alt2.4.4, 4.1.2Yes: FoundYes: FoundYes: FoundYes: Found
F08Button with no content4.1.2Yes: FoundYes: FoundYes: FoundYes: Found
F09div with onclick, no role, no tabindexIBM's aria_eventhandler_role_valid is the only rule that looks for click handlers on non-controls.2.1.1, 4.1.2No: MissedNo: MissedNo: MissedYes: Found
F10Text input with no label1.3.1, 3.3.2Yes: FoundYes: FoundYes: FoundYes: Found
F11Select with no label1.3.1, 3.3.2Yes: FoundYes: FoundYes: FoundYes: Found
F12Label whose for attribute points at nothing1.3.1No: MissedNo: MissedNo: MissedYes: Found
F13Checkbox with no label1.3.1, 3.3.2Yes: FoundYes: FoundYes: FoundYes: Found
F14Submit input with an empty value4.1.2Yes: FoundYes: FoundYes: FoundNo: Missed
F15Table used for data with no header cells (layout markup)1.3.1No: MissedNo: MissedNo: MissedYes: Found
F16Captioned data table with no header cellsHTML_CodeSniffer flagged this table as a layout table that should not have a caption, which is the opposite of the defect.1.3.1No: MissedNo: MissedWrong: Flagged, wrong reasonYes: Found
F17role=button with no tabindexIBM raised it as a potential violation (widget_tabbable_exists).2.1.1No: MissedNo: MissedNo: MissedReview: Flagged for review only
F18role=checkbox with no aria-checked4.1.2Yes: FoundYes: FoundNo: MissedYes: Found
F19aria-labelledby pointing at a missing idaxe reported it under 'incomplete', which most CI setups ignore.4.1.2Review: Flagged for review onlyNo: MissedNo: MissedYes: Found
F20Invalid role value (role=banana)4.1.2Yes: FoundYes: FoundNo: MissedYes: Found
F21iframe with no title4.1.2Yes: FoundYes: FoundYes: FoundYes: Found
F22Focus outline removed in CSSNeeds the element to be focused and its rendered style compared; no static checker does this.2.4.7No: MissedNo: MissedNo: MissedNo: Missed
F23Duplicate id attributeaxe 4 dropped its duplicate-id rules; only ids referenced by ARIA are checked now.4.1.1 (removed in 2.2)No: MissedNo: MissedYes: FoundNo: Missed
F24marquee element (moving text)2.2.2Yes: FoundNo: MissedNo: MissedYes: Found
F25Two 'Read more' links to different targets2.4.4No: MissedNo: MissedNo: MissedNo: Missed
F26Alt text that is the file nameIBM's img_alt_misuse raised it for review.1.1.1No: MissedNo: MissedNo: MissedReview: Flagged for review only
F27Image input with no alt1.1.1, 4.1.2Yes: FoundYes: FoundYes: FoundYes: Found
F28Positive tabindex2.4.3Yes: FoundYes: FoundNo: MissedNo: Missed
F29Autoplaying video with no captions track1.2.2, 1.4.2Review: Flagged for review onlyNo: MissedNo: MissedReview: Flagged for review only
F30h1 placed after all the content2.4.6No: MissedNo: MissedNo: MissedNo: Missed

What the results mean

The core is shared. Twelve defects were found by all four tools, and they are the ones that matter most in litigation: missing alt text, unlabelled fields, empty buttons and links, untitled frames, low contrast, no page language. These are the failures that appeared in the complaints in Domino's, Winn-Dixie and Target, and any of the four would have caught them.

The edges differ, and IBM covers more of them. Only IBM Equal Access caught the div with a click handler and no role, the label pointing at nothing, and the two tables with no header cells. Only HTML_CodeSniffer caught the duplicate id, a check axe dropped in version 4. Only axe and Lighthouse caught the positive tabindex. Running two engines is cheap and finds more than either alone; IBM plus axe covered 22 of the 30 outright.

Review categories hide real failures. axe put the broken aria-labelledby reference and the uncaptioned video in its incomplete list; IBM put the untabbable widget, the filename alt text and the video in potential violations. A build that fails only on violations never sees these. Read the review lists.

Five defects are invisible to automation, and they are common. Meaningless link text, repeated link text with different targets, a skipped heading level, a page title placed after the content, and a focus outline removed in CSS were missed by every tool. Screen reader users rank nonsensical links and buttons third among their most serious problems, and GDS found lack of visible focus among the top issues in UK public sector monitoring. A clean automated run says nothing about them.

A score is not a measurement. Lighthouse gave this page 49. It found fifteen of thirty defects, and its weighting means the number would move if the same defects were rearranged. WebAIM's 2026 evaluation found a median Lighthouse score of 85 across the top million home pages, 95.9% of which had detectable failures. Use it to spot regressions, not to make a claim.

Noise is a cost. axe reported twenty-eight best-practice findings on a page with no landmarks, all correct and none a WCAG failure. HTML_CodeSniffer reported a captioned data table as a layout table with a caption. Both are the kind of result that trains developers to ignore the report.

Versions and dates are in the tools table. Results apply to this fixture and these versions; every tool updates its rules, and the benchmark will be rerun when they do. For choosing between tools day to day, see axe vs WAVE and automated vs manual testing. WAVE is not in this benchmark because its engine is not available to run locally.

Frequently asked questions

Which automated accessibility tool finds the most issues?
On a page with thirty seeded WCAG defects, IBM Equal Access found 19 outright and flagged 3 more for review; axe-core found 16 and flagged 2; Lighthouse found 15; HTML_CodeSniffer found 12. Twelve defects were found by all four, and five were found by none. Coverage is not the only measure: axe produced 28 best-practice findings that are not WCAG failures, and HTML_CodeSniffer misclassified a data table.
What percentage of WCAG issues can automated tools detect?
On this fixture, between 40% and 63% of the seeded defects, depending on the tool, and 17% were undetectable by any of them. The undetected ones are the judgement calls: whether link text is meaningful, whether the heading order makes sense, whether focus is visible. Published estimates that automation finds 30% to 57% of issues are consistent with this.
Is a Lighthouse accessibility score of 100 the same as WCAG conformance?
No. Lighthouse runs a subset of axe-core's rules and scores them by weight. This fixture scored 49 with fifteen detected failures; a page could score 100 and still fail every judgement-based criterion. WebAIM's 2026 evaluation found a median Lighthouse score of 85 across the top million home pages, of which 95.9% had detectable failures.
Should I run more than one tool?
Yes, if the cost is low, because the tools disagree at the edges: only IBM caught the div with a click handler, the orphaned label and the missing table headers; only HTML_CodeSniffer caught the duplicate id; only axe and Lighthouse caught the positive tabindex. But no combination of the four found the five judgement defects, so the second tool you need is a person with a keyboard and a screen reader.

Essential Accessibility Resources

Comprehensive tools, checklists, and guides to help you create inclusive digital experiences

Top Pick

axe vs WAVE Comparison

Factual comparison of the two most popular accessibility testing tools
axe
wave
axe vs wave
+1 more
View guide
Top Pick

Automated vs Manual Accessibility Testing

What automated scans catch, what only manual testing finds, and the hybrid workflow
automated testing
accessibility testing comparison
ci testing
View guide
Top Pick

Best Accessibility Testing Tools: Free & Paid Options

Comprehensive guide to accessibility testing tools including axe, WAVE, Lighthouse, and more. Compare features, pricing, and use cases for WCAG compliance testing.
accessibility
testing
tools:
View article

Mobile Accessibility Testing: iOS & Android Guide

Learn mobile accessibility testing with TalkBack, VoiceOver, and Switch Control. Essential guide for mobile app and responsive web accessibility.
accessibility
testing:
testing
View article