Aoda Training

Common WCAG Failures & How to Fix Them: 2026 Data & Fixes

95.9% of websites have detectable WCAG failures. The same six errors account for 96% of all issues. This guide explains each one, who it affects, and the exact code fix — based on 2026 WebAIM data.

93% Student Satisfaction (2K ratings)

Quantity Discounts

Price per course

6 to 20 courses

$20.95

21 to 50 courses

$17.95

51 to 200 courses

$13.95

201+ courses

Custom offer

The 2026 WebAIM Million report — the largest automated accessibility snapshot on the web, covering one million home pages — found that 95.9% of pages had detectable WCAG failures, averaging 56.1 errors per page. That is up from 51 the year before, reversing six consecutive years of slow improvement. The same six error types have topped the list for seven consecutive years, accounting for 96% of all detected failures. They are not obscure edge cases. They are preventable with straightforward code changes.

95.9% of pages have detectable WCAG failures ↑ Up from 94.8% in 2025
56.1 average errors per page ↑ Up 10.1% from 51
96% of all errors in top 6 categories Unchanged — same 6 for 7 years
133+ avg ARIA attributes per page ↑ 6× the 2019 figure — pages with ARIA had ~2× more errors
Automated scans detect ~30–40% of actual failures
 
Keyboard traps, focus management failures, inadequate error messages, and screen reader announcement gaps require manual testing to find. The 56.1 errors per page figure is the floor, not the ceiling.
📊️️

The Six Failures That Account for 96% of All WCAG Errors

#1
Low Contrast Text
83.9% of pages SC 1.4.3 Level AA
Why it happens

Text does not meet 4.5:1 (normal text) or 3:1 (large text / UI components) against its background. Average of 34 instances per page in 2026, up 15% from 2025. Common sources: light grey body text, white on mid-tone buttons, placeholder text, footer text.

Who it affects

Low-vision users, colour-blind users, older adults, anyone reading in bright sunlight.

Fix

Test every text/background colour pair with WebAIM Contrast Checker or TPGi Colour Contrast Analyser. Fix at the design system level. Placeholder text default (#AAAAAA on white = 2.3:1) always fails.

✓ Pass — 7:1
color: #595959; background: #ffffff;
✗ Fail — 2.3:1
color: #aaaaaa; background: #ffffff;
#2
Missing Alternative Text
53.1% of pages SC 1.1.1 Level A
Why it happens

Images have no alt attribute, or have a filename, generic placeholder, or keyword-stuffed text. 44% of missing alt cases involve linked images, creating a navigation failure on top of a content failure.

Who it affects

Blind and low-vision screen reader users; users with images disabled; search crawlers.

Fix

Every <img> needs an alt attribute. Decorative: alt="". Informative: describe what the image communicates. Functional (image links/buttons): describe the action or destination. Complex (charts): short alt + full text description. Images of text: reproduce the visible text verbatim.

✓ Pass
 <img src="team.jpg" alt="Sarah Chen, Head of Accessibility"> 
✗ Fail
 <img src="team.jpg"> or alt="image" 
#3
Missing Form Labels
51.0% of pages SC 3.3.2 / 1.3.1 Level A
Why it happens

Inputs have no <label>, a label with no for/id association, or rely solely on placeholder text that disappears on focus and is not reliably announced as a label.

Who it affects

Screen reader users who hear 'edit text, blank'. Speech recognition users who cannot activate fields by speaking the visible label. Cognitive disability users who lose context when placeholder disappears.

Fix

Every input needs a <label> with a matching for/id, or be wrapped inside a <label>. Placeholder can supplement but never replace the label. For no-visible-label situations use aria-label or aria-labelledby.

✓ Pass
<label for="e">Email</label> <input id="e" type="email">
✗ Fail
<input type="email" placeholder="Email address">
#4
Empty or Non-Descriptive Links
46.3% of pages SC 2.4.4 Level A
Why it happens

Links have no accessible text, or use generic text: 'Read more', 'Click here', 'Here'. Also: icon-only links with no aria-label, and image links where the image has no alt text.

Who it affects

Screen reader users navigating by links list who hear repeated 'Read more' with no destination context. Voice control users who cannot speak a unique command to activate a link.

Fix

Link text must describe the destination without surrounding context. Replace 'Read more' with the article title. Add aria-label to icon-only <a> elements. Add '(opens in new tab)' for target="_blank" links.

✓ Pass
<a href="/report">Download the 2026 AODA Compliance Report</a>
✗ Fail
<a href="/report"> Click here </a>
#5
Empty or Non-Descriptive Buttons
30.6% of pages SC 4.1.2 Level A
Why it happens

Buttons have no accessible name: icon-only <button> with no text or aria-label (hamburger, close, search, share); buttons containing only an unlabelled image; <div>/<span> elements acting as buttons with no role or name.

Who it affects

Screen reader users who hear 'button' with no action context. Keyboard users who cannot determine a button's purpose. Voice control users who cannot activate an unnamed button.

Fix

Add aria-label="[action]" to icon-only buttons, or place a visually-hidden <span> with the action text inside the button. Replace <div>/<span> buttons with native <button> elements. Add aria-hidden="true" to decorative icon fonts.

✓ Pass
<button aria-label="Close menu"> <svg aria-hidden="true">...</svg> </button>
✗ Fail
<button> <svg>...</svg> </button>
#6
Missing Document Language
13.5% of pages SC 3.1.1 Level A
Why it happens

The <html> element has no lang attribute, or an empty or incorrect value. The only failure in the top six showing consistent year-on-year improvement — down from 33.1% in 2019 — but still affecting millions of pages.

Who it affects

Screen reader users whose software uses document language to determine pronunciation engine. Missing lang causes the wrong voice profile, producing incomprehensible speech for some users.

Fix

Add lang="en" (or correct ISO 639-1 code) to the <html> element. Most CMS platforms let you set this in theme settings with no code change required. For multilingual pages, add lang attributes on elements where language changes.

✓ Pass
<html lang="en"> or <html lang="fr">
✗ Fail
<html> or <html lang="">
️🔬️

Beyond Automated Scanning: High-Impact Manual-Only Failures

There are four HTML patterns that create a valid programmatic association between a label and its input. The first two are preferred — they require no ARIA and work reliably across all browsers and assistive technologies.

Failure WCAG criterion Fix summary
Focus indicators removed (outline: none in stylesheet) 2.4.7 (AA) Audit every interactive element with keyboard only; replace global outline removal with :focus-visible styles on every focusable element type
Keyboard focus trapped in component 2.1.2 (A) Manually Tab through all interactive components; verify Escape exits every modal, dropdown, and overlay
Modal opens but focus stays behind it 2.4.3 (A) On open, call focus() on first element inside modal; use inert on background content; return focus to trigger on close
No skip navigation link 2.4.1 (A) Add visually-hidden-until-focused skip link as first DOM element; verify it delivers keyboard focus to main content
Colour is only error indicator 1.4.1 (A) Every validation error must have a text message in addition to any colour change
Error messages not announced to screen readers 3.3.1 (A) Add role="alert" to error summary; add aria-describedby on input referencing its error message; add aria-invalid="true" on failed inputs
Video without captions 1.2.2 (A) All prerecorded video needs accurate synchronized captions; auto-generated captions require human review before publishing
🔄

Why These Failures Persist — and How to Stop Them

The same six failures appear every year because they are introduced at the process level, not just the code level. Low contrast is a design decision. Missing alt text is a content editor decision. Fixing individual instances without changing the process means the same failures return with the next update.

Process fixes that prevent re-introduction

Frequently asked questions

If my site passes an automated scan, is it WCAG compliant?
  • No. Automated tools detect 30–40% of WCAG failures. Keyboard traps, focus management issues, inadequate error messages, incorrect reading order, and screen reader announcement gaps require manual testing. A passing scan means no easily-detectable failures exist. A full WCAG audit requires keyboard-only testing and screen reader evaluation to find the rest.
  • No accessibility overlay can achieve WCAG conformance. Automated tools cannot determine the correct alt text for a specific image, write an error message explaining a validation failure, or make keyboard navigation decisions. The 2026 WebAIM report specifically identifies AI-generated code as a contributing factor to the increase in errors. Tools claiming instant accessibility do not satisfy WCAG requirements.
  • Install axe DevTools and WAVE (both free browser extensions) and run them on your five most visited pages — under an hour, surfaces the majority of automatically-detectable failures. Then navigate those same pages with keyboard only for 30 minutes: Tab, Shift+Tab, Enter, Space, Escape, no mouse. This combination covers most high-impact failures without specialist tools.
     

Get a Full WCAG Audit for Your Website

Automated scans find the failures above quickly. But 60–70% of the accessibility failures on a real website require a specialist. Our audit combines automated scanning with manual keyboard and screen reader testing.