Button without a name
WCAG 2.2 4.1.2 Name, role, value, Level A
16 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.reset__buttonbutton.caret
Dropdown without a label
WCAG 2.2 1.3.1 Info and relationships, Level A
2 occurrences, found on: Cart page
- Why it matters for shoppers
- A shopper who cannot see the page does not know whether the dropdown chooses a size, a colour, a sort order or a country.
- Where it usually lives in a Shopify theme
- Variant pickers on the product page, the sort menu on collections, country and language selectors.
- Direction for a fix
- Name each dropdown with a label element (for and id) or an aria-label such as “Size” or “Sort by”.
- Examples from the demo store
select#countrySelectorselect#provinceSelector
Image without an alt attribute
WCAG 2.2 1.1.1 Non-text content, Level A
1 occurrence, found on: Home page
- Why it matters for shoppers
- A screen reader skips the image or reads out its file name, so a blind shopper does not learn what the product photo shows.
- Where it usually lives in a Shopify theme
- Product card and product media snippets, image banners, slideshow and image-with-text sections, and sometimes the logo in the header.
- Direction for a fix
- Output the alt text stored with the image, fall back to the product or section title, and give purely decorative images an empty alt="".
- Examples from the demo store
aria-labelledby or aria-describedby points to a missing element
WCAG 2.2 4.1.2 Name, role, value, Level A
130 occurrences, found on: Home page, Collection page, Product 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 → "StandardCardNoMediaLink-template--20991046222038__main_featured_collection_mRteCk-8792166957270"aria-labelledby → "NoMediaStandardBadge-template--20991046222038__main_featured_collection_mRteCk-8792166957270"aria-labelledby → "CardLink-template--20991046222038__main_featured_collection_mRteCk-8792166957270"
The same id is used more than once
WCAG 2.2 4.1.2 Name, role, value, Level A
26 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
"localization_close_btn", 2×"localization_form", 4×"Subscribe", 2×
Empty heading
WCAG 2.2 1.3.1 Info and relationships, Level A
1 occurrence, found on: Product page
- Why it matters for shoppers
- A screen reader announces a heading with nothing in it.
- Where it usually lives in a Shopify theme
- Heading blocks left blank in the theme editor, or heading tags that wrap only an icon.
- Direction for a fix
- Do not output the heading tag when its setting is empty.
- Examples from the demo store
h2#PickupAvailabilityHeading
Icon without a text alternative or a decorative mark
WCAG 2.2 1.1.1 Non-text content, Level A
42 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
svgsvg.abcsvg.placeholder-svg
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.
More than one h1 heading on the page
WCAG 2.2 1.3.1 Info and relationships, Level A
1 occurrence, found on: 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.