Home / Case study
AODA compliance case study
232 accessibility issues to zero, in 17 days.
How we took a busy industrial e-commerce site from hundreds of WCAG failures to a clean sign-off, by fixing the code and testing every template by hand. Client details are kept private; the numbers, process and outcome are real.
- 232 → 0automated issues on the most-visited category page (axe)
- 20 → 0homepage errors, plus roughly 108 contrast errors to zero (WAVE)
- 11templates and page types tested, from homepage to checkout
- 0real issues remaining across every template at sign-off
The challenge
A big catalogue, a hard deadline, and no room for a patch.
The client sells thousands of industrial products online and needed to file its AODA compliance report by December 31, 2026. Someone with authority would have to confirm the website met the standard, and they wanted evidence behind that answer, not a vendor badge.
The first scans were sobering. The homepage had 20 WAVE errors and around 108 contrast failures. The category page, where most shoppers land, had 232 automated issues, 55 of them rated critical and 144 serious. Menus, product galleries, sale prices and checkout fields were all affected.
Rebuilding the site wasn't an option, and an overlay wouldn't have changed a line of the code underneath. The fixes had to go into the site itself, without breaking anything customers relied on.
Results
Before and after, template by template.
Every template customers use, from the homepage to My Account, finished with zero real issues.
| Template | Before | After | Tool |
|---|---|---|---|
| Category page | 23255 critical, 144 serious | 0 | axe |
| Homepage contrast | ~108 | 0 | WAVE |
| Homepage errors | 20 | 0 | WAVE |
| Checkout (logged in) | 13 | 0 | axe |
| Product page | 91 critical | 0 | axe |
| My Account (login, register, errors) | 3 | 0 | axe |
| Cart | 2 | 0 | axe |
| Checkout (guest) | 2 | 0 | axe |
| Contact | 2 | 0 | axe |
| Search results | 1 | 0 | axe |
| About, and My Account orders, addresses and details | 0 | 0 | axe |
How to read these numbers
"Real issues" leaves out two kinds of automated flag: the WordPress admin toolbar, which only logged-in staff ever see, and a rotating banner that the scanner caught mid-fade. That banner's real colours pass comfortably.
The homepage baseline was taken before any changes. The cart, checkout, My Account and search "before" counts were taken after the shared header and footer had already been fixed, so they understate how those pages started. Contrast counts on the homepage varied a little between scans because rotating banners change what's on screen, so we've shown an approximate figure.
Automated scans used axe with WCAG 2.1 AA rules and best practices on, plus WAVE. Every template was also tested by hand, as described below.
What we fixed
Fixed in the site itself, where updates can't undo it.
Changes went into the theme settings, the page templates, page content and a handful of small, clearly labelled code snippets. No core plugin or theme files were edited, so routine updates won't overwrite the work.
Navigation and structure
- A visible "Skip to main content" link and a proper main landmark
- One H1 per page, and heading levels corrected site-wide
- Menu items that pointed to "#" now go to real pages
- Pinch-zoom switched back on for phones
Keyboard and focus
- A clear focus outline on every link, button and field
- Pagination rebuilt as real buttons that work with Tab and Enter
- A hidden gallery link that trapped keyboard focus removed
- A play and pause control added to the autoplaying video
Names, labels and announcements
- Alt text for logos, icons and product tiles; decorative images skipped
- Names for icon-only buttons: search, slider arrows, social icons, gallery links
- Labels for search, sort, quantity, newsletter and checkout fields
- Login, cart and checkout errors announced correctly
Colour and contrast
- Sale badges and sale prices brought up to the 4.5 to 1 minimum
- Form, placeholder, pagination and footer text fixed
- Links in body text underlined, so they don't rely on colour
- All within the client's existing brand colours
How we tested
Two tools, then a person, then again.
Automated scans
axe DevTools and WAVE on the live site, with server and CDN caches cleared first, re-run after every fix.
Keyboard only
Skip link, menus, search, pagination, add to cart, the full checkout including validation errors, login errors and the chat widget. No keyboard traps found.
Screen reader
VoiceOver on Safari for headings, landmarks, link names, form labels, product details and error announcements.
Zoom, mobile and browsers
200% zoom without sideways scrolling, pinch-zoom and checkout on phones, and Chrome, Safari and Firefox.
Being honest about limits
What we flagged instead of hiding.
Some parts of any real website belong to other vendors. A third-party search tool, a Google address lookup at checkout, a live chat bubble and reCAPTCHA all ship their own code. Where we could correct their output safely, we did, and we documented which fixes depend on those vendors keeping their markup the same.
Where a fix needed a business decision, like changing how address autofill behaves at checkout, we wrote it up and left the call with the client. A short "keeping it compliant" guide and a content checker for staff help keep the site where it is.
The client also opted to add a visitor preferences toolbar for text size and contrast. It's a convenience for visitors; none of the results above depend on it.
The outcome
Ready to file, with the evidence on hand.
The client received a written sign-off report covering every template, the before-and-after scan exports, a list of the third-party limits and a plan for keeping the site compliant. Everything they need to answer the website question on their compliance report, and to back it up if Ontario ever asks.
- 17 daysFrom the first baseline scan to sign-off.
- 11 templatesTested by tool and by hand, including the full checkout.
- 0 real issuesRemaining across every template customers use.
Your turn
Want results like these on your site?
Send us your web address. We'll look at it and reply with one fixed price for the audit, the code-level fixes and the re-test.