/ โ† Accessibility Fixes / Shopify
In this guide
  1. Where Shopify accessibility problems come from
  2. Working out which layer caused a finding
  3. The fix, step by step
  4. Liquid and HTML patterns for common product page faults
  5. Apps, overlays and third-party widgets
  6. What about checkout?
  7. Content habits for store owners and staff
  8. Keeping it fixed through theme updates
  9. Questions and answers

Where Shopify accessibility problems come from

LayerTypical findingsWhere you fix it
Theme settingsLow-contrast colour schemes, auto-playing slideshows, scrolling announcement bars, button labels such as "Shop now"Theme editor, no code
Theme code (Liquid, CSS, JavaScript)Colour swatches with no names, sale prices read out as two numbers, cart drawers that lose focus, mega menus that only open on hoverEdit code on a duplicate theme, or ask the theme developer
AppsNewsletter pop-ups with no close button, review stars with no text, chat launchers that trap focus, upsell carouselsApp settings, app embeds toggle, or the app developer
ContentProduct photos with no alt text, bold text used as headings, "click here" links in descriptions, text inside banner imagesProducts, collections, pages and Files in the admin
CheckoutRarely the source; changes are limited to branding and extensionsCheckout settings and checkout extensions

Most stores find that a handful of theme and app issues account for the majority of findings, because they repeat on every product and collection page. Content issues are spread thinly but add up.

Working out which layer caused a finding

  1. Run the checker on one page of each type. Home page, a collection, a product with variants, a product on sale, a blog post, the cart page and your contact page. Shopify uses one template per type, so these cover almost the whole shop.
  2. Inspect the failing element. In the browser's element inspector, theme markup usually sits inside elements whose ids start with shopify-section-. Markup injected by apps is often inside a container named after the app, or inside an iframe, and is frequently added near the end of the body.
  3. Switch off app embeds in a preview. In the theme editor, open the App embeds panel and turn embeds off on your duplicate theme, then run the check again. Findings that disappear belong to an app.
  4. Compare with a fresh copy of the theme. Add an untouched copy of your theme from the Theme Store or theme library to the admin and check the same page. If the fault is not there, it came from a later code edit.
๐Ÿ’ก Theme preview links let you run checks on an unpublished theme. Copy the preview link from the theme's Actions menu and test that address, so shoppers never see a half-finished fix.

The fix, step by step

Step 1

Duplicate the theme and record a baseline

In the admin, go to Online Store, then Themes, open the Actions menu on your live theme and choose Duplicate. Do all work on the copy. Run the Accessibility Audit on the preview of one page of each template type and save the results, so you can see what improved. Note the theme name and version, because an update from the theme developer may already fix some of the problems you find.

Step 2

Fix what the theme editor controls

Open Customize on the duplicate. In Theme settings, adjust the colour schemes so text and buttons have enough contrast against their backgrounds, checking each scheme the sections use. Turn off autoplay on slideshows or make sure a visible pause control exists, stop scrolling announcement bars, and rewrite vague button labels in section settings so they say where they go, such as "Browse winter coats" instead of "Shop now".

Step 3

Add alt text to product media and files

Open each product, click an image in the Media area and choose Add alt text. Describe what distinguishes that photo, such as the colour, angle or detail shown, rather than repeating the product title for every image. Images used in theme sections, like banners, take their alt text from the file, so set it under Content, then Files. Leave purely decorative images empty, and never put important text such as sale terms only inside a banner image.

Step 4

Test app embeds and pop-ups one at a time

With app embeds switched off, turn them back on one by one and repeat a keyboard pass and the checker after each. Newsletter and discount pop-ups must be closable with a visible button and the Escape key, must receive focus when they open and return it when closed. Review widgets need star ratings as text. Where an app fails and has no setting to fix it, raise it with the developer or replace the app.

Step 5

Repair product page controls in Liquid

On the product template, check that variant options are grouped in a fieldset with a legend naming the option, and that colour swatches carry the colour name as text, not only a coloured circle. Give quantity plus and minus buttons names such as "Increase quantity". Make sure sale prices include hidden labels for the regular and sale price, and that price and stock changes after choosing a variant are announced through a status region.

Step 6

Make the cart drawer and notices behave

Add a product to the basket using only the keyboard. If a drawer or pop-up opens, focus should move into it, Tab should stay inside while it is open, Escape and a labelled close button should shut it, and focus should return to the Add to cart button afterwards. If the item is added without a drawer, a status message such as "Added to your basket" should be announced. Removing a cart line should leave focus somewhere sensible.

Step 7

Publish, recheck and add an accessibility statement

When the duplicate passes your keyboard walk-through and the checker shows the improvements you expected, publish it and run the checks again on the live store, since some apps behave differently on a published theme. Then create a page under Online Store, then Pages, explaining what you have tested, any known problems, and how shoppers can contact you for help or to order another way, and link it from the footer.

Liquid and HTML patterns for common product page faults

Variant options as a named group

{%- for option in product.options_with_values -%}
  <fieldset class="variant-option">
    <legend>{{ option.name }}</legend>
    {%- for value in option.values -%}
      <input type="radio"
             id="opt-{{ option.position }}-{{ forloop.index }}"
             name="{{ option.name | handle }}"
             value="{{ value | escape }}"
             {% if option.selected_value == value %}checked{% endif %}>
      <label for="opt-{{ option.position }}-{{ forloop.index }}">
        <span class="swatch" aria-hidden="true"></span>
        {{ value }}
      </label>
    {%- endfor -%}
  </fieldset>
{%- endfor -%}

The visible or hidden text {{ value }} gives each swatch its colour or size name, and native radio buttons give arrow-key movement within the group for free. If your design shows only the swatch, wrap the name in a visually hidden class rather than removing it.

Sale prices that make sense when read aloud

<div class="price">
  {%- if product.compare_at_price > product.price -%}
    <span class="visually-hidden">Regular price</span>
    <s>{{ product.compare_at_price | money }}</s>
    <span class="visually-hidden">Sale price</span>
    {{ product.price | money }}
  {%- else -%}
    {{ product.price | money }}
  {%- endif -%}
</div>

Most screen readers do not announce strike-through formatting, so without the hidden labels shoppers hear two prices with no idea which one they pay. Shopify's own free themes already include this pattern; older or heavily customised themes often do not.

Announcing variant and basket changes

<div id="product-status" class="visually-hidden" role="status" aria-live="polite"></div>

// after the variant changes and the price is updated:
document.getElementById('product-status').textContent =
  'Selected: Navy, Large. Price ยฃ45. In stock.';

Keep the status element in the template from the start and only change its text. The same element can announce "Added to your basket" when there is no cart drawer.

Page language

Check that layout/theme.liquid sets the language on the root element, for example <html lang="{{ request.locale.iso_code }}">. This makes screen readers use the right pronunciation, and it follows the shopper's chosen language on multilingual stores.

Apps, overlays and third-party widgets

Apps are the part of a Shopify store most likely to add accessibility problems after launch, because each one injects its own markup, styles and scripts. Before installing, look at the app's listing and documentation for any statement about keyboard and screen reader support, and try its demo store with the keyboard.

โš ๏ธ Several apps sell an accessibility toolbar or overlay that promises compliance. These do not repair the theme's code, the missing alt text or the inaccessible app pop-ups, and they can conflict with the screen readers and settings disabled shoppers already use. Spend the effort on the fixes above instead.

What about checkout?

Shopify runs the checkout pages itself, and merchants cannot edit their HTML directly. The older checkout.liquid customisation route has been retired in favour of checkout extensibility, where changes are made through branding settings and checkout extensions. In practice that means:

Accelerated payment buttons, such as wallet buttons on product and cart pages, are provided by the payment services. Check that they can be reached with Tab and are not hidden behind a sticky Add to cart bar.

Content habits for store owners and staff

Theme and app fixes are made once. Content accessibility depends on everyone who adds products and pages, so build a short checklist into your routine. The detail for each is in its own guide:

Colour scheme contrast and visible focus outlines are theme-wide settings; fixing colour contrast and fixing focus indicators explain what to aim for.

Keeping it fixed through theme updates

Theme developers release updates, and Shopify lets you add the new version to your theme library. Code edits you made to the old version are not carried across automatically, so keep a record of every accessibility change you make in Liquid, CSS or JavaScript: the file, what you changed and why. Before publishing an updated theme, rerun the checker and your keyboard walk-through, reapply any changes the update did not include, and tell the theme developer about faults so they can fix them for everyone. Themes listed in the Shopify Theme Store have to meet Shopify's published accessibility requirements, which is a useful baseline, but it does not cover your settings, apps or content.

Questions and answers

1. Are Shopify stores accessible by default?

Partly. Shopify runs the checkout and its own free themes are built with accessibility in mind, including skip links, labelled forms and hidden price labels. But every store also depends on the theme you chose, the settings you picked, the apps you installed and the content you added. Low-contrast colour choices, pop-up apps and product photos without alt text are common problems that no theme can prevent. Each store needs its own testing.

2. Which Shopify theme is the most accessible?

There is no single answer, and it changes as themes are updated. Themes in the Shopify Theme Store must meet Shopify's accessibility requirements before listing, and Shopify's own free themes are a solid starting point. Before buying a paid theme, try its demo store with only a keyboard, run the Accessibility Audit on a demo product page and look for a statement about accessibility from the developer. Your own settings and apps will still matter more than the theme name.

3. How do I add alt text to Shopify product images?

Open the product in the admin, click the image in the Media section and choose Add alt text. Type a short description of what that particular photo shows and save. For images used in theme sections such as banners and image-with-text blocks, set the alt text on the file in the Files area under Content. Many themes fall back to the product title when alt text is empty, which means every photo of the product sounds identical.

4. Will an accessibility app make my Shopify store compliant?

No. Overlay and toolbar apps add a layer on top of the store, but they do not correct the underlying code, such as unnamed buttons, focus traps in pop-ups or missing alt text, and they can interfere with assistive technology shoppers already use. Many accessibility specialists and disabled users advise against them. The dependable route is to fix the theme settings, code, apps and content directly, then test with a keyboard and screen reader.

5. Can I fix accessibility problems in Shopify checkout?

Only to a limited degree, because Shopify runs the checkout pages and merchants cannot edit their HTML. You control branding, so choose colours and fonts that keep text and buttons readable, and you control which checkout extensions you add, so test those with a keyboard and a screen reader. If you find a fault in the core checkout, report it to Shopify Support with details of the page, browser and assistive technology involved.

6. Do I need an accessibility statement on my Shopify store?

For most private businesses in the UK there is no specific rule requiring one, unlike public sector websites. It is still good practice and helps show you take reasonable steps under the Equality Act 2010. A short page saying what you have tested, what is known not to work and how shoppers can get help or order another way is enough. If you sell into the EU, check whether the European Accessibility Act applies to you. This is not legal advice.

7. Why do screen readers read my sale price wrongly?

Because most screen readers ignore strike-through formatting. If the theme shows the original price with a line through it and the sale price beside it, a shopper using a screen reader hears two prices with no way to tell which is current. The fix is to add visually hidden labels such as Regular price and Sale price before each figure in the price snippet of your theme. Shopify's own free themes already include this pattern.

Check your Shopify store

The Accessibility Audit tests your page against WCAG 2.2 level AA and lists each finding with the element that failed and the success criterion behind it, so you can see whether the theme, an app or your content needs fixing.

Open Accessibility Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Accessibility Fixes  ·  Fixing Keyboard Navigation  ·  Fixing Alt Text  ·  Accessibility in WordPress  ·  Learning Hub

About AI Web Page SEO

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.