shopatch
← Blog Article cover

Audit a Shopify Theme Before It Goes Live: What to Check and Where to Fix It

Short answer: A theme audit is only useful if every finding comes with three things: the file, the exact spot, and the place in your Shopify admin where you change it. “Contrast too low on button text” is a fact. “Theme settings → Colour scheme 1 → field Links” is an instruction. Shopatch Theme Audit checks the theme where it is made, including unpublished themes and every colour scheme, and it says plainly which findings you can fix yourself and which ones need a developer.

Tools that crawl your live website share two blind spots, and both of them matter most at exactly the wrong moment. They can only see the theme that is published, so they are useless during the week before a relaunch. And they can only see the colour scheme that happens to be rendered, so a scheme you use on two landing pages goes unchecked until a customer runs into it.

Why this is on the table right now

The European Accessibility Act has applied since June 28, 2025, and national implementations such as Germany’s BFSG cover e-commerce, with an exemption for microenterprises under ten employees and at most two million euro in annual turnover.

Whether your store falls under it, and what exactly it then has to do, is a legal question and not one this page answers. The technical half can be answered: which places in the theme are likely to cause problems, where they are, and where you change them.

What actually gets checked

The checks fall into six groups. All of them run against the theme’s own files and the store’s structured data, not against a rendered page.

Liquid and HTML

CheckWhat it finds
Missing alt attributeImages that a screen reader announces as nothing, or as a file name
Invalid sizes on responsive imagesA sizes value the browser cannot use, so it loads the wrong file
aria-hidden on a focusable elementAn element hidden from screen readers that keyboard users still land on
Positive tabindexTab order that jumps around the page instead of following it
Form field without a labelThe single most common reason a checkout or newsletter field is unusable by voice control
Insecure URLAn asset or link on http:// inside an https:// page
Google Fonts loaded from the CDNA third-party request that leaves your visitor’s IP address with another company, which in the EU is a consent question, not a performance one

CSS

CheckWhat it finds
Focus outline removedoutline: none without a replacement, which makes keyboard navigation invisible
Double dimmingText that is faded twice, once by colour and once by opacity, and ends up below any readable contrast
Form fields that trigger iOS zoomInputs under 16px, where Safari zooms the whole page on focus and the layout jumps

Colour schemes

Contrast is measured across every colour scheme in the theme, not just the active one. Themes in the Online Store 2.0 generation ship with several schemes, and it is normal for one of them to have been set up quickly and never looked at again.

Theme schema

CheckWhat it finds
select default not among its optionsA setting whose default value does not exist, so the editor silently falls back
Invalid range stepA range setting Shopify will reject when the theme is uploaded
Locale key budgetThemes have a hard limit of 3,400 translation keys. Hitting it during a launch is a bad time to find out

Catalogue

Product titles and descriptions are measured against the width a search result actually gives you, so you see which titles will be cut off before Google cuts them.

Store policies

The app checks whether legal notice, privacy policy, terms and refund policy exist. Not whether they are sufficient. Those texts live in Shopify’s shopPolicies rather than as ordinary pages, which is why a store can have nineteen pages and none of the four.

Every finding says how certain it is

A static check on template code cannot always know what ends up on the page. An image whose alt text comes from a metafield is a different case from one with no alt attribute at all. So each finding carries its confidence and, more usefully, what would refute it. That single line is the difference between a list you work through and a list you learn to ignore.

The part that only shows up on the second run

One run is a snapshot. From the second run on you get a history: what is new, what was fixed and when, and what had been fixed once and came back. Recurrences are the interesting category, because they usually mean a process problem rather than a code problem, and without a record nobody notices a single one.

This is also the honest version of the compliance argument. Against a regulator or a warning letter, a single document proves one day. A continuous record proves ongoing effort, and it cannot be produced after the fact.

The watcher

The paid tier runs the check on a schedule and mails you only when something changed. A notice that arrives every week whether or not anything happened gets filtered within a month.

The address is yours to choose, and it does not have to be the store owner’s. Agencies and freelance developers usually want the notice themselves, because they are the ones who will act on it.

What it does not do

It changes nothing in your store. The app does not request write_themes at all, which means it cannot edit your theme even by accident.

It issues no certificate of compliance. Whether a legal text is sufficient is a legal question, not a programming one, and a tool that claims otherwise is repeating a mistake that has already cost another vendor a million dollars.

And it checks the code, not the rendered page. Load time and text baked into images are not covered. That limitation is printed in every report rather than hidden in a FAQ.

What it costs

FreeWatcher, 20 USD per 30 days
Complete findings with file, exact spot and admin locationsame
Current report as a downloadable filesame
The last 2 runsunlimited
not includedHistory, regressions, recurrences
not includedScheduled checks, notice only when something changed
not includedDraft of the accessibility statement

There is no trial, and that is deliberate. The free tier is not a preview with the findings blurred out: you see exactly what your store has. Withholding findings from a merchant about their own store would tell them their shop is in better shape than it is. What you pay for is what accrues over time.

Hidden runs are not deleted either. Subscribe later and your history comes back instead of starting at zero.

Getting started

Install Shopatch Theme Audit, pick a theme, published or not, and run it. The first report takes under a minute, and the free tier is enough to see whether the list is worth your time.

More detail on the product page at Theme Audit. If you would rather have the findings fixed than fix them, that is a service we offer.