Skip to main content
ShieldStack

ShieldStack

Our own accessibility audit

We audit Shopify stores for WCAG 2.2 AA conformance. We hold our own site to the same standard and we publish the result. If we will not show our own audit, we have no business selling yours.

shieldstack.pro · WCAG 2.2 Level AA · audited 13 June 2026, remediation 15 June 2026

Result

Zero critical. Zero serious. Two moderate findings fixed on 13 June and four low findings fixed on 15 June. The remaining moderate flag, the hero badges, did not reproduce on the VoiceOver pass and is closed. Three advisory notes carry no Level AA impact.

Method

A line-by-line review of the source that renders each of our 14 routes: semantic structure, names and roles, form labels, color values, focus handling and keyboard operability. An axe-core automated pass across the key routes on 15 June surfaced two keyboard-access issues on scrollable tables, both fixed the same day, and this page now reports zero axe violations. The remaining automated contrast flags are false positives on the navy pricing card, where the tool cannot resolve the card background and the measured contrast sits between 8.5:1 and 9.9:1. A partial manual VoiceOver pass on the homepage was run on 13 June. The full manual pass across all routes (keyboard, VoiceOver on Safari, NVDA on Firefox) is the part we do not yet run on every release, and we do not claim coverage we have not run.

Findings

IDSeverityWCAGFindingStatus
M1Low (revised)4.1.2 Name, Role, ValueLogo, every page. Code review flagged a possible duplicate accessible name on the logo. The live VoiceOver pass found it announces once, so it did not reproduce. Wordmark set decorative as hardening.Verified live, hardened 13 Jun
M2Moderate1.3.1 Info and RelationshipsComparison table. Column headers had no scope and row labels were data cells, so header to data association was lost for screen readers.Fixed 13 Jun
M3Moderate4.1.2 / 2.4.4Region switcher, small screens. Below the small breakpoint the visible label is hidden and the flag is decorative, leaving only the title attribute as the accessible name.Fixed 13 Jun
M4Moderate1.3.1 / 4.1.2Hero badges, home and region pages. Code review and an early VoiceOver pass flagged the hero badges (Shopify Partner and the urgency stat) as possibly not announced. Reading from the top of the page, VoiceOver announces both. The badge text was wrapped in spans as hardening.Verified on VoiceOver 15 Jun, not reproduced
L1Low2.4.1 Bypass BlocksAll pages. A skip link existed only on /scan. Landmarks already satisfied the criterion, so this was parity and best practice.Fixed 15 Jun, skip link site-wide
L2Low3.1.1 Language of PageRegion routes. The page language read as a generic en for every route. en is valid so the criterion passed, but /uk and /canada read more accurately as en-GB and en-CA.Fixed 15 Jun, language set per region
L3Low1.4.3 Contrast (Minimum)Featured pricing card. Supporting text in slate-400 on the navy card measured about 4.5:1, right at the AA threshold.Fixed 15 Jun, raised to slate-300
L4Low1.4.11 Non-text ContrastOutline buttons on navy. The button border against navy was below 3:1. The white label identified the control, so this was borderline.Fixed 15 Jun, border contrast raised
A1Advisory (AAA)3.2.5Links that open new tabs. target=_blank without a textual opens in new tab cue. AAA only, no AA impact.Advisory
A2Advisoryn/aHeader nav, mobile. Primary nav links are hidden below the lg breakpoint with no mobile menu. Content stays reachable by scroll and the footer repeats the links.Advisory
A3Advisoryn/aA few CTAs. Hover color equals the base color on a few buttons, so there is no visible hover change. Cosmetic.Advisory

What already holds

  • One main landmark per route, plus header and footer, and a skip link site-wide.
  • Form inputs labelled via useId associations. Email label present though visually hidden.
  • The scan tool announces progress with role=status and aria-live, a real progressbar with values, and errors via role=alert.
  • FAQ uses a definition list. Decorative icons, emojis and SVGs are aria-hidden.
  • Severity is conveyed by text, not color alone. Focus rings on all scan form controls.
  • Region switcher uses role=group and aria-current. Body and heading text contrast pass against their backgrounds.

Want to see a full client-style report?

This page is our own site. For the full deliverable format, with 47 findings ranked by severity, mapped to WCAG criteria and Liquid templates, each with a screenshot and a copy-paste fix, see the anonymized example report.

This documents technical accessibility conformance. It is not legal advice.