Sample Accessibility Fix Report. Harbor & Pine is a fictional store we built with common accessibility defects, then tested with the same engine that scans your website.

Scan your website free

Sample Accessibility Fix Report

harborandpine.example

Platform:
Shopify
Generated:
Sep 24, 2026
Pages tested:
9
Engine:
axe-core 4.13.0

Summary

Automated tests find part of the accessibility issues on a site, not all. This report describes what our tests found and how to fix it. It is not legal advice and does not certify compliance with the ADA, the European Accessibility Act or any law.

Overview

P1 · Fix firstBlocks visitors on key pages
8
P2 · Fix nextSerious or moderate barriers
0
P3 · ImproveMinor issues and best practices
2

Instances by severity

Critical
73
Serious
58
Moderate
25
Minor
0
Verified failuresIssue types an automated test failed
10
Needs reviewFlagged, but needs a human to decide
4
Passed checksAutomated rules with no failures
32
Not testedJourney steps and manual checks
7

We tested 9 pages, 4 of them sampled from your sitemap. Target dates are suggestions based on severity; agree the final dates with your developer.

Website overview

Detected from public evidence on the tested pages. A label can be wrong; it only decides which extra checks run.

Website type

  • Online storeHigh confidence
    • Runs on Shopify, a store platform
    • Link to a cart
    • Product or shop links
  • Landing pageMedium confidence
    • Only 6 internal pages linked

Detected technologies

  • ShopifyHigh confidence

    Shopify assets or scripts on the page

Checks for this site

  • Universal checks: accessibility, SEO, speed, security and email
  • E-commerce module: collection, product and cart pages, and a keyboard shopping journey up to the checkout button
  • Shopify notes: theme and admin fix steps; platform-managed headers and cookies shown for reference

Keyboard shopping journey

We tried to shop using only the keyboard (Tab, Shift+Tab, Enter, Space, Escape), the way people who can't use a mouse do. We add one item to a cart in a throwaway session and stop at the checkout button: we never enter checkout or type personal or payment details. Goal: Get from the home page to the checkout button with only a keyboard.

  1. 01Reach the main navigation

    Passed

    Focus reached “Shop” in the navigation after 21 Tab presses.

    Expected: Pressing Tab from the top of the home page reaches the links in the main navigation.

    • Note: A cookie banner held keyboard focus until we pressed Enter on “Accept all”.
    How to reproduce

    https://harborandpine.example/

    1. Open the home page.
    2. Click the browser's address bar, then press Tab repeatedly (Shift+Tab goes back).

    Focus order we observed

    “Shop”

  2. 02Open a product from a collection

    Passed

    Focus reached “Trail Daypack 22L” after 9 Tab presses, and Enter opened /products/trail-daypack.

    Expected: Tab reaches a product in the collection grid, and Enter opens its page.

    How to reproduce

    https://harborandpine.example/collections/all

    1. Open /collections/all.
    2. Press Tab until a product in the grid is highlighted, then press Enter.

    Focus order we observed

    “Harbor & Pine” → “Shop” → “New arrivals” → “Our story” → body > header.site > div.icons > button → “Account” → body > header.site > div.icons > a → “FeaturedPrice, low to highPrice, high to low” → “Trail Daypack 22L”

  3. 03Choose options and quantity

    Failed

    3 product options can't receive keyboard focus: “S”, “M”, “L”. They respond to the mouse, but a keyboard user can't choose them.

    Expected: Every product option (size, colour, variant) and the quantity field can be reached with Tab.

    2.1.1 Keyboard · Confidence: high

    Choose options and quantity: the element that fails, outlined
    Choose options and quantity: the element that fails, outlined
    How to reproduce

    https://harborandpine.example/products/trail-daypack

    1. Open /products/trail-daypack.
    2. Press Tab from the top of the page and note which controls receive focus before Add to cart.

    Focus order we observed

    “Harbor & Pine” → “Shop” → “New arrivals” → “Our story” → … 5 more … → body > header.site > div.icons > a → div.page.product > div.gallery > div.thumbs > button → div.page.product > div.gallery > div.thumbs > button → div.page.product > div.gallery > div.thumbs > button → div.page.product > div > div.swatches > button → div.page.product > div > div.swatches > button → div.page.product > div > div.swatches > button → “1” → “Add to cart”

    Element
    <div class="size-option" data-fr="opt-1">S</div>
  4. 04Add to cart with the keyboard

    Needs review

    Enter on Add to cart worked (the cart count in the header changed, an “added to cart” message appeared), but we found no status message or focused dialog, so screen reader users may not hear that the item was added.

    Expected: Enter on Add to cart adds the item, and the confirmation is announced: a status message, a dialog that takes focus, or the cart page.

    4.1.3 Status Messages · Confidence: medium

    Add to cart with the keyboard: the page at this step
    Add to cart with the keyboard: the page at this step
    How to reproduce

    https://harborandpine.example/products/trail-daypack

    1. Open /products/trail-daypack.
    2. Press Tab until Add to cart is focused, then press Enter.
    3. Listen with a screen reader (VoiceOver: Cmd+F5) for a confirmation.
  5. 05Change the cart and reach checkout

    Passed

    Reached all 4 cart controls and the checkout button (“Check out”) in 12 Tab presses. We did not press it.

    Expected: Quantity fields, remove buttons and the checkout button can all be reached with Tab.

    How to reproduce

    https://harborandpine.example/cart

    1. Add any product to the cart and open the cart page.
    2. Press Tab and check that quantity fields, remove buttons and the checkout button all receive focus.

    Focus order we observed

    “Harbor & Pine” → “Shop” → “New arrivals” → “Our story” → body > header.site > div.icons > button → “Account” → body > header.site > div.icons > a → “1” → tbody > tr > td > button.remove → “2” → tbody > tr > td > button.remove → “Check out”

  6. 06Checkout

    Not tested

    We stop at the checkout button: we never enter checkout, create an order or type payment details. On Shopify the checkout pages are run by Shopify, not your theme. Check checkout by hand (see Manual checks).

Letter claim map

Each claim in the letter, matched to the scan evidence. A factual comparison, not legal advice.

  • “Images lack alternative text, so product photos are not described.”

    Images without text alternatives. 10 instances on 3 of 5 pages tested.

    image-alt

    Reproduced
  • “Text has insufficient color contrast against its background, including sale badges and prices.”

    Low color contrast. 16 instances on 5 of 5 pages tested.

    color-contrast

    Reproduced
  • “The website cannot be navigated using a keyboard alone.”

    Keyboard access and focus. Keyboard focus gets stuck in the cookie banner.

    Reproduced
  • “Form fields do not have labels, including the newsletter sign-up and the quantity fields in the cart.”

    Form fields without labels. 4 instances on 3 of 5 pages tested.

    select-name, label

    Reproduced
  • “Product videos do not have captions.”

    Video and audio captions. Automated scans can't judge captions. Check every product or brand video for accurate captions and a transcript.

    Manual check
  • “Our client is legally blind and uses screen reader software.”

    Other issues. This is a general statement. Test key flows (search, product page, add to cart, checkout) with a screen reader such as VoiceOver or NVDA.

    Manual check

Remediation plan

Issues in priority order with owners and target dates
PriorityIssueStatusWCAGInstancesOwnerTarget date
P1Keyboard focus is trapped in the cookie bannerVerified2.1.21app vendor2026-10-08
P1Product options can't be chosen with the keyboardVerified2.1.11theme developer2026-10-08
P1Buttons must have discernible textVerified4.1.241theme developer2026-10-08
P1Images must have alternative textVerified1.1.122content editor2026-10-08
P1Form elements must have labelsVerified4.1.27theme developer2026-10-08
P1Select element must have an accessible nameVerified4.1.21theme developer2026-10-08
P1Links must have discernible textVerified2.4.4, 4.1.236theme developer2026-10-08
P1Elements must meet minimum color contrast ratio thresholdsVerified1.4.322store owner (admin settings)2026-10-08
P3All page content should be contained by landmarksVerifiedBest practice18theme developer2026-11-23
P3Heading levels should only increase by oneVerifiedBest practice7theme developer2026-11-23

How to fix each issue

P1CriticalVerified failureWCAG 2.1.2

Keyboard focus is trapped in the cookie banner

effort: moderate · owner: app vendor · 2.1.2 No Keyboard Trap

When a keyboard user presses Tab, focus cycles through a few elements and never reaches the rest of the page.

Keyboard-only and screen reader users cannot shop at all if focus is trapped (WCAG 2.1.2 No Keyboard Trap).

Evidence

Found by
Keyboard test (Tab through the home page)
Status · confidence
Verified failure · high
Detected
Sep 24, 2026 (UTC)
Where
1 instance on 1 page

Expected: Pressing Tab moves through every interactive element on the page and on to the rest of the page.

Observed: After 40 Tab presses, focus kept cycling through: Settings, Accept all.

How to reproduce
  1. Open the home page.
  2. Click the address bar, then press Tab repeatedly.
  3. Focus keeps returning to the same few elements.
Failing elements (6 shown)
button#cc-settings
Settings
button#cc-accept.primary
Accept all
button#cc-settings
Settings
button#cc-accept.primary
Accept all
button#cc-settings
Settings
button#cc-accept.primary
Accept all
Pages affected (1)
  • https://harborandpine.example/

How to fix it

General guidance
  1. Check your cookie or consent banner app's settings for an accessibility or focus-trap option, or ask the vendor to fix it.
  2. A modal may keep focus inside it only while it is open, and must close with the Escape key and return focus to where it came from.
Fix with AIShow the prompt

Paste this into ChatGPT, Claude, Cursor or Copilot together with your theme file. Review the change before you publish it.

I run a Shopify store (Online Store 2.0 theme, Liquid templates) at harborandpine.example. An accessibility test found this problem and I want to fix it in my theme.

Problem: Keyboard focus is trapped in the cookie banner (WCAG 2.1.2).
Where: 1 instance on 1 page, for example /.

One failing element, as the browser rendered it:
```html
Settings
```

Why it matters: Keyboard-only and screen reader users cannot shop at all if focus is trapped (WCAG 2.1.2 No Keyboard Trap).

What needs to change:
- Check your cookie or consent banner app's settings for an accessibility or focus-trap option, or ask the vendor to fix it.
- A modal may keep focus inside it only while it is open, and must close with the Escape key and return focus to where it came from.

Rules for your answer:
- Show the exact edit as before and after, and name the file or setting it goes in. If you need to see my file first, ask me to paste it.
- Keep the visual design and all existing behaviour the same.
- Don't invent product names, prices or text; use placeholders I can fill in.
- End with how I can check the fix myself.
- Include how to confirm it with the keyboard and a screen reader.

Check your fix

  • Load the home page, press Tab repeatedly and confirm focus reaches the main navigation and content.

Detected by an automated keyboard probe; confirm by hand.

P1CriticalVerified failureWCAG 2.1.1

Product options can't be chosen with the keyboard

effort: moderate · owner: theme developer · 2.1.1 Keyboard

Size, colour or variant options respond to the mouse but can't receive keyboard focus, so keyboard users can't choose a variant.

Keyboard-only shoppers, including many screen reader users, can't get past this step (WCAG 2.1.1).

Evidence

Found by
Keyboard journey
Status · confidence
Verified failure · high
Detected
Sep 24, 2026 (UTC)
Where
1 instance on 1 page

Expected: Every product option (size, colour, variant) and the quantity field can be reached with Tab.

Observed: 3 product options can't receive keyboard focus: “S”, “M”, “L”. They respond to the mouse, but a keyboard user can't choose them.

Product options can't be chosen with the keyboard: the outlined element
Product options can't be chosen with the keyboard: the outlined element
How to reproduce
  1. Open /products/trail-daypack.
  2. Press Tab from the top of the page and note which controls receive focus before Add to cart.
Failing elements (1 shown)
(see screenshot)
<div class="size-option" data-fr="opt-1">S</div>
Pages affected (1)
  • https://harborandpine.example/products/trail-daypack

How to fix it

General guidance
  1. Build option pickers from native radio buttons (or a <select>) with visible labels; style the label as the swatch.
  2. If you keep custom elements, each option needs tabindex="0", role="radio" with aria-checked inside a role="radiogroup", and arrow-key and Space handling. Native radios give you all of this for free.

Code

Implementation examples for your developer. We don't have your theme's source code, so file locations are hints, not exact paths.

Before · what we found · Your theme's product form (variant picker)
<div class="size-option" data-fr="opt-1">S</div>
After · example to adapt
<fieldset class="variant-picker">
  <legend>Size</legend>
  <input type="radio" id="size-s" name="Size" value="S" class="visually-hidden">
  <label for="size-s" class="size-option">S</label>
  <input type="radio" id="size-m" name="Size" value="M" class="visually-hidden">
  <label for="size-m" class="size-option">M</label>
</fieldset>

Each option is a real radio button, reachable with Tab and changed with the arrow keys; the label keeps your swatch styling. Use your option names and values.

Fix with AIShow the prompt

Paste this into ChatGPT, Claude, Cursor or Copilot together with your theme file. Review the change before you publish it.

I run a Shopify store (Online Store 2.0 theme, Liquid templates) at harborandpine.example. An accessibility test found this problem and I want to fix it in my theme.

Problem: Product options can't be chosen with the keyboard (WCAG 2.1.1).
Where: 1 instance on 1 page, for example /products/trail-daypack.

One failing element, as the browser rendered it:
```html
<div class="size-option" data-fr="opt-1">S</div>
```

Why it matters: Keyboard-only shoppers, including many screen reader users, can't get past this step (WCAG 2.1.1).

What needs to change:
- Build option pickers from native radio buttons (or a <select>) with visible labels; style the label as the swatch.
- If you keep custom elements, each option needs tabindex="0", role="radio" with aria-checked inside a role="radiogroup", and arrow-key and Space handling. Native radios give you all of this for free.

A suggested change (Your theme's product form (variant picker)):
```html
<fieldset class="variant-picker">
  <legend>Size</legend>
  <input type="radio" id="size-s" name="Size" value="S" class="visually-hidden">
  <label for="size-s" class="size-option">S</label>
  <input type="radio" id="size-m" name="Size" value="M" class="visually-hidden">
  <label for="size-m" class="size-option">M</label>
</fieldset>
```

Rules for your answer:
- Show the exact edit as before and after, and name the file or setting it goes in. If you need to see my file first, ask me to paste it.
- Keep the visual design and all existing behaviour the same.
- Don't invent product names, prices or text; use placeholders I can fill in.
- End with how I can check the fix myself.
- Include how to confirm it with the keyboard and a screen reader.

Check your fix

  • Repeat the reproduction steps with the keyboard only.
  • Request a re-test from this report: the journey runs again.
P1CriticalVerified failureWCAG 4.1.2

Buttons must have discernible text

effort: quick · owner: theme developer · 4.1.2 Name, Role, Value

Some buttons have no accessible name, so screen reader users hear only 'button'.

WCAG 4.1.2 requires every control to have a name. Unnamed buttons often include quantity steppers, close buttons and slider arrows.

Evidence

Found by
axe-core automated rule
Status · confidence
Verified failure · high
Detected
Sep 24, 2026 (UTC)
Where
41 instances on 9 pages

Expected: Buttons must have discernible text

Observed: 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"

Buttons must have discernible text: the outlined element on /
Buttons must have discernible text: the outlined element on /
Buttons must have discernible text: the outlined element on /collections/all
Buttons must have discernible text: the outlined element on /collections/all
How to reproduce
  1. Open https://harborandpine.example/ in Chrome or Edge.
  2. Open DevTools (F12) › Elements, press Ctrl+F (Cmd+F on Mac) and search for: .icons > button[type="button"]
  3. In DevTools' Accessibility pane, the element's computed Name is empty.
  4. Or run the free axe DevTools browser extension on the page: it reports this as "button-name".
Failing elements (4 shown)
.icons > button[type="button"]
<button type="button"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"></circle><path d="M20 20l-3.5-3.5"></path></svg></button>
.thumbs > button:nth-child(1)
<button type="button"><img src="/img/daypack.svg"></button>
.thumbs > button:nth-child(2)
<button type="button"><img src="/img/jacket.svg"></button>
.thumbs > button:nth-child(3)
<button type="button"><img src="/img/bottle.svg"></button>
Pages affected (9)
  • https://harborandpine.example/
  • https://harborandpine.example/collections/all
  • https://harborandpine.example/products/trail-daypack
  • https://harborandpine.example/cart
  • https://harborandpine.example/pages/about
  • https://harborandpine.example/products/pine-wool-beanie
  • https://harborandpine.example/products/enamel-camp-mug
  • https://harborandpine.example/products/harbor-lantern
  • https://harborandpine.example/products/insulated-bottle

How to fix it

Code built from your page's markup
  1. Find the buttons in the examples below.
  2. Add visible text, visually hidden text, or an aria-label that says what the button does (for example aria-label="Close" or aria-label="Increase quantity").

Code

Implementation examples for your developer. We don't have your theme's source code, so file locations are hints, not exact paths.

Before · what we found · Your theme code (search it for the markup shown)
<button type="button">…</button>
After · built from the failing element
<button type="button" aria-label="[What this button does]">…</button>

Replace the bracketed text with what the button does. Visible text or visually hidden text inside the button works too.

Before · what we found · Your theme code (search it for the markup shown)
<button type="button"><img src="/img/daypack.svg"></button>
After · built from the failing element
<button type="button" aria-label="[Describe the image, e.g. Back view]"><img src="/img/daypack.svg"></button>

Replace the bracketed text with what the button does. Visible text or visually hidden text inside the button works too.

Before · what we found · Your theme code (search it for the markup shown)
<button type="button"><img src="/img/jacket.svg"></button>
After · built from the failing element
<button type="button" aria-label="[Describe the image, e.g. Back view]"><img src="/img/jacket.svg"></button>

Replace the bracketed text with what the button does. Visible text or visually hidden text inside the button works too.

Before · what we found · Your theme code (search it for the markup shown)
<button type="button"><img src="/img/bottle.svg"></button>
After · built from the failing element
<button type="button" aria-label="[Describe the image, e.g. Back view]"><img src="/img/bottle.svg"></button>

Replace the bracketed text with what the button does. Visible text or visually hidden text inside the button works too.

Fix with AIShow the prompt

Paste this into ChatGPT, Claude, Cursor or Copilot together with your theme file. Review the change before you publish it.

I run a Shopify store (Online Store 2.0 theme, Liquid templates) at harborandpine.example. An accessibility test found this problem and I want to fix it in my theme.

Problem: Buttons must have discernible text (WCAG 4.1.2).
Where: 41 instances on 9 pages, for example /, /collections/all, /products/trail-daypack, /cart.

One failing element, as the browser rendered it:
```html
<button type="button"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"></circle><path d="M20 20l-3.5-3.5"></path></svg></button>
```

Why it matters: WCAG 4.1.2 requires every control to have a name. Unnamed buttons often include quantity steppers, close buttons and slider arrows.

What needs to change:
- Find the buttons in the examples below.
- Add visible text, visually hidden text, or an aria-label that says what the button does (for example aria-label="Close" or aria-label="Increase quantity").

A suggested change (Your theme code (search it for the markup shown)):
```html
<button type="button" aria-label="[What this button does]">…</button>
```

Rules for your answer:
- Show the exact edit as before and after, and name the file or setting it goes in. If you need to see my file first, ask me to paste it.
- Keep the visual design and all existing behaviour the same.
- Don't invent product names, prices or text; use placeholders I can fill in.
- End with how I can check the fix myself.
- Include how to confirm it with the keyboard and a screen reader.

Check your fix

  • Re-scan the affected pages.
  • Check the buttons with a screen reader.

Detailed guidance: https://dequeuniversity.com/rules/axe/4.13/button-name?application=playwright

P1CriticalVerified failureWCAG 1.1.1

Images must have alternative text

effort: moderate · owner: content editor · 1.1.1 Non-text Content

Images are missing a text alternative, so screen reader users don't know what they show.

WCAG 1.1.1 requires a text alternative for meaningful images. Without it, a screen reader user can't tell which product a photo shows.

Evidence

Found by
axe-core automated rule
Status · confidence
Verified failure · high
Detected
Sep 24, 2026 (UTC)
Where
22 instances on 7 pages

Expected: Images must have alternative text

Observed: 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"

Images must have alternative text: the outlined element on /
Images must have alternative text: the outlined element on /
Images must have alternative text: the outlined element on /collections/all
Images must have alternative text: the outlined element on /collections/all
How to reproduce
  1. Open https://harborandpine.example/ in Chrome or Edge.
  2. Open DevTools (F12) › Elements, press Ctrl+F (Cmd+F on Mac) and search for: img[src$="hero-photo.jpg"]
  3. In DevTools' Accessibility pane, the element's computed Name is empty.
  4. Or run the free axe DevTools browser extension on the page: it reports this as "image-alt".
Failing elements (4 shown)
img[src$="hero-photo.jpg"]
<img src="/img/hero-photo.jpg" loading="lazy">
img[src$="mug.svg"]
<img src="/img/mug.svg">
img[src$="beanie.svg"]
<img src="/img/beanie.svg">
img[src$="jacket.svg"]
<img src="/img/jacket.svg">
Pages affected (7)
  • https://harborandpine.example/
  • https://harborandpine.example/collections/all
  • https://harborandpine.example/products/trail-daypack
  • https://harborandpine.example/products/pine-wool-beanie
  • https://harborandpine.example/products/enamel-camp-mug
  • https://harborandpine.example/products/harbor-lantern
  • https://harborandpine.example/products/insulated-bottle

How to fix it

Code built from your page's markup
  1. In Shopify admin, open Products > [product] > Media, click each image and fill in 'Alt text'. For section images, open Online Store > Themes > Customize and set the image alt text in the section settings.
  2. Describe what matters to a shopper: product name, color and the angle shown (for example 'Canvas tote in olive, front view').
  3. Decorative images should have an empty alt attribute (alt="") so screen readers skip them.

Code

Implementation examples for your developer. We don't have your theme's source code, so file locations are hints, not exact paths.

Before · what we found · Product photos: Shopify admin › Products › Media › Alt text. Other images: your theme code
<img src="/img/hero-photo.jpg" loading="lazy">
After · built from the failing element
<img src="/img/hero-photo.jpg" loading="lazy" alt="[Describe the image for a shopper]">

Describe what the image shows (for a product photo: product, colour, angle). If the image is purely decorative, use alt="" instead so screen readers skip it.

Before · what we found · Product photos: Shopify admin › Products › Media › Alt text. Other images: your theme code
<img src="/img/mug.svg">
After · built from the failing element
<img src="/img/mug.svg" alt="[Describe the image for a shopper]">

Describe what the image shows (for a product photo: product, colour, angle). If the image is purely decorative, use alt="" instead so screen readers skip it.

Before · what we found · Product photos: Shopify admin › Products › Media › Alt text. Other images: your theme code
<img src="/img/beanie.svg">
After · built from the failing element
<img src="/img/beanie.svg" alt="[Describe the image for a shopper]">

Describe what the image shows (for a product photo: product, colour, angle). If the image is purely decorative, use alt="" instead so screen readers skip it.

Before · what we found · Product photos: Shopify admin › Products › Media › Alt text. Other images: your theme code
<img src="/img/jacket.svg">
After · built from the failing element
<img src="/img/jacket.svg" alt="[Describe the image for a shopper]">

Describe what the image shows (for a product photo: product, colour, angle). If the image is purely decorative, use alt="" instead so screen readers skip it.

Fix with AIShow the prompt

Paste this into ChatGPT, Claude, Cursor or Copilot together with your theme file. Review the change before you publish it.

I run a Shopify store (Online Store 2.0 theme, Liquid templates) at harborandpine.example. An accessibility test found this problem and I want to fix it in my theme.

Problem: Images must have alternative text (WCAG 1.1.1).
Where: 22 instances on 7 pages, for example /, /collections/all, /products/trail-daypack, /products/pine-wool-beanie.

One failing element, as the browser rendered it:
```html
<img src="/img/hero-photo.jpg" loading="lazy">
```

Why it matters: WCAG 1.1.1 requires a text alternative for meaningful images. Without it, a screen reader user can't tell which product a photo shows.

What needs to change:
- In Shopify admin, open Products > [product] > Media, click each image and fill in 'Alt text'. For section images, open Online Store > Themes > Customize and set the image alt text in the section settings.
- Describe what matters to a shopper: product name, color and the angle shown (for example 'Canvas tote in olive, front view').
- Decorative images should have an empty alt attribute (alt="") so screen readers skip them.

A suggested change (Product photos: Shopify admin › Products › Media › Alt text. Other images: your theme code):
```html
<img src="/img/hero-photo.jpg" loading="lazy" alt="[Describe the image for a shopper]">
```

Rules for your answer:
- Show the exact edit as before and after, and name the file or setting it goes in. If you need to see my file first, ask me to paste it.
- Keep the visual design and all existing behaviour the same.
- Don't invent product names, prices or text; use placeholders I can fill in.
- End with how I can check the fix myself.
- Include how to confirm it with the keyboard and a screen reader.

Check your fix

  • Re-scan the affected pages.
  • Use a screen reader (VoiceOver: Cmd+F5 on Mac) to hear the product images announced.

Detailed guidance: https://dequeuniversity.com/rules/axe/4.13/image-alt?application=playwright

P1CriticalVerified failureWCAG 4.1.2

Form elements must have labels

effort: quick · owner: theme developer · 4.1.2 Name, Role, Value

Some form fields have no label, so screen reader users don't know what to enter.

WCAG 1.3.1, 3.3.2 and 4.1.2 require form fields to have labels. Newsletter sign-up and search fields are common offenders.

Evidence

Found by
axe-core automated rule
Status · confidence
Verified failure · high
Detected
Sep 24, 2026 (UTC)
Where
7 instances on 6 pages

Expected: Form elements must have labels

Observed: 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"

Form elements must have labels: the outlined element on /products/trail-daypack
Form elements must have labels: the outlined element on /products/trail-daypack
Form elements must have labels: the outlined element on /cart
Form elements must have labels: the outlined element on /cart
How to reproduce
  1. Open https://harborandpine.example/products/trail-daypack in Chrome or Edge.
  2. Open DevTools (F12) › Elements, press Ctrl+F (Cmd+F on Mac) and search for: input
  3. In DevTools' Accessibility pane, the element's computed Name is empty.
  4. Or run the free axe DevTools browser extension on the page: it reports this as "label".
Failing elements (2 shown)
input
<input type="number" value="1" min="1">
input[value="2"]
<input type="number" value="2" min="1">
Pages affected (6)
  • https://harborandpine.example/products/trail-daypack
  • https://harborandpine.example/cart
  • https://harborandpine.example/products/pine-wool-beanie
  • https://harborandpine.example/products/enamel-camp-mug
  • https://harborandpine.example/products/harbor-lantern
  • https://harborandpine.example/products/insulated-bottle

How to fix it

Code built from your page's markup
  1. Give each field a <label for="field-id"> element, or at minimum an aria-label.
  2. Placeholder text alone does not count as a label.

Code

Implementation examples for your developer. We don't have your theme's source code, so file locations are hints, not exact paths.

Before · what we found · Your theme code (search it for the markup shown)
<input type="number" value="1" min="1">
After · built from the failing element
<input type="number" value="1" min="1" aria-label="Quantity">

The field has no id, so the quickest fix is an aria-label. A visible <label> is better for everyone. Label text "Quantity" is guessed from the field; adjust if needed.

Before · what we found · Your theme code (search it for the markup shown)
<input type="number" value="2" min="1">
After · built from the failing element
<input type="number" value="2" min="1" aria-label="Quantity">

The field has no id, so the quickest fix is an aria-label. A visible <label> is better for everyone. Label text "Quantity" is guessed from the field; adjust if needed.

Fix with AIShow the prompt

Paste this into ChatGPT, Claude, Cursor or Copilot together with your theme file. Review the change before you publish it.

I run a Shopify store (Online Store 2.0 theme, Liquid templates) at harborandpine.example. An accessibility test found this problem and I want to fix it in my theme.

Problem: Form elements must have labels (WCAG 4.1.2).
Where: 7 instances on 6 pages, for example /products/trail-daypack, /cart, /products/pine-wool-beanie, /products/enamel-camp-mug.

One failing element, as the browser rendered it:
```html
<input type="number" value="1" min="1">
```

Why it matters: WCAG 1.3.1, 3.3.2 and 4.1.2 require form fields to have labels. Newsletter sign-up and search fields are common offenders.

What needs to change:
- Give each field a <label for="field-id"> element, or at minimum an aria-label.
- Placeholder text alone does not count as a label.

A suggested change (Your theme code (search it for the markup shown)):
```html
<input type="number" value="1" min="1" aria-label="Quantity">
```

Rules for your answer:
- Show the exact edit as before and after, and name the file or setting it goes in. If you need to see my file first, ask me to paste it.
- Keep the visual design and all existing behaviour the same.
- Don't invent product names, prices or text; use placeholders I can fill in.
- End with how I can check the fix myself.
- Include how to confirm it with the keyboard and a screen reader.

Check your fix

  • Re-scan and confirm the label rule no longer fails.
  • Click each label and check it focuses its field.

Detailed guidance: https://dequeuniversity.com/rules/axe/4.13/label?application=playwright

P1CriticalVerified failureWCAG 4.1.2

Select element must have an accessible name

effort: quick · owner: theme developer · 4.1.2 Name, Role, Value

A dropdown (often a sort or variant selector) has no label.

WCAG 4.1.2 requires select menus to have an accessible name.

Evidence

Found by
axe-core automated rule
Status · confidence
Verified failure · high
Detected
Sep 24, 2026 (UTC)
Where
1 instance on 1 page

Expected: Select element must have an accessible name

Observed: 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"

Select element must have an accessible name: the outlined element on /collections/all
Select element must have an accessible name: the outlined element on /collections/all
How to reproduce
  1. Open https://harborandpine.example/collections/all in Chrome or Edge.
  2. Open DevTools (F12) › Elements, press Ctrl+F (Cmd+F on Mac) and search for: select
  3. In DevTools' Accessibility pane, the element's computed Name is empty.
  4. Or run the free axe DevTools browser extension on the page: it reports this as "select-name".
Failing elements (1 shown)
select
<select><option>Featured</option><option>Price, low to high</option><option>Price, high to low</option></select>
Pages affected (1)
  • https://harborandpine.example/collections/all

How to fix it

Code built from your page's markup
  1. Add a <label> linked to the select, or an aria-label such as aria-label="Sort by".

Code

Implementation examples for your developer. We don't have your theme's source code, so file locations are hints, not exact paths.

Before · what we found · Your theme code (search it for the markup shown)
<select><option>Featured</option><option>Price, low to high</option><option>Price, high to low</option></select>
After · built from the failing element
<select aria-label="[Field label]"><option>Featured</option><option>Price, low to high</option><option>Price, high to low</option></select>

The field has no id, so the quickest fix is an aria-label. A visible <label> is better for everyone. Replace the bracketed text with the field's label.

Fix with AIShow the prompt

Paste this into ChatGPT, Claude, Cursor or Copilot together with your theme file. Review the change before you publish it.

I run a Shopify store (Online Store 2.0 theme, Liquid templates) at harborandpine.example. An accessibility test found this problem and I want to fix it in my theme.

Problem: Select element must have an accessible name (WCAG 4.1.2).
Where: 1 instance on 1 page, for example /collections/all.

One failing element, as the browser rendered it:
```html
<select><option>Featured</option><option>Price, low to high</option><option>Price, high to low</option></select>
```

Why it matters: WCAG 4.1.2 requires select menus to have an accessible name.

What needs to change:
- Add a <label> linked to the select, or an aria-label such as aria-label="Sort by".

A suggested change (Your theme code (search it for the markup shown)):
```html
<select aria-label="[Field label]"><option>Featured</option><option>Price, low to high</option><option>Price, high to low</option></select>
```

Rules for your answer:
- Show the exact edit as before and after, and name the file or setting it goes in. If you need to see my file first, ask me to paste it.
- Keep the visual design and all existing behaviour the same.
- Don't invent product names, prices or text; use placeholders I can fill in.
- End with how I can check the fix myself.
- Include how to confirm it with the keyboard and a screen reader.

Check your fix

  • Re-scan the collection and product pages.

Detailed guidance: https://dequeuniversity.com/rules/axe/4.13/select-name?application=playwright

P1SeriousVerified failureWCAG 1.4.3

Elements must meet minimum color contrast ratio thresholds

effort: quick · owner: store owner (admin settings) · 1.4.3 Contrast (Minimum)

Some text doesn't stand out enough from its background to be read by people with low vision.

WCAG 1.4.3 requires a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text. Faint prices, badges and banners are hard to read for people with low vision, and for everyone in bright light.

Evidence

Found by
axe-core automated rule
Status · confidence
Verified failure · high
Detected
Sep 24, 2026 (UTC)
Where
22 instances on 9 pages

Expected: Elements must meet minimum color contrast ratio thresholds

Observed: Element has insufficient color contrast of 3.09 (foreground color: #ffffff, background color: #e76f51, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1

Elements must meet minimum color contrast ratio thresholds: the outlined element on /
Elements must meet minimum color contrast ratio thresholds: the outlined element on /
Elements must meet minimum color contrast ratio thresholds: the outlined element on /collections/all
Elements must meet minimum color contrast ratio thresholds: the outlined element on /collections/all
How to reproduce
  1. Open https://harborandpine.example/ in Chrome or Edge.
  2. Open DevTools (F12) › Elements, press Ctrl+F (Cmd+F on Mac) and search for: .announce
  3. Click the color swatch next to the element's color in the Styles pane to see the measured contrast ratio.
  4. Or run the free axe DevTools browser extension on the page: it reports this as "color-contrast".
Failing elements (4 shown)
.announce
<div class="announce">Free shipping on orders over $75 · Easy 30-day returns</div>
article:nth-child(3) > .badge
<span class="badge">Sale</span>
article:nth-child(3) > .price > .compare
<span class="compare">$72</span>
article:nth-child(4) > .price > .compare
<span class="compare">$40</span>
Pages affected (9)
  • https://harborandpine.example/
  • https://harborandpine.example/collections/all
  • https://harborandpine.example/products/trail-daypack
  • https://harborandpine.example/cart
  • https://harborandpine.example/pages/about
  • https://harborandpine.example/products/pine-wool-beanie
  • https://harborandpine.example/products/enamel-camp-mug
  • https://harborandpine.example/products/harbor-lantern
  • https://harborandpine.example/products/insulated-bottle

How to fix it

Code built from your page's markup
  1. Open the failing elements listed below and note the foreground and background colors in the failure summary.
  2. In Online Store > Themes > Customize > Theme settings > Colors, darken the text color or lighten the background for the affected color scheme until the ratio is at least 4.5:1.
  3. Pay special attention to sale badges, placeholder text, footer links and buttons on images.

Code

Implementation examples for your developer. We don't have your theme's source code, so file locations are hints, not exact paths.

Before · what we found · Theme settings › Colors, or your theme's CSS file
<div class="announce">Free shipping on orders over $75 · Easy 30-day returns</div>
After · built from the failing element
.announce {
  background-color: #b95941; /* was #e76f51: 3.09:1, now 4.59:1 */
}

Measured 3.09:1 for 13px text; WCAG 1.4.3 needs 4.5:1. #b95941 keeps the same hue and passes. The selector is the one our test used; your theme may use a broader class for the same style.

Before · what we found · Theme settings › Colors, or your theme's CSS file
<span class="badge">Sale</span>
After · built from the failing element
.badge {
  background-color: #9f693f; /* was #f4a261: 2.06:1, now 4.59:1 */
}

Measured 2.06:1 for 12px bold text; WCAG 1.4.3 needs 4.5:1. #9f693f keeps the same hue and passes. The selector is the one our test used; your theme may use a broader class for the same style.

Before · what we found · Theme settings › Colors, or your theme's CSS file
<span class="compare">$72</span>
After · built from the failing element
.compare {
  color: #78736c; /* was #b0a99f: 2.29:1, now 4.62:1 */
}

Measured 2.29:1 for 14px text; WCAG 1.4.3 needs 4.5:1. #78736c keeps the same hue and passes. The selector is the one our test used; your theme may use a broader class for the same style.

Fix with AIShow the prompt

Paste this into ChatGPT, Claude, Cursor or Copilot together with your theme file. Review the change before you publish it.

I run a Shopify store (Online Store 2.0 theme, Liquid templates) at harborandpine.example. An accessibility test found this problem and I want to fix it in my theme.

Problem: Elements must meet minimum color contrast ratio thresholds (WCAG 1.4.3).
Where: 22 instances on 9 pages, for example /, /collections/all, /products/trail-daypack, /cart.

One failing element, as the browser rendered it:
```html
<div class="announce">Free shipping on orders over $75 · Easy 30-day returns</div>
```

Why it matters: WCAG 1.4.3 requires a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text. Faint prices, badges and banners are hard to read for people with low vision, and for everyone in bright light.

What needs to change:
- Open the failing elements listed below and note the foreground and background colors in the failure summary.
- In Online Store > Themes > Customize > Theme settings > Colors, darken the text color or lighten the background for the affected color scheme until the ratio is at least 4.5:1.
- Pay special attention to sale badges, placeholder text, footer links and buttons on images.

A suggested change (Theme settings › Colors, or your theme's CSS file):
```css
.announce {
  background-color: #b95941; /* was #e76f51: 3.09:1, now 4.59:1 */
}
```

Rules for your answer:
- Show the exact edit as before and after, and name the file or setting it goes in. If you need to see my file first, ask me to paste it.
- Keep the visual design and all existing behaviour the same.
- Don't invent product names, prices or text; use placeholders I can fill in.
- End with how I can check the fix myself.
- Include how to confirm it with the keyboard and a screen reader.

Check your fix

  • Re-run the scan and confirm color-contrast no longer appears.
  • Spot-check with a contrast checker on the exact colors.

Detailed guidance: https://dequeuniversity.com/rules/axe/4.13/color-contrast?application=playwright

P3ModerateVerified failure

All page content should be contained by landmarks

effort: moderate · owner: theme developer

Some content isn't inside a page landmark (header, nav, main or footer).

Landmarks let screen reader users jump around the page. This is a best practice supporting WCAG 1.3.1 and 2.4.1.

Evidence

Found by
axe-core automated rule
Status · confidence
Verified failure · high
Detected
Sep 24, 2026 (UTC)
Where
18 instances on 9 pages

Expected: All page content should be contained by landmarks

Observed: Some page content is not contained by landmarks

All page content should be contained by landmarks: the outlined element on /
All page content should be contained by landmarks: the outlined element on /
All page content should be contained by landmarks: the outlined element on /cart
All page content should be contained by landmarks: the outlined element on /cart
How to reproduce
  1. Open https://harborandpine.example/ in Chrome or Edge.
  2. Open DevTools (F12) › Elements, press Ctrl+F (Cmd+F on Mac) and search for: .announce
  3. Or run the free axe DevTools browser extension on the page: it reports this as "region".
Failing elements (2 shown)
.announce
<div class="announce">Free shipping on orders over $75 · Easy 30-day returns</div>
#cookie-banner > p
<p>We use cookies to improve your experience and measure traffic.</p>
Pages affected (9)
  • https://harborandpine.example/
  • https://harborandpine.example/collections/all
  • https://harborandpine.example/products/trail-daypack
  • https://harborandpine.example/cart
  • https://harborandpine.example/pages/about
  • https://harborandpine.example/products/pine-wool-beanie
  • https://harborandpine.example/products/enamel-camp-mug
  • https://harborandpine.example/products/harbor-lantern
  • https://harborandpine.example/products/insulated-bottle

How to fix it

General guidance
  1. Wrap stray content (announcement bars, pop-ups, chat widgets) in the appropriate landmark or place it inside <main>.
Fix with AIShow the prompt

Paste this into ChatGPT, Claude, Cursor or Copilot together with your theme file. Review the change before you publish it.

I run a Shopify store (Online Store 2.0 theme, Liquid templates) at harborandpine.example. An accessibility test found this problem and I want to fix it in my theme.

Problem: All page content should be contained by landmarks.
Where: 18 instances on 9 pages, for example /, /collections/all, /products/trail-daypack, /cart.

One failing element, as the browser rendered it:
```html
<div class="announce">Free shipping on orders over $75 · Easy 30-day returns</div>
```

Why it matters: Landmarks let screen reader users jump around the page. This is a best practice supporting WCAG 1.3.1 and 2.4.1.

What needs to change:
- Wrap stray content (announcement bars, pop-ups, chat widgets) in the appropriate landmark or place it inside <main>.

Rules for your answer:
- Show the exact edit as before and after, and name the file or setting it goes in. If you need to see my file first, ask me to paste it.
- Keep the visual design and all existing behaviour the same.
- Don't invent product names, prices or text; use placeholders I can fill in.
- End with how I can check the fix myself.
- Include how to confirm it with the keyboard and a screen reader.

Check your fix

  • Re-scan the affected pages.

Detailed guidance: https://dequeuniversity.com/rules/axe/4.13/region?application=playwright

P3ModerateVerified failure

Heading levels should only increase by one

effort: moderate · owner: theme developer

Heading levels skip (for example from H2 to H4), which makes the page structure confusing for screen reader users.

Screen reader users navigate by headings. This is a best practice supporting WCAG 1.3.1.

Evidence

Found by
axe-core automated rule
Status · confidence
Verified failure · high
Detected
Sep 24, 2026 (UTC)
Where
7 instances on 7 pages

Expected: Heading levels should only increase by one

Observed: Heading order invalid

Heading levels should only increase by one: the outlined element on /collections/all
Heading levels should only increase by one: the outlined element on /collections/all
Heading levels should only increase by one: the outlined element on /products/trail-daypack
Heading levels should only increase by one: the outlined element on /products/trail-daypack
How to reproduce
  1. Open https://harborandpine.example/collections/all in Chrome or Edge.
  2. Open DevTools (F12) › Elements, press Ctrl+F (Cmd+F on Mac) and search for: article:nth-child(1) > a[href$="trail-daypack"] > h3
  3. Or run the free axe DevTools browser extension on the page: it reports this as "heading-order".
Failing elements (3 shown)
article:nth-child(1) > a[href$="trail-daypack"] > h3
<h3>Trail Daypack 22L</h3>
h3
<h3>Reviews</h3>
h3:nth-child(3)
<h3>Started on the trail</h3>
Pages affected (7)
  • https://harborandpine.example/collections/all
  • https://harborandpine.example/products/trail-daypack
  • https://harborandpine.example/pages/about
  • https://harborandpine.example/products/pine-wool-beanie
  • https://harborandpine.example/products/enamel-camp-mug
  • https://harborandpine.example/products/harbor-lantern
  • https://harborandpine.example/products/insulated-bottle

How to fix it

General guidance
  1. Adjust the heading levels in the affected sections so they go in order without skipping levels.
  2. Change only the tag, not the visual style (use CSS classes for size).

Code

Implementation examples for your developer. We don't have your theme's source code, so file locations are hints, not exact paths.

Before · what we found · Your theme code (search it for the markup shown)
<h3>Trail Daypack 22L</h3>
After · example to adapt
<h2 class="h3">Trail Daypack 22L</h2>

Use the level that follows the previous heading on the page (often one level up), and keep the look with a class. Check the page outline before changing it.

Before · what we found · Your theme code (search it for the markup shown)
<h3>Reviews</h3>
After · example to adapt
<h2 class="h3">Reviews</h2>

Use the level that follows the previous heading on the page (often one level up), and keep the look with a class. Check the page outline before changing it.

Before · what we found · Your theme code (search it for the markup shown)
<h3>Started on the trail</h3>
After · example to adapt
<h2 class="h3">Started on the trail</h2>

Use the level that follows the previous heading on the page (often one level up), and keep the look with a class. Check the page outline before changing it.

Fix with AIShow the prompt

Paste this into ChatGPT, Claude, Cursor or Copilot together with your theme file. Review the change before you publish it.

I run a Shopify store (Online Store 2.0 theme, Liquid templates) at harborandpine.example. An accessibility test found this problem and I want to fix it in my theme.

Problem: Heading levels should only increase by one.
Where: 7 instances on 7 pages, for example /collections/all, /products/trail-daypack, /pages/about, /products/pine-wool-beanie.

One failing element, as the browser rendered it:
```html
<h3>Trail Daypack 22L</h3>
```

Why it matters: Screen reader users navigate by headings. This is a best practice supporting WCAG 1.3.1.

What needs to change:
- Adjust the heading levels in the affected sections so they go in order without skipping levels.
- Change only the tag, not the visual style (use CSS classes for size).

A suggested change (Your theme code (search it for the markup shown)):
```html
<h2 class="h3">Trail Daypack 22L</h2>
```

Rules for your answer:
- Show the exact edit as before and after, and name the file or setting it goes in. If you need to see my file first, ask me to paste it.
- Keep the visual design and all existing behaviour the same.
- Don't invent product names, prices or text; use placeholders I can fill in.
- End with how I can check the fix myself.
- Include how to confirm it with the keyboard and a screen reader.

Check your fix

  • Re-scan and check the heading outline with a browser extension such as HeadingsMap.

Detailed guidance: https://dequeuniversity.com/rules/axe/4.13/heading-order?application=playwright

Needs manual review

Automated tests flagged these but couldn't decide, for example text over an image or content that may not fit a phone screen. They are not counted as failures. Ask your developer to check each one.

  • Needs reviewWCAG 4.1.3

    Keyboard journey: Add to cart with the keyboard

    Enter on Add to cart worked (the cart count in the header changed, an “added to cart” message appeared), but we found no status message or focused dialog, so screen reader users may not hear that the item was added.

    1 instance on 1 page · How to check this

  • Needs reviewWCAG 1.4.10

    Product page may not fit a narrow screen without scrolling sideways

    At 320 CSS pixels wide (the same as 400% zoom), the page is 200px wider than the screen. Data tables and maps may scroll; text and controls should not.

    2 instances on 1 page · How to check this

    Elements to check (2 shown)
    div.icons
    <div class="icons"> <button type="button"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"></circle><path d="M20 20l-3.5-3.5"></path></svg></bu
    div
    <div> <p style="color:#6a6a60;font-size:14px">Harbor &amp; Pine</p> <h1>Trail Daypack 22L</h1> <p class="price" style="font-size:22px">$128<span class="compare">$150</span></p> <p class="opt-label">Si
  • Needs reviewWCAG 1.4.10

    Home page may not fit a narrow screen without scrolling sideways

    At 320 CSS pixels wide (the same as 400% zoom), the page is 55px wider than the screen. Data tables and maps may scroll; text and controls should not.

    3 instances on 1 page · How to check this

    Elements to check (3 shown)
    div.icons
    <div class="icons"> <button type="button"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"></circle><path d="M20 20l-3.5-3.5"></path></svg></bu
    article.card
    <article class="card"><span class="badge">Sale</span><a href="/products/trail-daypack"><img src="/img/beanie.svg"><h3>Pine Wool Beanie</h3></a><p class="price">$32<span class="compare">$40</span></p><
    button.btn.light
    <button class="btn light" type="submit">Subscribe</button>
  • Needs reviewWCAG 1.4.3

    Elements must meet minimum color contrast ratio thresholds

    Element's background color could not be determined because element contains an image node

    1 instance on 1 page · How to check this

    Elements to check (1 shown)
    h1
    <h1>Gear for the long way home</h1>

Re-test your fixes

When your developer has made changes, re-test. We run the same automated checks on the same pages, the keyboard test and the keyboard journey again, and show which issues we can no longer reproduce. 5 re-tests are included.

Re-tests run on paid reports.

Manual checks

Automated tools can't judge these. Do them before you consider the work done.

  • Complete checkout using only the keyboard: our automated journey stops at the checkout button and never enters checkout.
  • Repeat with a screen reader (VoiceOver on Mac: Cmd+F5; NVDA on Windows) and confirm prices, variants and errors are announced.
  • Zoom the browser to 200% and confirm nothing overlaps or disappears.
  • Check that product and brand videos have accurate captions.
  • Submit forms with mistakes (newsletter, contact, checkout) and confirm errors are described in text.
  • Check that carousels and pop-ups can be paused or closed, including with the Escape key.

Draft accessibility statement

Edit the bracketed parts and publish it on a page linked from your footer.

Accessibility statement for harborandpine.example

We want everyone to be able to shop on harborandpine.example, including people who use screen readers, keyboard navigation, magnification or other assistive technology. We aim to meet the Web Content Accessibility Guidelines (WCAG) 2.2 at Level AA.

What we do
- We test our store with automated accessibility tools and fix the issues they find.
- We test key shopping steps (browsing, product pages, cart and checkout) with a keyboard and a screen reader.
- We review third-party apps and widgets for accessibility before adding them.

Known limitations (as of September 24, 2026)
- Keyboard access and focus (WCAG 2.1.1). We plan to fix this by 2026-10-08.
- Links and buttons without names (WCAG 2.4.4, 4.1.2). We plan to fix this by 2026-10-08.
- Images without text alternatives (WCAG 1.1.1). We plan to fix this by 2026-10-08.
- Form fields without labels (WCAG 4.1.2). We plan to fix this by 2026-10-08.
- Low color contrast (WCAG 1.4.3). We plan to fix this by 2026-10-08.

Feedback and help
If you have trouble using any part of our store, contact us at [your email] or [your phone number]. Tell us the page and the problem, and we will help you complete your purchase and respond within 5 business days.

This statement was prepared on September 24, 2026 and will be reviewed at least once a year.

Evidence log

Each page was loaded in Chromium and tested with axe-core 4.13.0. The SHA-256 hash identifies the raw results for each page.

Pages tested with timestamps and result hashes
PageTested (UTC)HTTPIssuesSHA-256
Home pagehttps://harborandpine.example/2026-09-24 14:05:0020015da1e5470a57859a864332912dd1e4f62b4c4f64487ba144865b74879519599a3
Collection pagehttps://harborandpine.example/collections/all2026-09-24 14:05:092002028d8dfcf5ca953af353264a930a351bea3cf23f98a303874b32e5da355a4c8b0
Product pagehttps://harborandpine.example/products/trail-daypack2026-09-24 14:05:182002068a173ddfd16eeeef5e36d6c0fa9d426769f0d96e358c5e35b67608dd84139b4
Carthttps://harborandpine.example/cart2026-09-24 14:05:27200125b7945c2cdf779dcef2bd8975d96eb8f42d8dedbf10e767ec80199dd22ce257c
Content pagehttps://harborandpine.example/pages/about2026-09-24 14:05:362009daf61ae856358a574e63f9357db0bfd9ae6079065acf3aebd5b3c5a7f460e53f
Additional pagehttps://harborandpine.example/products/pine-wool-beanie2026-09-24 14:08:0020020f708ccd7de34dfb65d59d3716580b6ec15a6420020c8387fa4da4e2ff5bd52d3
Additional pagehttps://harborandpine.example/products/enamel-camp-mug2026-09-24 14:08:0720019c619bcd29e89d06099d174b9fc19305a42f2fa9bdddb600a750c867fc7477022
Additional pagehttps://harborandpine.example/products/harbor-lantern2026-09-24 14:08:14200205720b7433b75050ba413ac74c2bd726b0620aaa68f7918083052383257d5c418
Additional pagehttps://harborandpine.example/products/insulated-bottle2026-09-24 14:08:21200196f1972c22e477c9a63e2dfde1123ed759718f6a75e1606b23f208848691510fd

Scope and method

What we tested

  • 9 pages (home page, collection page, product page, cart, content page, additional page) loaded in Chromium at 1366×900.
  • axe-core 4.13.0 rules for WCAG 2.0, 2.1 and 2.2 Level A and AA, plus best-practice rules (shown as P3).
  • A keyboard test: 40 Tab presses on the home page, looking for traps and missing focus indicators.
  • A keyboard-only shopping journey from the home page to the checkout button (see above).
  • A reflow check at 320 CSS pixels wide on home page and product page (WCAG 1.4.10).

What we didn't test

  • Checkout and payment pages, form submissions, account and logged-in pages.
  • What a screen reader actually announces, beyond the automated rules.
  • Video captions and audio descriptions, PDF documents, and content inside third-party frames.
  • Plain language, cognitive accessibility and anything else that needs human judgement (see Manual checks).

How to read the results

Verified failure
An automated test or the keyboard journey failed, with the evidence shown.
Needs review
A test flagged something it couldn't decide; a person should check it.
Passed
The automated rule found no failures on the pages tested.
Not tested
Outside what automated testing can cover here; see Manual checks.

Get this report for your website.

Start with the free scan to see your issues and how they match your letter. The Accessibility Fix Report is $249, one time, and is ready in about 10 minutes.

Scan your website free

This report describes the results of automated tests and gives remediation guidance. It is not legal advice and does not certify compliance with the ADA, the European Accessibility Act or any other law.