The 6 most common accessibility errors, and how to fix them
The most common accessibility errors are low-contrast text, missing alt text, missing form labels, empty links, empty buttons and a missing page language. In WebAIM's February 2026 analysis of one million home pages, these six categories made up 96% of detected errors, and pages averaged 56.1 errors each.
Published . Last reviewed .
The standard reference for what goes wrong on real websites is the WebAIM Million, an annual analysis of one million home pages. Its February 2026 results are the figures on this page, and they come from WebAIM's report. Across the one million home pages, WebAIM detected 56,114,377 distinct accessibility errors, an average of 56.1 per page, and 96% of all errors detected fell into six categories. WebAIM also reports that 95.9% of the home pages had detected WCAG 2 failures.
Those six are also among the most fixable. Each one has a short, well-understood repair, and most can be found by a tool. That makes them the efficient place to start. They are not the whole of accessibility, as the last section explains.
| Error | Home pages affected | WCAG criterion | GotAlt tool |
|---|---|---|---|
| Low-contrast text | 83.9% | 1.4.3 | Contrast checker |
| Missing alternative text | 53.1% | 1.1.1 | Free scan |
| Missing form input labels | 51% | 3.3.2, 1.3.1 | Free scan |
| Empty links | 46.3% | 2.4.4, 4.1.2 | Link text checker |
| Empty buttons | 30.6% | 4.1.2 | Free scan |
| Missing document language | 13.5% | 3.1.1 | Free scan |
1. Low-contrast text (83.9% of home pages)
What it is. Text whose color is too close to its background to read comfortably, especially for people with low vision or in bright light. Light gray on white is the classic case.
The criterion. Text needs a contrast ratio of at least 4.5:1, or 3:1 for large text, meaning 18 point or larger, or 14 point or larger and bold (WCAG 1.4.3 Contrast (Minimum), Level AA). W3C notes the ratios are thresholds and are not rounded, so 4.499:1 fails. Logotypes and disabled controls are exempt. Read more in WCAG 1.4.3 explained.
/* Failing: 2.85:1 on white */
.note {
color: #999999;
background: #ffffff;
}
/* Fixed: 4.54:1 on white */
.note {
color: #767676;
background: #ffffff;
}
How to find it. The color contrast checker measures any pair of colors and suggests the nearest color that passes. For text sitting on a photo, gradient or screenshot, use the image contrast checker. To measure the text painted on a live page, run the bookmarklet; text over images is listed for you to check yourself. The free scan cannot find this error, because it reads HTML and never paints the page. The full method is in the color contrast guide.
2. Missing alternative text (53.1%)
What it is. An image with no text alternative, so a screen reader announces a filename or nothing at all.
The criterion. All non-text content that is presented to the user needs a text alternative that serves the equivalent purpose, and pure decoration must be implemented so that assistive technology can ignore it (WCAG 1.1.1 Non-text Content, Level A). See WCAG 1.1.1 explained.
<!-- Failing: no alt attribute -->
<img src="boot.jpg">
<!-- Fixed: informative image -->
<img src="boot.jpg"
alt="Red leather ankle boot">
<!-- Fixed: decorative image -->
<img src="swirl.png" alt="">
How to find it. The free scan flags images with no alt attribute and alt text that is only a filename or placeholder such as "image". Presence is not the same as truth, though: an attribute can exist and still describe the wrong picture. The alt text checker downloads the image and checks whether the description matches it, and the alt text generator drafts a description for you to edit. Guidance on writing it is in the complete guide to alt text and alt text examples.
3. Missing form input labels (51%)
What it is. A form field with no label that is programmatically connected to it. A placeholder is not enough: it disappears as soon as someone types, and not every assistive technology treats it as a label.
The criterion. Labels or instructions must be provided when content requires user input (WCAG 3.3.2 Labels or Instructions, Level A). The connection between a label and its field is also part of WCAG 1.3.1 Info and Relationships and WCAG 4.1.2 Name, Role, Value, both Level A.
<!-- Failing: placeholder only -->
<input type="email"
placeholder="Email">
<!-- Fixed: a connected label -->
<label for="email">Email</label>
<input type="email" id="email">
How to find it. The free scan flags form fields with no label. The bookmarklet checks the rendered page and also flags fields labeled only by their placeholder. Whether the label wording is clear, and whether errors are explained, needs a person; the manual testing routine includes a form check.
4. Empty links (46.3%)
What it is. A link with no text a screen reader can announce. It is usually an icon, an image with empty alt text, or a link wrapped around nothing, so it is announced as just "link".
The criterion. The purpose of each link must be determinable from the link text alone or from the text together with its programmatic context (WCAG 2.4.4 Link Purpose (In Context), Level A), and every interface component needs a name that software can read (WCAG 4.1.2, Level A).
<!-- Failing: icon link, no name -->
<a href="/cart">
<svg>...</svg>
</a>
<!-- Fixed: the link has a name -->
<a href="/cart"
aria-label="View cart">
<svg aria-hidden="true">...</svg>
</a>
How to find it. Paste your HTML into the link text checker, which flags links with no text and no aria-label, generic text such as "click here", bare URLs and identical text pointing at different places. The free scan and the bookmarklet also flag links with no accessible name. Whether a name is specific enough is a judgment call for a person.
5. Empty buttons (30.6%)
What it is. A button with no accessible name, typically an icon-only control for search, menu or close. A screen reader announces "button" and nothing more.
The criterion. The name and role of every user interface component must be programmatically determinable (WCAG 4.1.2 Name, Role, Value, Level A).
<!-- Failing: icon-only button -->
<button>
<svg>...</svg>
</button>
<!-- Fixed: it has a name -->
<button aria-label="Search">
<svg aria-hidden="true">...</svg>
</button>
How to find it. The free scan flags buttons with no accessible name, and so does the bookmarklet on the rendered page. Submit and reset inputs have a default name and are not flagged. Check that each label matches what the control does.
6. Missing document language (13.5%)
What it is. An <html> element with no lang attribute. Assistive technology needs it to know which human language the page is written in.
The criterion. The default human language of each page must be programmatically determinable (WCAG 3.1.1 Language of Page, Level A).
<!-- Failing -->
<html>
<!-- Fixed -->
<html lang="en">
How to find it. The free scan flags a page whose language is not declared, and the bookmarklet flags a missing, empty or implausible lang. It is usually a one-line fix in the theme or template, and it fixes every page at once.
Why this order, and what the six do not tell you
In WebAIM's data, these six categories made up 96% of the errors its automated analysis detected on home pages, so fixing them removes most of that kind of error from a typical page. It does not make a page meet WCAG, and the mix on your site may differ. The figures count errors that were detected on home pages. Keyboard traps, focus order, reading order, whether alt text is true, and how a screen reader announces a page are not in them, because they are hard or impossible for a scanner to find. Our methodology page lists what static checks cannot see.
A sensible sequence is the one this page already follows. Set the page language first, since it is a single line. Add names to icon links and buttons next, label every form field, then work through alt text and contrast, which take longer. The ordered plan in how to make a website accessible adds headings, keyboard use, media and a statement. When you are done, test the result with people, not just tools. If your site runs on a hosted platform, the platform guides show where each fix lives: Shopify, WordPress, Wix, Squarespace and Webflow.
A clean scan is not a pass
Statistics describe the web in general, not your site, and no tool can certify that a site meets WCAG or any law. For the laws that may apply to you, see the laws hub; it is general information, not legal advice.
Questions about common accessibility errors
What is the most common accessibility error?
Low-contrast text. WebAIM's February 2026 analysis of one million home pages found it on 83.9% of them, ahead of missing alternative text (53.1%), missing form input labels (51%), empty links (46.3%), empty buttons (30.6%) and missing document language (13.5%) (WebAIM Million).
How many accessibility errors does the average web page have?
WebAIM detected an average of 56.1 errors per home page in February 2026, and 96% of all errors detected fell into the six categories on this page. That is an average across the one million home pages WebAIM analyzed, not a figure for your site.
Will fixing these six errors make my site accessible?
No. It addresses the categories that made up most of the errors WebAIM detected, but it will not make your site meet WCAG. These are the errors that were detected automatically. Keyboard use, reading order, screen reader behavior and the truth of alt text need people to check. See how to test website accessibility.
Why does the free scan not report low contrast?
Contrast depends on the final painted colors, which need a rendering engine. The free scan reads the HTML your server sends and has no way to compute them. Use the color contrast checker for a pair of colors, or the bookmarklet to measure the text on a live page.
Is alt text that exists always good enough?
No. An alt attribute can be present and still be a filename, a vague word or a description of a different image. A rule-based scan can tell it is there; telling whether it is true takes looking at the picture, which a person or a vision model has to do.
Which fix gives the biggest return for the least work?
Declaring the page language is one line in a template and fixes every page. Naming icon-only links and buttons is usually a few template edits that also fix every page. Contrast and alt text take longer, but contrast fixes in a shared stylesheet also apply site-wide.
See which of the six your site has
The free scan runs 16 rule-based WCAG checks on up to three pages of your site, including missing alt text, form labels, empty links and buttons, and page language. No signup.
Scan my site for free