Making Your Shopify Store ADA Accessible

Step-by-step guide to making your Shopify store WCAG 2.1 AA and ADA compliant — keyboard navigation, screen reader support, color contrast, and accessible forms.

E
ECOSIRE Research and Development Team
|March 19, 202611 min read2.4k Words|

Making Your Shopify Store ADA Accessible

ADA (Americans with Disabilities Act) lawsuits against ecommerce websites increased by 300% between 2020 and 2024, with Shopify stores constituting a growing share of targets. Beyond legal compliance, accessibility directly impacts revenue: approximately 26% of US adults live with a disability, representing $490 billion in purchasing power. An inaccessible store excludes these customers entirely.

This guide covers practical Shopify accessibility implementation: the specific WCAG 2.1 AA criteria that matter most for ecommerce, how to audit your current store, and the fixes that address the most common violations.

Key Takeaways

  • WCAG 2.1 Level AA is the standard required for ADA compliance — not AAA, not just Level A
  • Keyboard navigation must work for every interactive element: navigation, product selection, cart, and checkout
  • Color contrast ratio must meet 4.5:1 for normal text and 3:1 for large text and UI components
  • Screen readers must receive meaningful alt text for all product images and meaningful labels for all form fields
  • Focus indicators must be visually visible — browsers suppress them by default in many themes
  • Shopify's checkout is managed by Shopify and is accessible, but your theme's cart drawer may not be
  • Automated accessibility checkers catch ~30% of issues — manual testing is required for the rest
  • Accessibility overlays (like accessiBe) do not achieve WCAG compliance and increase legal risk

Understanding ADA and WCAG Requirements for Ecommerce

The ADA does not include specific technical standards for websites. Courts have consistently applied the Web Content Accessibility Guidelines (WCAG) as the de facto standard, with Level 2.1 AA being the accepted compliance target in the majority of settlements and rulings.

WCAG 2.1 is organized around four principles (POUR):

  1. Perceivable: Information and UI components must be presentable in ways users can perceive (alternatives for visual content, captions for audio, sufficient contrast)
  2. Operable: UI components and navigation must be operable (keyboard accessible, enough time to complete tasks, no seizure-inducing content)
  3. Understandable: Information and UI operation must be understandable (readable language, predictable behavior, input assistance)
  4. Robust: Content must be robust enough to be interpreted by assistive technologies

The most commonly litigated accessibility violations on ecommerce sites:

ViolationWCAG CriterionFrequency
Missing image alt text1.1.1 Non-text ContentVery High
Insufficient color contrast1.4.3 Contrast (Minimum)High
No keyboard navigation2.1.1 KeyboardHigh
Missing form labels1.3.1 Info and RelationshipsHigh
No focus indicators2.4.7 Focus VisibleHigh
Missing page titles2.4.2 Page TitledMedium
Language not set3.1.1 Language of PageMedium
Inaccessible modal dialogs4.1.2 Name, Role, ValueMedium

Accessibility Audit: Tools and Process

Automated testing tools:

ToolTypeCoverageCost
axe DevToolsBrowser extension~30% of issuesFree (Pro: $279/year)
WAVEBrowser extension + online~30% of issuesFree
Lighthouse AccessibilityChrome DevTools~30% of issuesFree
Deque axe-corenpm package for CI/CD~30% of issuesFree
SiteimproveEnterprise platform~40% of issuesEnterprise pricing

Automated tools find structural issues: missing alt text, missing form labels, contrast failures. They cannot find: meaningful alt text quality, logical keyboard focus order, screen reader experience, cognitive complexity.

Manual testing process:

Step 1 — Keyboard-only navigation test: Disconnect your mouse. Navigate your store using only Tab (forward), Shift+Tab (backward), Enter (activate), Space (select/scroll), and arrow keys (within components). Complete these tasks:

  • Browse to a product category
  • Select a product
  • Choose a size/color variant
  • Add to cart
  • Navigate to cart
  • Proceed to checkout

Every task should be completable with keyboard only.

Step 2 — Screen reader test: Use NVDA (free, Windows) or VoiceOver (built-in, Mac/iOS). Navigate your homepage, a product page, and your cart with the screen reader active. Listen for:

  • Is every image described meaningfully?
  • Are all buttons labeled with their action?
  • Is the reading order logical?
  • Are error messages announced?

Step 3 — Zoom test: Increase browser zoom to 200% and 400%. The page should reflow and remain usable — no horizontal scrolling at 200%, no content overlap, no truncated text.

Step 4 — Color contrast test: Use the axe DevTools or WebAIM Contrast Checker to verify all text meets contrast requirements: 4.5:1 for normal text, 3:1 for large text (18pt+ or 14pt+ bold), 3:1 for UI components (buttons, icons, form borders).


Image Accessibility: Alt Text for Product Images

Alt text is the single most common accessibility violation on Shopify stores. Every image must have alt text that conveys the same information a sighted user would get from viewing the image.

Alt text guidelines for Shopify product images:

Describe what matters for purchase decisions:

  • Product name and key distinguishing features
  • Color, material, and notable visual characteristics
  • Context if shown in use (e.g., "Blue ceramic mug on wooden table")
  • Any text visible in the image

What NOT to do:

  • "image001.jpg" — file names are not alt text
  • "Product image" — generic descriptions convey no information
  • Keyword stuffing — "blue mug blue ceramic coffee mug best blue mug" — this is harmful
  • Describing every minor detail — be concise and relevant

Alt text implementation in Shopify:

Add alt text to product images through the Shopify Admin:

  1. Admin > Products > [Product] > click on an image
  2. Enter alt text in the "Image alt text" field
  3. Save

For bulk alt text updates, use the Shopify bulk editor:

  1. Admin > Products > Select all products > Edit products
  2. Add the "Product image alt text" column
  3. Edit and save

Decorative images:

Pure decorative images (background patterns, decorative dividers) should have empty alt text (alt=""). This tells screen readers to skip the image entirely rather than announcing "image" without description.


Keyboard Navigation: Making Your Store Fully Operable

Keyboard accessibility requires that every interactive element — buttons, links, form fields, dropdown menus, modals — can be reached, activated, and navigated using only a keyboard.

Focus management in Shopify themes:

Most Shopify themes suppress focus indicators for visual aesthetics:

/* Many themes include this — it's an accessibility violation */
:focus {
  outline: none;
}

Replace with a visible focus style that does not break the design:

/* Visible focus for keyboard users, hidden for mouse users */
:focus-visible {
  outline: 3px solid #005FCC;
  outline-offset: 2px;
  border-radius: 2px;
}

/* Still suppress for mouse clicks (no :focus-visible means mouse/touch) */
:focus:not(:focus-visible) {
  outline: none;
}

Navigation menu keyboard access:

Dropdown navigation menus must be keyboard operable:

  • Tab to navigation item
  • Enter or Space to open dropdown
  • Arrow keys to navigate dropdown items
  • Escape to close dropdown

Test this on your current theme. Many Shopify themes have hover-triggered dropdowns that are inaccessible to keyboard users. Fix: ensure dropdowns open on keydown events for Enter/Space/arrow keys in addition to mouse hover.

Modal and drawer keyboard management:

When a modal or cart drawer opens, keyboard focus must move to the modal. When it closes, focus must return to the element that triggered it. All focusable elements inside the modal must be accessible; focus must not escape the modal.

// Example: Focus management for cart drawer
function openCartDrawer() {
  const cartDrawer = document.getElementById('cart-drawer');
  cartDrawer.setAttribute('aria-hidden', 'false');
  cartDrawer.removeAttribute('inert');

  // Move focus to first focusable element in drawer
  const firstFocusable = cartDrawer.querySelector(
    'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
  );
  firstFocusable?.focus();

  // Trap focus within drawer
  cartDrawer.addEventListener('keydown', trapFocus);
}

function closeCartDrawer(triggerElement) {
  const cartDrawer = document.getElementById('cart-drawer');
  cartDrawer.setAttribute('aria-hidden', 'true');
  cartDrawer.setAttribute('inert', '');
  cartDrawer.removeEventListener('keydown', trapFocus);

  // Return focus to trigger element
  triggerElement?.focus();
}

Form Accessibility: Labels, Errors, and Instructions

Forms are the highest-stakes accessibility area in ecommerce — the add-to-cart form, search input, newsletter signup, and checkout forms must all be fully accessible.

Form label requirements:

Every form input must have a programmatically associated label:

<!-- Correct: label explicitly associated via 'for' attribute -->
<label for="email">Email address</label>
<input type="email" id="email" name="email" required>

<!-- Correct: label wraps input (implicit association) -->
<label>
  Email address
  <input type="email" name="email" required>
</label>

<!-- Wrong: placeholder is not a substitute for label -->
<input type="email" placeholder="Email address" name="email">

Placeholder text disappears when users type and has insufficient contrast in most browsers. Never use placeholder as the only label.

Error message accessibility:

Error messages must be programmatically associated with the field that caused them:

<div>
  <label for="zip">ZIP code</label>
  <input
    type="text"
    id="zip"
    name="zip"
    aria-describedby="zip-error"
    aria-invalid="true"
  >
  <p id="zip-error" role="alert">
    Please enter a valid 5-digit ZIP code
  </p>
</div>

The role="alert" causes screen readers to announce the error message immediately when it appears. aria-describedby links the error to the input field so screen readers can find the error when navigating to the field.

Size and color variant selectors:

Product variant selectors (size buttons, color swatches) must be accessible. Common approaches:

<!-- Accessible radio button group for size selection -->
<fieldset>
  <legend>Size</legend>
  <div class="size-options">
    <input type="radio" id="size-s" name="size" value="S">
    <label for="size-s">Small</label>

    <input type="radio" id="size-m" name="size" value="M">
    <label for="size-m">Medium</label>

    <input type="radio" id="size-l" name="size" value="L">
    <label for="size-l">Large</label>
  </div>
</fieldset>

Color swatches need accessible names — the visual color is not sufficient:

<!-- Accessible color swatch -->
<input type="radio" id="color-navy" name="color" value="Navy">
<label for="color-navy">
  <span class="swatch navy" aria-hidden="true"></span>
  <span class="visually-hidden">Navy</span>
</label>

ARIA Labels and Semantic HTML

ARIA (Accessible Rich Internet Applications) attributes fill semantic gaps where HTML alone is insufficient. However, the first rule of ARIA is: "Don't use ARIA if HTML can do it."

Common ARIA patterns for Shopify stores:

<!-- Cart button with item count -->
<button aria-label="Cart, 3 items">
  <svg aria-hidden="true"><!-- cart icon --></svg>
  <span class="visually-hidden">Cart</span>
  <span class="cart-count" aria-hidden="true">3</span>
</button>

<!-- "Add to Cart" button state changes -->
<button id="add-to-cart" aria-live="polite">
  Add to Cart
</button>
<!-- After adding: -->
<button id="add-to-cart" aria-live="polite">
  Added to Cart ✓
</button>

<!-- Loading states -->
<div aria-busy="true" aria-live="polite">
  Loading products...
</div>

<!-- Expandable sections (accordion) -->
<button aria-expanded="false" aria-controls="faq-answer-1">
  What is your return policy?
</button>
<div id="faq-answer-1" hidden>
  <p>We accept returns within 30 days...</p>
</div>

Landmark roles for navigation:

Ensure your theme uses proper landmark HTML elements that screen reader users navigate by:

<header role="banner"><!-- site header --></header>
<nav aria-label="Main navigation"><!-- primary navigation --></nav>
<main id="main-content"><!-- main content --></main>
<aside><!-- sidebar filters or complementary content --></aside>
<footer role="contentinfo"><!-- site footer --></footer>

Accessibility Overlays: Why They Fail

Accessibility overlays (accessiBe, UserWay, AudioEye) are JavaScript widgets that claim to automatically make your site accessible. They are not a solution and increase legal risk.

Why overlays fail:

  1. They cannot fix structural HTML accessibility issues — only surface-level presentation
  2. They frequently conflict with assistive technologies, making the experience worse for actual screen reader users
  3. Courts have not accepted overlay providers' claims as adequate ADA compliance
  4. The National Federation of the Blind and other disability advocacy organizations explicitly oppose overlays
  5. Many overlay providers have faced class action lawsuits themselves

What to do instead:

Invest in structural accessibility fixes: semantic HTML, proper labels, keyboard navigation, focus management, and color contrast. These fixes benefit all users, improve SEO (screen readers and search crawlers have similar needs), and provide genuine legal protection.


Frequently Asked Questions

Can a Shopify store really be sued for ADA non-compliance?

Yes. ADA Title III accessibility lawsuits against ecommerce websites are well-established in US law. Courts in the 9th and 11th Circuits have consistently ruled that websites are "places of public accommodation" subject to ADA requirements. Shopify merchants with US customers are subject to this legal landscape. The cost of a demand letter response and settlement typically ranges from $5,000-$25,000; full litigation costs far more. Proactive accessibility implementation is significantly more economical.

Does Shopify's checkout need accessibility work?

Shopify's native checkout (the hosted checkout at checkout.shopify.com) is managed and maintained by Shopify and meets WCAG 2.1 AA standards. If you use Shopify's standard checkout, this portion of your store is Shopify's accessibility responsibility. However, your theme's cart drawer, add-to-cart forms, account pages, and all theme-rendered content are your responsibility. If you use a custom checkout or headless storefront, all checkout accessibility is your responsibility.

How long does it take to make a Shopify store fully accessible?

For a typical Shopify store with a commercial theme, addressing WCAG 2.1 AA compliance takes 40-80 development hours depending on the theme's baseline quality and the extent of customization. Initial audit: 8-12 hours. Critical fixes (keyboard navigation, focus indicators, alt text system): 20-30 hours. Form and modal accessibility: 10-20 hours. Ongoing maintenance: 4-8 hours per month as new content and features are added.

Do I need to make every product image have alt text manually?

For the most common violation (missing alt text), you can establish a system rather than manually writing alt text for every image. For product images: use the product title + key variant details as a template. For bulk updates: use Shopify's CSV import/export for product metafields to batch-update alt text. For new products: require alt text as part of your product creation checklist. For collections with thousands of products, prioritize your top-traffic pages first.

What is the "visually-hidden" CSS class used for accessibility?

The visually-hidden class (also called "sr-only") hides content visually while keeping it accessible to screen readers. This is different from display:none (which hides from everyone, including screen readers) and visibility:hidden (same). It is essential for adding accessible labels to visual elements like icon-only buttons:

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

Next Steps

Comprehensive Shopify accessibility implementation — covering keyboard navigation, screen reader compatibility, form accessibility, and WCAG color contrast — requires both frontend development expertise and accessibility testing methodology.

ECOSIRE's Shopify services include accessibility audits, WCAG 2.1 AA remediation, and ongoing accessibility monitoring to protect your store from ADA litigation while expanding your accessible customer base.

Contact our accessibility team to schedule a comprehensive WCAG 2.1 AA audit for your Shopify store.

E

Written by

ECOSIRE Research and Development Team

Building enterprise-grade digital products at ECOSIRE. Sharing insights on Odoo integrations, e-commerce automation, and AI-powered business solutions.

Chat on WhatsApp