Accessibility issues resolved

95 on mobile, 98 on desktop, and 427 accessibility issues down to 143

A growth-stage US nonprofit foundation

HeorImage

The Brief

A nonprofit funding pediatric cardiac innovation came to us with a website she couldn’t change and a date she couldn’t move.

The site sat on WordPress.com. No hosting plan on the account, just domain registrations and a free page builder that WordPress.org can’t install onto. She had a fundraising event on June 29 and needed a real site before it. And she’d told us exactly what she disliked about other nonprofit sites: too many clicks between a visitor and the thing they came to do. Donate. Get in touch. Read the story.

She also runs the organization herself. Whatever we built, she had to be able to edit it without calling a developer.

Accessibility scan, before and after

Full-site scan before the rebuild and after the final round of fixes

Measure
Before
After
Accessibility issues427~143
Issues resolved0280+
Pages affected93%85% -

The Approach

We built a flat HTML prototype first, before touching WordPress.

  1. That decision paid for itself. Three rounds in, after the client had sat with a clickable version, the direction changed to a multi-page site instead of the one-pager, with several sections reorganized. That’s a structural rewrite. In flat HTML it cost days. On a live WordPress build it would have cost weeks we didn’t have.
  2. Accessibility got the same treatment. ADA compliance came up in the first round of structural notes, not as a late request, so we scanned early and worked the list down on a schedule instead of finding a backlog the week of launch.

What we Did

  1. Prototyped in HTML, then rebuilt in WordPress. Eight pages, licensed brand typefaces, anchor navigation, embedded donation form. Client review reshaped it into ten pages: Home, About, Funding, Get Involved, Our Impact, Events, Donate, Contact, plus privacy and terms.

  2. Fixed the friction the client had complained about. Every contact button on the prototype was a dead end at first review. We built a contact form and pointed all of them at it. The Donate button in the nav scrolled to the section above the donation form rather than the form itself — a small miss that costs real donations. We anchored it straight to the embed. Then we went through every button label on the site and rewrote anything that didn’t say where it was about to take you.

  3. Tuned the motion down, twice. The first pass had bounce, zoom, and scale. The feedback was that it read campy. We stripped it to fade and slide-up. The next review flagged the horizontal slides as still too much on desktop — except in one section, where the boxes were large enough that the movement worked. We removed the rest and kept that one.

  4. Ran accessibility as a tracked workstream. Scanned against WCAG 2.2 Level A/AA, then worked the count down across four sessions. Alt text, heading hierarchy, form labels, landmark roles, duplicate titles, link text, contrast.

  5. Migrated off WordPress.com onto self-hosted WordPress. Built on a staging subdomain so the live site never went dark. Pointed the domain over, issued SSL, configured DNS and MX so the organization’s Microsoft 365 email kept flowing through the cutover.

  6. Built the archive the site would need at scale. After launch, the Our Impact page became a searchable post archive: keyword search, filtering across four tags, date sorting, scroll position held on reload. The client expects hundreds of entries eventually, and had asked us to keep the site free of paid plugin dependencies, so we built it custom on free ACF, then put the tradeoffs on the table — what a paid plugin would buy, what custom code would cost, where each one breaks on future updates — and let the client decide with real information rather than a recommendation dressed up as a fact.

  7. Optimized after launch, not instead of it. Stripped unused plugins, compressed assets, cleaned up what the builder left behind.

  8. Handed over something she could run. Visual editor, dashboard walkthrough, reusable post template, admin access, full backup.

Results in Detail

PageSpeed 95 on mobile, 98 on desktop. Largest Contentful Paint at 2.7s mobile and 1.0s desktop. Total Blocking Time at zero on both. Cumulative Layout Shift of 0.026 and 0, which is the part you actually feel: nothing jumps under your thumb while the page loads.

Mobile is the number that counts here. A parent looking up a pediatric cardiac program is doing it on a phone, frequently on a hospital connection, frequently at 2am. A site that stalls at that moment doesn’t get a second visit.

427 accessibility issues down to 143. A 67% reduction. Pages carrying at least one issue fell from 93% to 85%. Empty links, empty headings, redundant link text, redundant alt text, and duplicate page titles all hit zero. Images missing alt text dropped from 60 to 10. Heading-order errors went from 16 to 5, and we got there without changing a single page design.

Screen-reader users can now reach the funding details and the contact form without hitting dead ends. And a nonprofit soliciting public donations sits squarely in the category where ADA web complaints get filed. This closes most of that exposure.

About 20 of the remaining 143 are scanner false positives or defensible under WCAG: a focus outline that already clears contrast at roughly 5.8:1, plugin-generated cookie and reCAPTCHA markup we don’t control, mailto links the scanner reads as documents. Each one is logged with a reason rather than quietly ignored.

Two open items belong to her, not to us. Seventeen notices trace to the cookie plugin’s advertising layer, which can be switched off entirely if the site never runs programmatic ads. Two contrast failures come from the brand coral on white — a slightly darker coral clears AA, but changing a brand color is her call.

Ten pages, zero downtime, live on the date that mattered. Site up June 26. Event June 29.

What the portfolio can do now that it could not before
  • Any change can be trialed on one storefront and rolled to the other three only once it has earned it.
  • The test backlog is grounded in recorded behavior rather than opinion. And every result is read against its confidence interval and its probability of beating control, not against the direction of the arrow.
  • One test cleared significance outright. One moved every metric positive. One is still collecting. Rollout happens on evidence, not on the first green number.

Tools

Tools & technologies

What the build runs on

verified

WordPress
Elementor
ACF
WP-Optimize
Microsoft 365

Book a free 30-minute call and get the three biggest growth opportunities hiding in your numbers.