WideAisle Demo Store · demo.wideaisle.com · 2026-07-06
| Page sampled | Template |
|---|---|
| https://demo.wideaisle.com/products/canvas-tote | product |
Shopify stores are template-driven: issues found on a sampled page apply to all pages built from that template (an issue on the sampled product page exists on every product page).
Counts are distinct issue types; together they affect 16 elements across the sampled templates.
The scan found 15 distinct issue types affecting 16 elements. The most important problem: images with no text description, affecting 2 elements on your product page. Next: invalid aria attributes, on product. Because your store is template-driven, fixing an issue once in the theme usually fixes it on every page built from that template. Hand the fix list on the next page to whoever maintains your theme; each item links to full detail.
Product and collection images have no alternative text. A blind shopper using a screen reader hears nothing at all, or a filename like "IMG_2041.jpg", instead of what the product looks like. In practice the product is invisible to them.
Bracketed text is yours to write; everything else is your actual markup.
Elements carry ARIA attributes that are not valid for them. Screen readers can end up announcing wrong or contradictory information about a control.
A custom widget declares an ARIA role but leaves out attributes that role requires, so screen readers cannot report its state, such as whether an option is selected.
Every distinct issue, one row each, ordered by severity. Print it, hand it to your developer, tick them off. Detail cards for each row follow in the findings section.
| Issue | Where | Elements | Effort | WCAG | |
|---|---|---|---|---|---|
| ☐ | Images with no text description | product (2) | 2 | quick fix (minutes per element) | 1.1.1 Non-text Content (A) |
| ☐ | Invalid ARIA attributes | product (1) | 1 | theme developer | 4.1.2 Name, Role, Value (A) |
| ☐ | ARIA widgets missing required attributes | product (1) | 1 | theme developer | 4.1.2 Name, Role, Value (A) |
| ☐ | Buttons with no accessible name | product (1) | 1 | quick fix (minutes per element) | 4.1.2 Name, Role, Value (A) |
| ☐ | Form fields with no label | product (1) | 1 | quick fix (minutes per element) | 4.1.2 Name, Role, Value (A) |
| ☐ | Dropdown selectors with no label | product (1) | 1 | theme developer | 4.1.2 Name, Role, Value (A) |
| ☐ | Hidden elements that can still be focused | product (1) | 1 | theme developer | 4.1.2 Name, Role, Value (A) |
| ☐ | Text with insufficient color contrast | product (1) | 1 | quick fix (minutes per element) | 1.4.3 Contrast (Minimum) (AA) |
| ☐ | Embedded frames with no title | product (1) | 1 | quick fix (minutes per element) | 4.1.2 Name, Role, Value (A) |
| ☐ | Page language not declared | product (1) | 1 | quick fix (minutes per element) | 3.1.1 Language of Page (A) |
| ☐ | Links with no accessible name | product (1) | 1 | quick fix (minutes per element) | 2.4.4 Link Purpose (In Context) (A) |
| ☐ | Broken list structure | product (1) | 1 | theme developer | 1.3.1 Info and Relationships (A) |
| ☐ | Interactive controls nested inside each other | product (1) | 1 | theme developer | 4.1.2 Name, Role, Value (A) |
| ☐ | Scrollable areas keyboard users cannot reach | product (1) | 1 | theme developer | 2.1.1 Keyboard (A) |
| ☐ | Pinch-zoom disabled on mobile | product (1) | 1 | quick fix (minutes per element) | 1.4.4 Resize Text (AA) |
Each page in scope was rendered in a real browser at two sizes, desktop (1440×900) and mobile (390×844), and inspected with axe-core, the open-source accessibility engine by Deque Systems, against WCAG 2.1 A and AA rules.
Honest coverage disclosure: automated tools detect, on average, about 57% of accessibility issues by volume (Deque's own study; older industry estimates were lower). The remainder needs a human; the section "What automated checks cannot see" lists exactly what that means.
No composite "compliance score" appears in this report, by design: a score implies certification, which no tool can honestly provide. We report what fails, how much it matters, and how to fix it.
Product and collection images have no alternative text. A blind shopper using a screen reader hears nothing at all, or a filename like "IMG_2041.jpg", instead of what the product looks like. In practice the product is invisible to them.
Bracketed text is yours to write; everything else is your actual markup.
Elements carry ARIA attributes that are not valid for them. Screen readers can end up announcing wrong or contradictory information about a control.
A custom widget declares an ARIA role but leaves out attributes that role requires, so screen readers cannot report its state, such as whether an option is selected.
Icon-only buttons such as search, cart, menu and close are announced as just "button". A blind shopper cannot tell the add-to-cart button from the close button without pressing it to find out.
Bracketed text is yours to write; everything else is your actual markup.
Input fields, commonly the newsletter signup in the footer, quantity boxes, or search, have no label. Screen reader users are handed an unnamed text box and have to guess what to type in it.
Bracketed text is yours to write; everything else is your actual markup.
A dropdown, typically the size or color picker, has no label. A screen reader announces an empty, unnamed menu, so a blind shopper cannot tell which option list they are changing. That leads to wrong sizes in the cart, or to giving up.
Bracketed text is yours to write; everything else is your actual markup.
Parts of the page are marked hidden from assistive technology (aria-hidden="true") but still contain buttons or links a keyboard can reach. A keyboard or screen reader user lands on a control that, as far as their software is concerned, does not exist.
Some text does not stand out enough from its background to meet the WCAG minimum of 4.5:1 for body text. Shoppers with low vision may be unable to read prices, product descriptions or button labels. This group is a meaningful share of online buyers.
Embedded content (videos, app widgets, maps) sits in an iframe with no title. Screen readers announce an anonymous "frame", so the shopper cannot tell whether it holds a size chart or a video.
Bracketed text is yours to write; everything else is your actual markup.
The page does not declare its language, so screen readers guess. A wrong guess reads your English product names with, say, French pronunciation rules, which can be unintelligible.
Bracketed text is yours to write; everything else is your actual markup.
Icon-only links (logo, cart, social icons) are announced by screen readers as just "link". A shopper who cannot see the icon has no way to know whether a link opens the cart or leaves the site.
Bracketed text is yours to write; everything else is your actual markup.
A list contains elements that are not list items. Screen readers announce lists by size ("list, 4 items"); broken structure makes counts wrong or splits one list into several, which is disorienting when navigating collections or menus.
A clickable element sits inside another clickable element, such as a button inside a product-card link. Common in app-generated cards. Screen readers and keyboards behave unpredictably here, and some users cannot reach the inner control at all.
A region scrolls with a mouse or touch but cannot be reached or scrolled with a keyboard. Keyboard-only shoppers are locked out of whatever is inside, often product descriptions or size tables.
The theme sets user-scalable=no or maximum-scale=1, which blocks pinch-to-zoom on phones. Shoppers with low vision literally cannot enlarge your product photos or text. This is a one-line fix.
Bracketed text is yours to write; everything else is your actual markup.
Automated checks could not decide these (for example, text contrast over a background image). They are not counted in the totals above. The Full Audit resolves each one by hand.
| Check | Where | Elements | Why it needs a human |
|---|---|---|---|
| Duplicated IDs on repeated sections | product | 1 | Fix any of the following: Document has multiple elements referenced with ARIA with the same id attribute: size-hint |
| Text with insufficient color contrast | product | 1 | Fix any of the following: Element's background color could not be determined due to a background image |
Automated tools detect about 57% of accessibility issues by volume. The other 43% live in the checks below, which require a person. This is the exact scope of the Full Audit's human pass; we list it so you know what this report does and does not cover.
| Check | Why automation cannot decide it |
|---|---|
| Focus visibility and order through the buying flow | Whether you can SEE where keyboard focus is, and whether it moves in a sensible order, is a judgment call. |
| Keyboard traps | Only actually tabbing through the store reveals a widget you can enter but not leave. |
| Cart drawer and modal behavior | Focus must move into the dialog, stay there, and return on close; tools cannot follow the interaction. |
| Alt text quality | Automation checks that alt text exists, not whether "IMG_2041" or "shoe" actually describes the product. |
| Variant selection announcements | Whether choosing a size is announced to a screen reader requires listening to one. |
| Add-to-cart feedback | A silent success is a failure for a blind shopper; only a screen-reader pass hears it. |
| Form error announcements | Errors must be announced and identify the field; tools cannot judge the experience. |
| 200% zoom and 320px reflow | Whether content survives zoom without loss or sideways scrolling needs eyes on it. |
| Contrast over images | Text over photos and gradients cannot be measured automatically; these appear in the needs-review list above. |
| Carousel and motion behavior | Whether moving content can actually be paused is an interaction test. |
These are not WCAG failures and are excluded from the counts above; they are improvements recognized as good practice.
| Note | Where | Elements |
|---|---|---|
| tabindex | product | 1 |
| Heading levels that skip | product | 1 |
For your developer: the exact elements behind each finding. Selectors are CSS paths into your live theme; snippets are the failing HTML at scan time.
image-altRule reference: https://dequeuniversity.com/rules/axe/4.12/image-alt?application=playwright
selector: img:nth-child(3) <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==" width="120" height="90"> Fix any of the following: Element does not have an alt attribute aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute Element's default semantics were not overridden with role="none" or role="presentation"plus 1 more element(s) with the same pattern.
aria-allowed-attrRule reference: https://dequeuniversity.com/rules/axe/4.12/aria-allowed-attr?application=playwright
selector: div:nth-child(11) <div aria-checked="true">Subscribe and save</div> Fix all of the following: ARIA attribute is not allowed: aria-checked="true"aria-required-attrRule reference: https://dequeuniversity.com/rules/axe/4.12/aria-required-attr?application=playwright
selector: div[role="checkbox"] <div role="checkbox" tabindex="0">Gift wrap</div> Fix any of the following: Required ARIA attribute not present: aria-checkedbutton-nameRule reference: https://dequeuniversity.com/rules/axe/4.12/button-name?application=playwright
selector: header > button <button><svg width="24" height="24" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"></circle></svg></button> Fix any of the following: Element does not have inner text that is visible to screen readers aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute Element does not have an implicit (wrapped) <label> Element does not have an explicit <label> Element's default semantics were not overridden with role="none" or role="presentation"labelRule reference: https://dequeuniversity.com/rules/axe/4.12/label?application=playwright
selector: input[type="email"] <input type="email" name="email"> Fix any of the following: Element does not have an implicit (wrapped) <label> Element does not have an explicit <label> aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute Element has no placeholder attribute Element's default semantics were not overridden with role="none" or role="presentation"select-nameRule reference: https://dequeuniversity.com/rules/axe/4.12/select-name?application=playwright
selector: select <select> <option>Small</option> <option>Medium</option> <option>Large</option> </select> Fix any of the following: Element does not have an implicit (wrapped) <label> Element does not have an explicit <label> aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute Element's default semantics were not overridden with role="none" or role="presentation"aria-hidden-focusRule reference: https://dequeuniversity.com/rules/axe/4.12/aria-hidden-focus?application=playwright
selector: div[aria-hidden="true"] <div aria-hidden="true"><button>Hidden add to cart</button></div> Fix all of the following: Focusable content should be disabled or be removed from the DOMcolor-contrastRule reference: https://dequeuniversity.com/rules/axe/4.12/color-contrast?application=playwright
selector: .lowcontrast <p class="lowcontrast visually-big">Sale! Everything 20% off with code GOLDEN.</p> Fix any of the following: Element has insufficient color contrast of 1.91 (foreground color: #bbbbbb, background color: #ffffff, font size: 16.5pt (22px), font weight: normal). Expected contrast ratio of 4.5:1frame-titleRule reference: https://dequeuniversity.com/rules/axe/4.12/frame-title?application=playwright
selector: iframe <iframe src="about:blank" width="200" height="80"></iframe> Fix any of the following: Element has no title attribute aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element's default semantics were not overridden with role="none" or role="presentation"html-has-langRule reference: https://dequeuniversity.com/rules/axe/4.12/html-has-lang?application=playwright
selector: html <html> Fix any of the following: The <html> element does not have a lang attributelink-nameRule reference: https://dequeuniversity.com/rules/axe/4.12/link-name?application=playwright
selector: a[href$="cart"] <a href="/cart"><svg width="24" height="24" viewBox="0 0 24 24"><path d="M6 6h15l-1.5 9h-12z"></path></svg></a> Fix all of the following: Element is in tab order and does not have accessible text Fix any of the following: Element does not have text that is visible to screen readers aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attributelistRule reference: https://dequeuniversity.com/rules/axe/4.12/list?application=playwright
selector: ul <ul> <li>Free shipping</li> <div>30-day returns</div> </ul> Fix all of the following: List element has direct children that are not allowed: divnested-interactiveRule reference: https://dequeuniversity.com/rules/axe/4.12/nested-interactive?application=playwright
selector: main > button <button>Quick view <a href="/products/golden-tee">details</a></button> Fix any of the following: Element has focusable descendantsscrollable-region-focusableRule reference: https://dequeuniversity.com/rules/axe/4.12/scrollable-region-focusable?application=playwright
selector: .scrollbox <div class="scrollbox"> <p>Care instructions line 1</p><p>line 2</p><p>line 3</p><p>line 4</p><p>line 5</p><p>line 6</p> </div> Fix any of the following: Element should have focusable content Element should be focusablemeta-viewportRule reference: https://dequeuniversity.com/rules/axe/4.12/meta-viewport?application=playwright
selector: meta[name="viewport"] <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1"> Fix any of the following: user-scalable=no on <meta> tag disables zooming on mobile devicesduplicate-id-aria (needs human review)color-contrast (needs human review)Prepared by WideAisle · wideaisle.com · This report is an accessibility assessment, not legal advice, and not a guarantee or certification of compliance with the ADA, the European Accessibility Act, or any other law. Fixing the issues it identifies reduces barriers for shoppers with disabilities and reduces legal risk, but nothing can eliminate that risk entirely.