Case study · website accessibility

How do you take a law firm’s website from 4,499 accessibility failures to zero?

You fix the template first, not the pages. Almost every failure on a WordPress site repeats on every page, so a handful of fixes to the shared parts clears thousands of flagged elements at once. Then come the one-off fixes, a round of testing by hand that no scanner can do, and a written accessibility statement.

I build and fix websites. I’m not a lawyer, and nothing here is legal advice.

4,499failing elements before
0after, on all 90 page views
45pages, desktop and phone
591intake form fields now announced by name

Where it started

The firm is a two-partner practice near Miami that handles employment law and bankruptcy. Its site is WordPress on a custom theme another developer built, with three long intake questionnaires that new clients fill out online.

I sent the firm a short review on October 10, 2026, after sampling seven pages. It didn’t meet WCAG 2.1 Level AA, the standard most often used to judge whether a website is accessible. The firm asked me to fix it.

Before touching anything, I scanned all 45 published pages, at a desktop width and a phone width. That came to 4,499 failing elements across eight kinds of problem.

What was failing

ProblemWCAGBeforeAfterThe fix
Text too faint against its background1.4.3 Contrast4,1110A deeper gold for text on light backgrounds, dark text on the gold buttons
Map frames with no title4.1.2 Name, Role, Value920A title on every embedded frame, added in one shared function
A closed mobile menu the keyboard could still reach2.4.3 Focus Order900The closed menu taken out of the tab order entirely
A chat bubble that wasn't a real button2.1.1 Keyboard900Rebuilt as a button that opens and closes from the keyboard
A phone button whose spoken name didn't match its text2.5.3 Label in Name900The spoken label now matches what's on screen
Form fields with no label1.3.1 / 3.3.2 Labels120Every field connected to its label
Image links with no text2.4.4 Link Purpose120Each image named for the post it links to
A step bar the keyboard couldn't scroll2.1.1 Keyboard20Made reachable and scrollable from the keyboard

Contrast was nine in ten of everything flagged. The brand gold measured 2.24 to 1 against white, and the standard asks for 4.5 to 1. Gold text on light backgrounds now uses a deeper gold at 5.65 to 1, and the gold buttons kept their color with dark text on top at 7.6 to 1. On the dark photo banners the original gold already read fine, so it stayed there.

Why the template came first

Five of the eight problems showed up on every single page, because they lived in the header, the footer and the chat bubble. Fixing them page by page would have meant 45 rounds of the same work. Fixing the template once fixed them everywhere.

I put the changes in two new files that load after everything else, plus small edits to the existing theme. That made each fix easy to find, easy to test and easy to undo. I saved a copy of the theme as I found it before changing anything.

Color was the one change visitors would actually see, so I made that call carefully. I kept the bright gold on the buttons and put dark text on top, instead of darkening the gold itself, since it kept the site closest to what it was.

What the scanner couldn’t see

Automated tools catch part of what WCAG covers. The rest takes a person with a keyboard, so I tabbed through the whole site without a mouse. That turned up problems the scan never reported.

  • One of the menu’s sections couldn’t be reached from the keyboard at all, which put two of the intake questionnaires out of reach.
  • The questionnaires hide their later steps until you get to them, so the scanner never checked them. About 225 fields had a label sitting next to them that wasn’t connected, so a screen reader announced a blank box. Errors showed up on screen but were never announced.
  • A photo band near the bottom of the home page had white text on a pale gold layer over a light photo, at roughly 1.5 to 1. Scanners can’t measure text over a photo, so it never showed up in the numbers.
  • The home page video and the testimonial slider moved on their own with no way to pause them.

All of it is fixed. Every one of the 591 questionnaire fields is announced by its label now, errors are read out with focus moved to the first one, and each step change says where you are. I also checked every page at 320 pixels wide, the width that stands in for 400% zoom, and with enlarged text spacing.

The accessibility statement

The site didn’t have one, so I wrote it. It names the standard, says what was tested and when, lists what’s outside the firm’s control, and gives a phone number, email and mailing address for anyone who runs into a problem.

A few lines in it are promises only the firm can make, like helping someone finish a questionnaire by phone. I flagged those for the owner, and the owner approved them. A statement doesn’t make a site accessible on its own. It tells people what you did and how to reach you when something still gets in their way.

Keeping it at zero

The final scan came back with zero failures on all 90 page views on October 20, 2026. That’s a measurement on a date, not a permanent state. New images need a description, a new video needs captions, and a theme update from another developer could undo the fixes, so the firm knows where they live.

The site now conforms to WCAG 2.1 Level AA as tested on that date with automated scans and the manual checks above. It should be checked again after any big content or design change.

Want to know where your firm’s site stands?

Tell me the address and I’ll send back a short review like the one this project started with: what fails, how much of it lives in the template, and what fixing it would take. Free, no meeting required.