Shopify theme accessibility ranking: 49 themes tested
6 of 49 themes passed every automated check of the theme's own code: Craft, Crave, Halftone, Prestige, Ride, Taste.
Free themes did slightly better than paid ones. Median distinct failures: 1 for Shopify's 24 free themes, 2 for the 25 most popular paid themes.
22 of 49 have a control on the product page that a screen reader cannot identify or operate properly, such as a link with no name or a field with no label.
Your theme's failures are in every shop that uses it unchanged. That makes the theme the cheapest place to fix them, and the first thing to check before you buy one.
What we tested, and how
Every theme on the Shopify Theme Store has an official demo store, set up by the theme's developer. We tested Shopify's 24 free themes and the 25 most popular paid themes (by the Theme Store's own popularity sort, read on 10 October 2026). For each theme we opened three pages of its demo store: the home page, a collection and a product.
Each page was loaded in Chromium and its scripts were allowed to run. Anything the browser did not show (closed drawers, pop-ups waiting for a click, hidden copies of menus) was removed before the audit, so a theme is never marked down for something no visitor meets. Then the page went through the same engine as our free scanner.
No shop was measured and no merchant is named: these are the developers' own demo stores.
The ranking
Ranked by the number of different failures in the theme's code across the three pages, fewest first, then by how many times they occur. Failures that come from the demo's own content (image descriptions, link wording) are not counted, because your content replaces them.
| Rank | Theme | Free or paid | Different failures | Occurrences | What fails |
|---|---|---|---|---|---|
| 1 | Craft | free | 0 | 0 | none found |
| 2 | Crave | free | 0 | 0 | none found |
| 3 | Halftone | paid | 0 | 0 | none found |
| 4 | Prestige | paid | 0 | 0 | none found |
| 5 | Ride | free | 0 | 0 | none found |
| 6 | Taste | free | 0 | 0 | none found |
| 7 | Colorblock | free | 1 | 1 | headings that skip levels |
| 8 | Concept | paid | 1 | 1 | headings that skip levels |
| 9 | Horizon | free | 1 | 1 | headings that skip levels |
| 10 | Ignite | paid | 1 | 1 | headings that skip levels |
| 11 | Origin | free | 1 | 1 | headings that skip levels |
| 12 | Publisher | free | 1 | 1 | no main heading on the page |
| 13 | Refresh | free | 1 | 1 | no main heading on the page |
| 14 | Sense | free | 1 | 1 | headings that skip levels |
| 15 | Hyper | paid | 1 | 2 | headings that skip levels |
| 16 | Spotlight | free | 1 | 2 | headings that skip levels |
| 17 | Miro | paid | 1 | 4 | headings that skip levels |
| 18 | Trade | free | 1 | 4 | a form field with no label |
| 19 | Dawn | free | 1 | 12 | a form field with no label |
| 20 | Studio | free | 2 | 2 | headings that skip levels, no main heading on the page |
| 21 | Be Yours | paid | 2 | 4 | headings that skip levels, a link with no name (the screen reader reads out the address) |
| 22 | Release | paid | 2 | 4 | headings that skip levels, no main heading on the page |
| 23 | Ritual | free | 2 | 4 | headings that skip levels, a link with no name (the screen reader reads out the address) |
| 24 | Sky | paid | 2 | 4 | headings that skip levels, a field whose only label is placeholder text that vanishes on typing |
| 25 | Sleek | paid | 2 | 5 | a form field with no label, headings that skip levels |
| 26 | Palo Alto | paid | 2 | 6 | a control the keyboard reaches but the screen reader is told to ignore, headings that skip levels |
| 27 | Broadcast | paid | 2 | 8 | no main heading on the page, a field whose only label is placeholder text that vanishes on typing |
| 28 | Symmetry | paid | 2 | 10 | a link with no name (the screen reader reads out the address), a field whose only label is placeholder text that vanishes on typing |
| 29 | Enterprise | paid | 2 | 15 | headings that skip levels, a link with no name (the screen reader reads out the address) |
| 30 | Tinker | free | 2 | 17 | a link with no name (the screen reader reads out the address), no main heading on the page |
| 31 | Tide | paid | 2 | 21 | an invalid ARIA role, no main heading on the page |
| 32 | Dwell | free | 3 | 4 | a control the keyboard reaches but the screen reader is told to ignore, headings that skip levels, no main heading on the page |
| 33 | Fuse | paid | 3 | 4 | a button with no name, a link with no name (the screen reader reads out the address), no main heading on the page |
| 34 | Savor | free | 3 | 6 | headings that skip levels, a link with no name (the screen reader reads out the address), no main heading on the page |
| 35 | Beauvoir | paid | 3 | 7 | a form field with no label, headings that skip levels, no main heading on the page |
| 36 | Rise | free | 3 | 7 | a form field with no label, headings that skip levels, no main heading on the page |
| 37 | Vessel | free | 3 | 8 | a control the keyboard reaches but the screen reader is told to ignore, headings that skip levels, a link with no name (the screen reader reads out the address) |
| 38 | Wonder | paid | 3 | 10 | a control the keyboard reaches but the screen reader is told to ignore, a form field with no label, no main heading on the page |
| 39 | Mono | paid | 3 | 14 | a form field with no label, a label pointing at a field that is not there, a link with no name (the screen reader reads out the address) |
| 40 | Pipeline | paid | 3 | 21 | a control the keyboard reaches but the screen reader is told to ignore, a form field with no label, a field whose only label is placeholder text that vanishes on typing |
| 41 | Monk | paid | 3 | 23 | a form field with no label, a label pointing at a field that is not there, a link with no name (the screen reader reads out the address) |
| 42 | Pebble | paid | 3 | 28 | headings that skip levels, a link with no name (the screen reader reads out the address), no main heading on the page |
| 43 | Heritage | free | 4 | 7 | a control the keyboard reaches but the screen reader is told to ignore, headings that skip levels, a link with no name (the screen reader reads out the address), no main heading on the page |
| 44 | Fabric | free | 4 | 8 | a control the keyboard reaches but the screen reader is told to ignore, headings that skip levels, a link with no name (the screen reader reads out the address), no main heading on the page |
| 45 | Atelier | free | 4 | 10 | a control the keyboard reaches but the screen reader is told to ignore, headings that skip levels, a link with no name (the screen reader reads out the address), no main heading on the page |
| 46 | Pitch | free | 4 | 10 | a control the keyboard reaches but the screen reader is told to ignore, headings that skip levels, a link with no name (the screen reader reads out the address), no main heading on the page |
| 47 | Impulse | paid | 5 | 8 | a control the keyboard reaches but the screen reader is told to ignore, a button with no name, headings that skip levels, a link with no name (the screen reader reads out the address), no main heading on the page |
| 48 | Vivid | paid | 5 | 36 | a button with no name, a form field with no label, headings that skip levels, a label pointing at a field that is not there, a link with no name (the screen reader reads out the address) |
| 49 | Local | paid | 6 | 21 | something clickable that the keyboard cannot reach, a form field with no label, headings that skip levels, a link with no name (the screen reader reads out the address), no main heading on the page, a field whose only label is placeholder text that vanishes on typing |
Not ranked: Eurus (no demo store we could test).
Each theme's name opens its own page: every failure with an example from its demo store, what it means for a shopper, and how to fix it.
Three failures worth knowing about
Dawn's colour filter reads out a database ID
Dawn is Shopify's best-known free theme. On its collection page, each colour in the filter is a checkbox whose label holds only the colour swatch and a title containing an internal ID. The visible word, such as "Beige", is hidden from screen readers. In Chromium's accessibility tree the first checkbox is named "gid://shopify/Metaobject/69546672217". A blind shopper filtering by colour hears that, twelve times over.
The logo link in eight of Shopify's newer free themes has no name
Atelier, Fabric, Heritage, Pitch, Ritual, Savor, Tinker and Vessel share the same header code. The logo is a link to the home page that contains only the logo image, and the image's description is empty unless you write one. The theme does not fall back to the shop's name, so a screen reader announces "link" and nothing else. Fix: give your logo image a description (in Shopify: Content, then Files, then the logo, then "Alt text"), for example your shop's name.
Product carousels that the keyboard reaches but screen readers skip
In several themes the slides of a product carousel that are not on screen are marked aria-hidden="true", but the links inside them can still be reached with the Tab key. A keyboard user lands on a link that a screen reader is told does not exist. It is fixed in the theme code (the hidden slides need inert), so ask the theme's developer.
The most common failures
| Failure | WCAG | Themes |
|---|---|---|
| Headings that skip levels | 1.3.1 | 30 of 49 |
| No main heading on the page | 1.3.1 | 20 of 49 |
| A link with no name (the screen reader reads out the address) | 2.4.4, 4.1.2 | 18 of 49 |
| A form field with no label | 1.3.1, 4.1.2 | 11 of 49 |
| A control the keyboard reaches but the screen reader is told to ignore | 4.1.2 | 10 of 49 |
| A field whose only label is placeholder text that vanishes on typing | 3.3.2 | 5 of 49 |
What this does not tell you
- Automated checks find roughly a third of accessibility barriers. A theme that passes here still needs a keyboard and screen-reader test. A theme that fails here fails for certain.
- Colour contrast is not ranked. Telling whether white text on a photo is readable needs the pixels, not the markup, so contrast is left out rather than guessed.
- Duplicate IDs are not ranked. WCAG 2.2 dropped the criterion, and most duplicates we saw were hidden copies of menus.
- We tested what loads first. Menus, the cart drawer and search pop-ups that open on a click were not tested, so the real totals can only be higher.
- Your shop is not the demo. Apps, sections and settings you add change the result. Check your own shop's pages; it is free and takes no account.
Who made this
Limen, which makes an accessibility checker for small online shops. The audit code, the list of themes and the raw results for every page are kept with our research files, and we will send them to any theme developer who asks: hello@limen.ae. If you build one of these themes and have fixed a failure, tell us and we will re-test it.
Where to go from here
- Free check of any page, with no account, showing every confirmed failure with its WCAG criterion.
- Chrome extension, which checks the page as your browser rendered it, including the cart and checkout.
- Accessibility statement generator, free, for the statement the European Accessibility Act asks shops to publish.
- The European Accessibility Act for online shops: who is covered and what to check.