Button without a name
WCAG 2.2 4.1.2 Name, role, value, Level A
4 occurrences, found on: Home page, Collection page, Product page, Cart page
- Why it matters for shoppers
- The shopper hears “button” with no hint whether it closes a drawer, adds to cart or opens the menu.
- Where it usually lives in a Shopify theme
- Icon-only buttons: drawer close, slider arrows, quantity plus and minus, menu and search toggles.
- Direction for a fix
- Put an aria-label or visually hidden text on the button and hide the icon inside it with aria-hidden="true".
- Examples from the demo store
button.xo-action-search-field__button
Alt text is a file name or a placeholder word
WCAG 2.2 1.1.1 Non-text content, Level A
109 occurrences, found on: Home page, Collection page, Product page, Cart page
- Why it matters for shoppers
- Hearing “IMG_2841.jpg” or “image” tells a screen reader user nothing about the product.
- Where it usually lives in a Shopify theme
- Mostly content: alt text entered in the Shopify admin for product media and section images. Some themes fall back to the file name when the alt text is empty.
- Direction for a fix
- Describe the image in the admin, and in the theme fall back to the product or section title instead of the file name.
- Examples from the demo store
The same id is used more than once
WCAG 2.2 4.1.2 Name, role, value, Level A
8 occurrences, found on: Home page, Collection page, Product page, Cart page
- Why it matters for shoppers
- Labels, error messages and aria references can point at the wrong element, so a field or control may lose its name.
- Where it usually lives in a Shopify theme
- Sections rendered twice on one page, such as desktop and mobile headers, cart drawer and cart page, or country and language selectors in both header and footer.
- Direction for a fix
- Make generated ids unique, for example by adding the section id to them.
- Examples from the demo store
"product-image-featured-image", 34×"product-image-image-product-only", 34×"product-image-featured-image", 26×
Heading levels skip a step
WCAG 2.2 1.3.1 Info and relationships, Level A
4 occurrences, found on: Home page, Collection page, Product page, Cart page
- Why it matters for shoppers
- People who move through a page by headings expect the levels to nest. A jump from h2 to h4 suggests a missing part.
- Where it usually lives in a Shopify theme
- Section headings, product card titles and footer column headings, where the level is chosen for its font size.
- Direction for a fix
- Choose heading levels from the structure of the page and set the size with a class.
- Examples from the demo store
No skip link
WCAG 2.2 2.4.1 Bypass blocks, Level A
4 occurrences, found on: Home page, Collection page, Product page, Cart page
- Why it matters for shoppers
- A keyboard user has to tab through the whole header and menu on every page before reaching the content.
- Where it usually lives in a Shopify theme
- Right after the opening body tag in layout/theme.liquid.
- Direction for a fix
- Make “Skip to content” the first focusable link, pointing at the main element, and show it when it receives focus.
aria-labelledby or aria-describedby points to a missing element
WCAG 2.2 4.1.2 Name, role, value, Level A
1 occurrence, found on: Collection page
- Why it matters for shoppers
- The element was meant to take its name or description from another element that is not on the page, so the screen reader has nothing to read.
- Where it usually lives in a Shopify theme
- Product cards that point at sale or sold-out badges which are only rendered in some cases, form error messages, dialogs.
- Direction for a fix
- Output the reference only when the target element is rendered, or always render the target.
- Examples from the demo store
aria-labelledby → "verticalTitle"
Icon without a text alternative or a decorative mark
WCAG 2.2 1.1.1 Non-text content, Level A
286 occurrences, found on: Home page, Collection page, Product page, Cart page
- Why it matters for shoppers
- If the icon carries meaning, such as a payment method or “free shipping”, a screen reader user misses it. If it is decoration, it should be hidden from screen readers.
- Where it usually lives in a Shopify theme
- Icon snippets, payment icons in the footer, trust and feature icons.
- Direction for a fix
- Hide decorative icons with aria-hidden="true". Give meaningful icons role="img" and an aria-label or a title element.
- What the test can see
- The test cannot tell a decorative icon from a meaningful one, so each of these needs a quick look.
- Examples from the demo store
svg.trs:0.3ssvgsvg.c:foreground
More than one h1 heading on the page
WCAG 2.2 1.3.1 Info and relationships, Level A
4 occurrences, found on: Home page, Collection page, Product page, Cart page
- Why it matters for shoppers
- With two or more first-level headings it is harder to tell which one names the page.
- Where it usually lives in a Shopify theme
- A logo wrapped in an h1 on every page, or section headings that can be set to h1 in the theme editor.
- Direction for a fix
- Keep h1 for the main title of the page. Wrap the logo in an h1 only on the home page and let sections start at h2.
Menu not marked as navigation
WCAG 2.2 1.3.1 Info and relationships, Level A
2 occurrences, found on: Home page, Cart page
- Why it matters for shoppers
- Screen reader users cannot jump straight to the menu.
- Where it usually lives in a Shopify theme
- Header menu and footer menus.
- Direction for a fix
- Wrap each menu in a nav element and name it with aria-label when there is more than one.