How to Fix the 10 Most Common Website Accessibility Issues

Practical fixes for the WCAG violations found on the vast majority of websites.

The State of Web Accessibility

According to the WebAIM Million report, which analyzes the homepages of the top 1,000,000 websites, over 95% of homepages have detectable WCAG failures. The average page has over 50 errors. The good news: the most common issues are well-understood and straightforward to fix. Addressing just these 10 issues will resolve the majority of accessibility problems on most websites.

1. Missing Alt Text on Images

WCAG 1.1.1 — Non-text Content (Level A)

Missing or inadequate alt text is the single most common accessibility issue. Screen readers rely on the alt attribute to describe images to users who cannot see them. Without it, the screen reader either skips the image entirely or reads the file name, which is rarely helpful.

The Fix

Add a descriptive alt attribute to every <img> element:

<!-- Bad: no alt text -->
<img src="chart.png">

<!-- Good: descriptive alt -->
<img src="chart.png" alt="Bar chart showing 30% revenue growth in Q1 2026">

<!-- Decorative image: empty alt -->
<img src="decorative-divider.png" alt="">

For decorative images (borders, spacers, background patterns), use alt="" so screen readers skip them. Never omit the alt attribute entirely.

2. Low Color Contrast

WCAG 1.4.3 — Contrast (Minimum) (Level AA)

Low contrast between text and its background makes content difficult or impossible to read for users with low vision, color blindness, or even users in bright sunlight. This is the second most common violation found across the web.

The Fix

Ensure text meets minimum contrast ratios:

<!-- Bad: light gray on white (contrast ~2:1) -->
<p style="color: #aaaaaa; background: #ffffff">Hard to read</p>

<!-- Good: dark gray on white (contrast ~7:1) -->
<p style="color: #333333; background: #ffffff">Easy to read</p>

3. Missing Form Labels

WCAG 1.3.1 — Info and Relationships (Level A)

Form inputs without programmatically associated labels are unusable for screen reader users. The user hears “edit text” but has no idea what the field is for. Placeholder text is not a substitute for a label — it disappears when the user starts typing and is not reliably announced by all screen readers.

The Fix

<!-- Bad: no label -->
<input type="email" placeholder="Your email">

<!-- Good: explicit label -->
<label for="email">Email address</label>
<input type="email" id="email">

<!-- Also good: aria-label for visual hiding -->
<input type="email" aria-label="Email address">

4. No Skip Navigation

WCAG 2.4.1 — Bypass Blocks (Level A)

Keyboard users must tab through every navigation link on every page before reaching the main content. On a site with 20+ navigation links, this is extremely tedious. A “skip to content” link at the top of the page lets them jump directly to the main content area.

The Fix

<!-- Add as the first element in body -->
<a href="#main-content" class="skip-link">Skip to main content</a>

<!-- Style to show only on focus -->
<style>
.skip-link {
  position: absolute;
  top: -40px;
  left: 0;
  background: #000;
  color: #fff;
  padding: 8px;
  z-index: 100;
}
.skip-link:focus { top: 0; }
</style>

<main id="main-content">...</main>

5. Inaccessible Dropdown Menus

WCAG 2.1.1 — Keyboard (Level A)

Dropdown menus that open on hover but not on focus are completely inaccessible to keyboard users. Custom dropdown components often lack proper ARIA attributes, making them opaque to screen readers.

The Fix

Ensure dropdowns open on both hover and focus/keyboard interaction. Use proper ARIA attributes:

<button aria-expanded="false" aria-haspopup="true">
  Products
</button>
<ul role="menu" hidden>
  <li role="menuitem"><a href="/product-a">Product A</a></li>
  <li role="menuitem"><a href="/product-b">Product B</a></li>
</ul>

Toggle aria-expanded and the hidden attribute with JavaScript on both click/Enter and focus events.

6. Missing Focus Indicators

WCAG 2.4.7 — Focus Visible (Level AA)

Many designers remove the default browser focus outline (outline: none) because they consider it visually unappealing. Without a visible focus indicator, keyboard users cannot tell which element is currently selected.

The Fix

<!-- Bad: removing focus with no alternative -->
<style>
*:focus { outline: none; }
</style>

<!-- Good: custom focus style -->
<style>
*:focus-visible {
  outline: 2px solid #4f46e5;
  outline-offset: 2px;
}
</style>

Using :focus-visible instead of :focus shows the outline only for keyboard navigation, not mouse clicks, satisfying both designers and accessibility requirements.

7. Auto-Playing Media

WCAG 1.4.2 — Audio Control (Level A)

Audio or video that plays automatically can be disorienting for screen reader users (it talks over their screen reader) and distressing for users with cognitive disabilities. If auto-play is used, audio must be muted by default or a mechanism to stop it must be provided within the first 3 seconds.

The Fix

<!-- Good: muted autoplay -->
<video autoplay muted>
  <source src="hero.mp4" type="video/mp4">
</video>

<!-- Better: no autoplay -->
<video controls>
  <source src="hero.mp4" type="video/mp4">
</video>

8. Non-Descriptive Links

WCAG 2.4.4 — Link Purpose (Level A)

Links that say “Click here,” “Read more,” or “Learn more” without context are meaningless to screen reader users who navigate by pulling up a list of all links on the page. Each link’s purpose must be clear from its text alone or its surrounding context.

The Fix

<!-- Bad -->
<a href="/report">Click here</a>

<!-- Good -->
<a href="/report">Download the 2026 accessibility report</a>

<!-- Also good: aria-label for visual brevity -->
<a href="/report" aria-label="Download the 2026 accessibility report">
  Download report
</a>

9. Missing Heading Hierarchy

WCAG 1.3.1 — Info and Relationships (Level A)

Screen reader users navigate long pages by jumping between headings. When headings skip levels (h1 directly to h3), use headings purely for styling (h4 used because it’s small, not because it’s a fourth-level heading), or are missing entirely, the page structure becomes confusing and navigation breaks down.

The Fix

<!-- Bad: skipped levels -->
<h1>Page Title</h1>
<h3>Section</h3>  <!-- h2 skipped -->

<!-- Good: sequential hierarchy -->
<h1>Page Title</h1>
<h2>Section</h2>
<h3>Subsection</h3>

Use CSS for visual sizing, not heading levels. Every page should have exactly one <h1>.

10. Inaccessible PDFs

WCAG 1.1.1, 1.3.1, 2.4.2 — Multiple Criteria

PDFs are often scanned images with no text layer, making them completely invisible to screen readers. Even text-based PDFs frequently lack proper structure tags, reading order, and alt text for images.

The Fix

Find These Issues on Your Site

AccessCheck by NormSuite automatically detects 7 of these 10 issues (alt text, contrast, labels, focus, headings, links, and page structure) in a 60-second scan. Start with an automated scan to identify the low-hanging fruit, then follow up with manual testing for dropdowns, skip navigation, and PDFs.

Scan for Accessibility Issues Free

Frequently Asked Questions

What are the most common accessibility issues on websites?

The most common issues are: missing alt text on images, low color contrast, missing form labels, no skip navigation link, inaccessible dropdown menus, missing focus indicators, auto-playing media, non-descriptive link text, missing heading hierarchy, and inaccessible PDF documents.

How do I add alt text to images?

Add an alt attribute to every img element. For informative images, describe the content (alt="Chart showing 30% revenue growth"). For decorative images, use an empty alt (alt="") so screen readers skip them.

What color contrast ratio is required for accessibility?

WCAG 2.1 AA requires a minimum 4.5:1 contrast ratio for normal text and 3:1 for large text (18pt or 14pt bold). Use a contrast checker tool to verify your color combinations meet these minimums.

Can automated tools find all accessibility issues?

No. Automated tools catch about 30–50% of WCAG issues, primarily structural ones like missing alt text, low contrast, and missing labels. Manual testing with keyboard and screen readers is needed to catch interaction and context issues.