How to Make Your WordPress Website Accessible: A Complete WCAG 2.1 Remediation Guide

WCAG Repair Team

If your WordPress website isn't accessible, you're not just excluding millions of users with disabilities — you're exposing your business to real legal risk. ADA-related web accessibility lawsuits topped 4,600 in 2023, with small and mid-sized businesses increasingly in the crosshairs. The good news: most WordPress accessibility failures are fixable without a full rebuild. This guide walks you through the most common WCAG 2.1 violations, how to find them, and exactly how to remediate them.

Why WordPress Sites Struggle with Accessibility

WordPress powers over 43% of the web, but its flexibility is a double-edged sword. Themes apply inconsistent heading structures. Page builders inject div soup with no semantic meaning. Contact form plugins render inputs without labels. The result: a site that looks polished but fails screen readers, keyboard users, and anyone relying on assistive technology.

WordPress website accessibility isn't a plugin you install and forget. It requires deliberate decisions at the theme level, the content level, and the code level.


The Most Common WCAG 2.1 Failures in WordPress

1. Missing or Broken Keyboard Navigation

WCAG 2.1 Success Criterion 2.1.1 requires that all functionality be operable via keyboard alone. Most WordPress themes break this in two ways:

  • Focus styles are removed with outline: none in CSS
  • Custom dropdown menus and modals trap keyboard focus

The fix for focus styles:

/* Remove this from your theme's CSS */
*:focus {
  outline: none;
}

/* Replace with a visible, high-contrast focus indicator */
*:focus-visible {
  outline: 3px solid #005fcc;
  outline-offset: 2px;
}

For navigation menus, make sure dropdown items are reachable with Tab and closable with Escape. If you're using a custom JS menu, add proper keyboard event handlers:

document.querySelectorAll('.menu-item-has-children > a').forEach(item => {
  item.addEventListener('keydown', function(e) {
    if (e.key === 'Enter' || e.key === ' ') {
      e.preventDefault();
      this.nextElementSibling.classList.toggle('open');
    }
  });
});

2. Images Without Alt Text

This is the most commonly cited WCAG failure (Success Criterion 1.1.1). WordPress lets you add alt text in the media library — but it doesn't enforce it, and many themes display images from custom fields or CSS backgrounds that bypass the media library entirely.

Rules for alt text:
- Decorative images: use alt="" (empty, not missing)
- Informative images: describe what the image communicates, not what it looks like
- Images of text: include the text verbatim in the alt attribute

<!-- Wrong -->
<img src="cta-banner.jpg">

<!-- Wrong for decorative -->
<img src="divider.png" alt="decorative divider">

<!-- Correct for decorative -->
<img src="divider.png" alt="" role="presentation">

<!-- Correct for informative -->
<img src="team-photo.jpg" alt="The WCAGRepair team at our 2024 offsite in Austin, TX">

3. Form Fields Without Labels

Contact Form 7, WPForms, Gravity Forms — all can generate inaccessible markup if configured incorrectly. Placeholder text is not a substitute for a label. Screen readers often skip it, and it disappears when the user starts typing.

<!-- Wrong -->
<input type="email" placeholder="Email address">

<!-- Correct -->
<label for="user-email">Email address</label>
<input type="email" id="user-email" name="email">

<!-- Also acceptable: aria-label for visually hidden labels -->
<input type="email" aria-label="Email address" placeholder="Email address">

Check every form on your site. If you're using a plugin, look for accessibility settings or consider switching to a plugin that generates semantic markup by default.


4. Insufficient Color Contrast

WCAG 2.1 Level AA requires a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text (18pt+ or 14pt bold). Light gray text on white backgrounds — a popular design trend — almost universally fails this requirement.

Use the WebAIM Contrast Checker or browser DevTools to test your palette. For a quick fix in WordPress, you can override theme colors in your child theme:

/* Example: fixing low-contrast body text */
body {
  color: #333333; /* contrast ratio ~12.6:1 on white */
}

/* Example: fixing a light gray subheading */
.entry-subtitle {
  color: #595959; /* contrast ratio ~7:1 on white */
}

Users who navigate by keyboard have to Tab through your entire header and menu on every single page — unless you provide a skip link. This is a WCAG 2.4.1 requirement and takes about five minutes to implement.

Add this as the first element inside <body> in your theme's header.php:

<a class="skip-link screen-reader-text" href="#main-content">Skip to main content</a>
.skip-link {
  position: absolute;
  left: -9999px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

.skip-link:focus {
  position: static;
  width: auto;
  height: auto;
  overflow: visible;
  padding: 8px 16px;
  background: #005fcc;
  color: #ffffff;
  font-weight: bold;
  z-index: 9999;
}

How to Audit Your WordPress Site for Accessibility Issues

Manual testing catches what automated tools miss, but automated tools are where you start. Here's a practical audit process:

  1. Run an automated scan — tools like Axe, WAVE, or wcagrepair.com identify code-level failures across your entire site
  2. Test with keyboard only — unplug your mouse and navigate your site using Tab, Shift+Tab, Enter, and arrow keys
  3. Test with a screen reader — NVDA (free, Windows) or VoiceOver (built into Mac/iOS) will expose missing labels, poor heading structure, and broken ARIA
  4. Check your heading hierarchy — every page should have one H1, and subheadings should nest logically (H2 → H3, not H1 → H4)
  5. Validate color contrast on your most-visited pages

Prioritize by Impact

Not all violations are equal. Fix these first:

  • Missing form labels (blocks task completion entirely)
  • Keyboard traps (users literally cannot proceed)
  • Missing alt text on meaningful images
  • Broken skip navigation

Staying Compliant as Your Site Grows

WordPress website accessibility isn't a one-time project. Every new blog post with an untagged image, every new contact form, every theme update can introduce regressions. Build accessibility into your editorial workflow:

  • Add alt text to every image at upload time
  • Use heading styles (H2, H3) semantically, not for visual size
  • Test new page templates before they go live
  • Include accessibility acceptance criteria in any developer brief

The legal standard for WordPress website accessibility in the US is WCAG 2.1 Level AA, per DOJ guidance issued in 2024. Courts have increasingly accepted this as the benchmark for ADA compliance. Ignoring it isn't a calculated risk — it's an unmanaged one.


Fix It Before It Becomes a Problem

Most WordPress website accessibility failures are mechanical: missing attributes, wrong CSS values, a skipped label. They're tedious to find but straightforward to fix once you know where they are.

Scan your site for free at wcagrepair.com and see exactly where you stand. For $8.99, you'll get a full remediation guide with the exact code fixes mapped to your specific site — not generic advice, but the actual changes your pages need. It's the fastest path from broken to compliant.

Ready to scan your site?

Find and fix WCAG accessibility issues with our AI-powered scanner.

Scan Now