Example report. Generated from a sample theme so you can see what Themeremedy finds. Install the app to scan your own store.
Example theme on example-store.myshopify.com · 118 files, 991 KB, scanned in 0.8s
<input type="image"> has no alt text
Needs a human decision. No automatic fix available.
viewport prevents zooming (user-scalable=no or maximum-scale<=1)
Needs a human decision. No automatic fix available.
tabindex="3" overrides natural focus order
Needs a human decision. No automatic fix available.
<button> is nested inside <a>
Needs a human decision. No automatic fix available.
unknown ARIA role: carousel
Needs a human decision. No automatic fix available.
<h2> is empty
Needs a human decision. No automatic fix available.
<ul> contains <div> instead of <li>
Needs a human decision. No automatic fix available.
id="promo-banner" is used more than once in this file
Needs a human decision. No automatic fix available.
id="promo-banner" is used more than once in this file
Needs a human decision. No automatic fix available.
<img> has no alt attribute
Needs a human decision. Alt text requires seeing the image; must not be guessed
<img> has no alt attribute
Needs a human decision. Alt text requires seeing the image; must not be guessed
<input> has no associated label
Current code
<input type="email" name="contact[email]" placeholder="Enter your email" required>
Replace with
<input type="email" name="contact[email]" placeholder="Enter your email" required aria-label="Enter your email">
Placeholder text "Enter your email" describes the field
<iframe> has no title
Current code
<iframe
src="https://www.youtube.com/embed/{{ section.settings.video_id }}"
width="560"
height="315"
frameborder="0"
allowfullscreen
>
Replace with
<iframe
src="https://www.youtube.com/embed/{{ section.settings.video_id }}"
width="560"
height="315"
frameborder="0"
allowfullscreen
title="YouTube video player"
>
YouTube embed
<a> has no discernible text
Current code
<a href="{{ settings.social_facebook_link }}">
Replace with
<a href="{{ settings.social_facebook_link }}" aria-label="Facebook">
Link target is the Facebook social setting
<a> has no discernible text
Current code
<a href="{{ settings.social_instagram_link }}">
Replace with
<a href="{{ settings.social_instagram_link }}" aria-label="Instagram">
Link target is the Instagram social setting
<img> has no alt attribute
Current code
<img src="{{ settings.logo | image_url: width: 200 }}" width="200" height="60">
Replace with
<img src="{{ settings.logo | image_url: width: 200 }}" width="200" height="60" alt="{{ shop.name }}">
Store logo — name it from the shop, not from the image content
<button> has no text and no aria-label
Current code
<button type="button" class="header__search-toggle">
Replace with
<button type="button" class="header__search-toggle" aria-label="Search">
Contains the "Search" icon and no text
<input> has no associated label
Current code
<input type="search" name="q" class="search__input" placeholder="Search our store">
Replace with
<input type="search" name="q" class="search__input" placeholder="Search our store" aria-label="Search our store">
Placeholder text "Search our store" describes the field
<select> has no associated label
Current code
<select name="currency" class="header__currency">
Replace with
<select name="currency" class="header__currency" aria-label="Currency">
Derived from the field's name attribute "currency"
<a> has no discernible text
Current code
<a href="{{ routes.cart_url }}" class="header__cart">
Replace with
<a href="{{ routes.cart_url }}" class="header__cart" aria-label="Cart">
Contains the "Cart" icon and no text
<a> is aria-hidden but still focusable
Needs a human decision. No automatic fix available.
<svg role="img"> has no title or aria-label
Needs a human decision. No automatic fix available.
<video> has no captions track
Needs a human decision. No automatic fix available.
<object> has no text alternative
Needs a human decision. No automatic fix available.
table has no <th> header cells
Needs a human decision. No automatic fix available.
autocomplete="zipcode" is not a valid token
Needs a human decision. No automatic fix available.
field is labelled only by a title attribute
Needs a human decision. No automatic fix available.
What this report does and does not tell you.
Automated testing can detect roughly 40% of WCAG success criteria. It cannot confirm that a store is accessible or legally compliant, and nobody's tool can — claims to the contrary are why the FTC fined a well-known accessibility vendor $1,000,000 in 2025.
What it does cover well: the machine-detectable failures are essentially the same ones that the automated scanners used by plaintiff firms find when they generate demand letters. Fixing them addresses the most common route to a claim. Issues needing human judgement — whether alt text is meaningful, whether focus order makes sense — still need a person.