Website Accessibility Statistics 2026: Data From 219 Sites
Website accessibility statistics for 2026 from 219 randomly sampled homepages: 87.7% fail WCAG checks, contrast fails on 64%, and the rules that fail most.
87.7% of website homepages fail at least one automatically detectable WCAG 2.2 Level A or AA check. That's the headline from our October 2026 study of 219 randomly sampled homepages, tested with axe-core in a real browser. The median homepage had 10 failing elements. Color contrast failed on 64.4% of sites, and more than half (51.6%) had at least one critical-impact violation.
The 12.3% that passed every automated rule weren't in the clear either: in a second pass, 25 of 27 zero-violation homepages still had elements that axe-core flagged for human review. And on 34.6% of the homepages we tested with a keyboard, a focused link or button ended up completely hidden behind a sticky header, cookie banner or pop-up.
Below are the full statistics: the method, the distribution, the rules that fail most, how results differ by site popularity, what automation leaves unresolved, and a script to benchmark your own sites the same way.
Methodology
| Item | Detail |
|---|---|
| Sampling frame | Tranco list 94GG2, ranks 1,001–50,000 |
| Sample | 420 domains drawn at random (fixed seed, reproducible) |
| Measured | 219 homepages that served a real page |
| Excluded | 201: DNS/TLS/connection failures (85), timeouts (40), bot challenges or 403 (40), almost no content (21), HTTP errors (15) |
| Browser | Headless Chromium, 1366×900, en-US, load + 3 s settle |
| Engine | axe-core 4.10.2, tags wcag2a, wcag2aa, wcag21a, wcag21aa, wcag22aa |
| Keyboard test | 40 × Tab and 40 × Shift+Tab, checking whether the focused element was fully covered (208 homepages) |
| Date | 3 October 2026 |
We skipped the top 1,000 because those ranks are dominated by CDNs, ad and API domains with no human-facing homepage. Only homepages were tested. Inner pages, forms and checkouts usually have more problems, so treat these figures as a floor.
The Headline Numbers
| Metric (219 homepages) | Result |
|---|---|
| Homepages with ≥1 WCAG A/AA violation | 192 (87.7%) |
| Homepages with zero detected violations | 27 (12.3%) |
| Homepages with ≥1 critical-impact violation | 113 (51.6%) |
| Median failing elements per homepage | 10 |
| Mean failing elements per homepage | 33.7 |
| 75th / 90th percentile | 37 / 80 |
| Median distinct rules failed | 3 |
| Total failing elements across the sample | 7,383 |
| Homepages with ≥1 element needing manual review (second pass, 209) | 188 (90.0%) |
The mean is more than three times the median because failures are concentrated: the 10% worst homepages account for 55% of all failing elements. Most sites have a moderate number of issues, and a minority have a very large number.
Distribution of failing elements
| Failing elements on the homepage | Homepages | Share |
|---|---|---|
| 0 | 27 | 12.3% |
| 1–5 | 51 | 23.3% |
| 6–20 | 63 | 28.8% |
| 21–50 | 39 | 17.8% |
| 51–100 | 21 | 9.6% |
| More than 100 | 18 | 8.2% |
Nearly two-thirds of homepages (64.4%) have 20 or fewer failing elements. For most sites, reaching zero automated violations is a few days of work, not a rebuild.
The tail matters too. The 18 homepages with more than 100 failing elements weren't uniformly bad: on those sites, just two rules accounted for a median 88% of all failures. That pattern points to a repeating component, such as a product grid with unnamed links, a footer full of low-contrast links or an icon row with undersized targets. Fixing that one component clears most of the count, so the number of fixes needed is far smaller than the number of failures.
The WCAG Failures That Appear Most Often
| axe rule | WCAG | Homepages failing | Failing elements | Share of all failures |
|---|---|---|---|---|
color-contrast | 1.4.3 | 64.4% | 3,463 | 46.9% |
link-name | 2.4.4, 4.1.2 | 42.5% | 894 | 12.1% |
target-size | 2.5.8 | 24.7% | 1,038 | 14.1% |
image-alt | 1.1.1 | 24.7% | 617 | 8.4% |
button-name | 4.1.2 | 15.5% | 281 | 3.8% |
meta-viewport | 1.4.4 | 11.9% | 26 | 0.4% |
list | 1.3.1 | 11.4% | 62 | 0.8% |
link-in-text-block | 1.4.1 | 11.0% | 54 | 0.7% |
label | 1.3.1, 4.1.2 | 9.6% | 42 | 0.6% |
aria-hidden-focus | 4.1.2 | 7.3% | 58 | 0.8% |
html-has-lang | 3.1.1 | 4.6% | 10 | 0.1% |
Four rules (contrast, link names, target size and image alt text) account for 81.4% of all failing elements. A team that fixes just those four categories removes four-fifths of its automated backlog.
Contrast deserves special mention. More than half of the failing text elements measured between 3.5:1 and 4.49:1, close to the 4.5:1 threshold. Our guide to fixing color contrast errors shows how to fix most of them with a small change to a shared color token.
Critical-impact failures
axe-core rates each violation by impact. 6,256 failing elements were serious and 1,127 were critical. The critical ones block access outright, and they came from a short list of rules:
| Critical rule | Homepages | What it means for users |
|---|---|---|
image-alt | 54 (24.7%) | Images with no text alternative at all |
button-name | 34 (15.5%) | Buttons a screen reader announces only as "button" |
meta-viewport | 26 (11.9%) | Pinch-zoom disabled on mobile |
label | 21 (9.6%) | Form fields with no label |
select-name | 14 (6.4%) | Dropdowns with no accessible name |
aria-allowed-attr | 14 (6.4%) | ARIA attributes used on elements that don't support them |
Does Site Popularity Make a Difference?
| Tranco rank band | Homepages | Median failing elements | Zero violations |
|---|---|---|---|
| 1,001 – 10,000 | 48 | 6 | 16.7% |
| 10,001 – 25,000 | 69 | 11 | 10.1% |
| 25,001 – 50,000 | 102 | 11 | 11.8% |
The most popular band does somewhat better, with a lower median and more fully clean homepages. But even among sites ranked 1,001–10,000, five in six had at least one detectable failure. Popularity buys polish, not accessibility.
Government and university sites were a small group in our sample (13 homepages), with a median of 4 failing elements. That's lower than average, which fits their legal obligations, though the sample is too small to generalise from.
What Automated Testing Left Unresolved
A violation count only covers what a rule engine can decide. Two more measurements show how much it can't.
Needs review. axe-core puts elements it can't judge into a separate "incomplete" list, for example text on a background image, where no single background color can be measured. In a second pass over the same homepages (209 completed), 90.0% had at least one needs-review element, with a median of 14 per homepage. In total there were more needs-review elements (8,016) than definite violations (6,349), and 92% of them were contrast checks on text over images, gradients or layered backgrounds. Our guide to what automated accessibility testing can't catch breaks these down.
Focus hidden by sticky elements. WCAG 2.2 added SC 2.4.11 Focus Not Obscured: when a control has keyboard focus, it must not be completely hidden by content the site added. We tabbed forward and backward through each homepage, without dismissing any banner, as a first-time keyboard user would.
| What covered the focused element | Homepages affected |
|---|---|
| Sticky headers, nav bars and other fixed elements | 48 (23.1%) |
| Cookie and consent banners | 21 (10.1%) |
| Pop-up modals (newsletter, promotion, age gate) | 13 (6.2%) |
| Any of the above | 72 (34.6%) |
We only counted cases where the covering element was itself position: fixed or sticky. Elements covered by something we couldn't identify were left out, so these numbers are conservative. The fixes are mostly one-line CSS, covered in our WCAG 2.2 checklist.
Images, Zoom and Overlays
| Metric | Result |
|---|---|
| Images classified (rendered DOM) | 14,321 (median 31 per homepage) |
Homepages with ≥1 image missing an alt attribute | 28.3% |
| Homepages with an image-only link or button that has no name | 32.0% |
| Images whose alt text is a file name | 2.5% of images |
| Homepages that disable pinch-zoom | 11.9% |
| Homepages loading an accessibility overlay (separate sample of 5,147) | 1.4% |
Overlays deserve a footnote. In a separate test of 62 overlay sites, measured with the overlay running and with it blocked, the overlay made no measurable difference to axe-core results on 90% of them. The details are in our article on whether accessibility overlays work. For alt-text patterns, see our guide on how to write alt text.
How This Compares to Other Research
The best-known long-running benchmark is the WebAIM Million, which tests the homepages of the top million sites each year with a different engine (WAVE). Its methodology, rule set and sample differ from ours, so the numbers shouldn't be compared one to one. The direction is the same, though. In every large study, the overwhelming majority of homepages fail automated checks, and low-contrast text is the most common failure.
Benchmark Your Own Sites
This script reproduces our per-site measurement for any list of URLs (your own properties, competitors or client sites) and writes a CSV with violations, needs-review counts and the top rules.
#!/usr/bin/env python3
"""Benchmark accessibility across many sites with axe-core and write a CSV.
Reproduces the per-site measurement used in our 2026 accessibility statistics study:
Chromium at 1366x900, load + 3 s settle, axe-core 4.10.2 with WCAG 2.0/2.1/2.2 A+AA tags.
One row per URL: violations, needs-review items, and failing elements per rule.
Usage: pip install playwright && playwright install chromium
python3 a11y_benchmark.py urls.txt > results.csv # one URL per line
"""
import asyncio, csv, sys
from playwright.async_api import async_playwright
AXE_CDN = "https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.10.2/axe.min.js"
RULES = ["color-contrast", "link-name", "target-size", "image-alt", "button-name",
"meta-viewport", "label", "html-has-lang", "list", "aria-hidden-focus"]
async def audit(browser, url, sem):
async with sem:
ctx = await browser.new_context(viewport={"width": 1366, "height": 900}, bypass_csp=True)
page = await ctx.new_page() # bypass_csp: a strict CSP would block the axe <script> tag
try:
resp = await page.goto(url, wait_until="load", timeout=35000)
await page.wait_for_timeout(3000)
if resp and resp.status >= 400:
return {"url": url, "error": f"HTTP {resp.status}"}
await page.add_script_tag(url=AXE_CDN)
r = await page.evaluate("""async () => {
const r = await axe.run(document, {runOnly: {type: 'tag',
values: ['wcag2a','wcag2aa','wcag21a','wcag21aa','wcag22aa']}});
const m = l => Object.fromEntries(l.map(v => [v.id, v.nodes.length]));
return {v: m(r.violations), i: m(r.incomplete)};
}""")
row = {"url": url, "error": "",
"violating_elements": sum(r["v"].values()), "rules_failed": len(r["v"]),
"needs_review_elements": sum(r["i"].values())}
row.update({rule: r["v"].get(rule, 0) for rule in RULES})
return row
except Exception as exc:
return {"url": url, "error": type(exc).__name__}
finally:
await ctx.close()
async def main(path):
urls = [l.strip() for l in open(path) if l.strip() and not l.startswith("#")]
async with async_playwright() as pw:
browser = await pw.chromium.launch()
sem = asyncio.Semaphore(4)
rows = await asyncio.gather(*(audit(browser, u, sem) for u in urls))
await browser.close()
fields = ["url", "error", "violating_elements", "rules_failed", "needs_review_elements"] + RULES
w = csv.DictWriter(sys.stdout, fieldnames=fields, restval="")
w.writeheader()
w.writerows(rows)
if __name__ == "__main__":
asyncio.run(main(sys.argv[1]))Sort the CSV by violating_elements to see where you stand, then compare the rule columns with the table above. If your top rules match the population's, the most common WCAG violations guide is the fastest place to start.
How BugViso Measures Accessibility
BugViso uses the same engine and rule tags as this study: a self-hosted axe-core run with the WCAG 2.0, 2.1 and 2.2 A/AA tags, on every audited page, in a fully rendered Chromium session. Each violation is reported with its WCAG criterion, impact level and failing elements, with measured colors and ratios for contrast failures. A mobile device-emulation pass adds tap-target sizing against WCAG 2.5.8 and checks horizontal overflow and viewport settings.
On a multi-page crawl, a rule that fails in a shared header is counted once per site rather than once per page, so the report reflects the real size of the fix list. Results appear in the web report and the PDF report, and scheduled scans show whether the numbers are moving in the right direction. To see where your homepage sits against these statistics, run a free BugViso accessibility scan.
Limitations
- Automated checks only. These numbers count what axe-core can detect. Many WCAG criteria (keyboard operation, focus order, meaningful alt text, captions) need manual testing, so real conformance rates are lower than these figures suggest.
- Homepages only. Inner templates and transactional flows weren't tested.
- One location, one viewport, no login. Geo-targeted content and mobile layouts may differ.
- Excluded sites. Bot-protected sites couldn't be measured, and they skew towards large e-commerce and media brands.
- Random sample of 219. Sub-group figures (rank bands, government and education) carry wide uncertainty.
FAQ
What percentage of websites are accessible?
By automated checks alone, only 12.3% of the homepages we tested had zero detectable WCAG A/AA violations, and even those still had items needing manual review. The share that would pass a full manual WCAG audit is lower still.
What is the most common accessibility error on websites?
Low color contrast (WCAG 1.4.3). It affected 64.4% of homepages and made up 46.9% of all failing elements in our sample.
Are accessibility problems getting better?
A single snapshot can't measure a trend, and this is our first edition. What the data does show is where problems persist. Defects that frameworks and CMSs now guard against were relatively rare: only 4.6% of homepages lacked a page language, and just 6.1% of images had no alt attribute. Contrast, unnamed links and small touch targets remain widespread because they come from design decisions, not markup defaults. We'll repeat the study with the same method so future editions can show the trend.
How many WCAG violations does an average website have?
The median homepage in our sample had 10 failing elements across 3 distinct rules. The mean was 33.7, pulled up by a small group of sites with more than 100.
Can I cite these statistics?
Yes. Please cite "BugViso Website Accessibility Statistics 2026 (219 homepages, axe-core 4.10.2, October 2026)" and link to this page. The method is described above, so others can reproduce it.
Conclusion
Nearly nine in ten homepages fail automated WCAG checks, but four rules account for four-fifths of the failures, and most failing contrast is within a point of passing. That makes accessibility a backlog most teams can clear, starting with the list a BugViso scan produces for their own site.
See where your site stands
Run a free BugViso audit for SEO, speed, accessibility and AI search readiness — with fixes you can ship today.