Shopify technical SEO · 30-day sprint

Shopify's defaults are built for shopping, not for indexing.

Twenty-two technical checks decide whether Google can crawl, index and read your store correctly. Your store passes an unknown number of them. The free audit runs all twenty-two and tells you which.

No keyword research, no backlinks, no promises about positions. Technical only — the part that is measurable from outside.

This site · checks passed
22/22
● Measured 28 Sep 2026

The same 22 checks the free audit runs, against this domain: 22 pass, 0 failed, 0 warnings. The two sprint pages stand in for product pages and the hub for the collection. Raw JSON

Checks run
22
Always 22 — unmeasurable is reported, never dropped
Turnaround
48 h
From request to report
Sprint length
30 days
Four weeks — the last one is re-crawl and proof
Guarantee
Every failed check green
Or full refund. Never a promise about positions.
What a crawler actually receives
▲ Illustrative pattern — not a measured store

Your product page, as Google reads it

Same page, same theme. On the left, the fields a crawler finds on a default Shopify template. On the right, the same fields after the sprint. Nothing here is content work — it is what the page declares about itself.

■ Default template /collections/shoes/products/runner
canonical
missingSame page also served at /products/runner. Google picks one.
title
Runner – My StoreTheme template, identical shape on every product.
meta desc
missingGoogle writes its own from the page body.
h1
2 foundProduct name plus the section heading above it.
schema
ProductVariants need ProductGroup; price sits on the variant.
breadcrumb
missingNo BreadcrumbList, so no path in the result.
● After the sprint /collections/shoes/products/runner
canonical
/products/runnerSelf-referencing, identical from both routes.
title
Runner · road shoe · My StorePer-template pattern with the distinguishing field.
meta desc
138 charsWritten per template, inside the range Google shows.
h1
1 foundOne per page, the product name.
schema
ProductGroupname, image, price, priceCurrency, availability.
breadcrumb
BreadcrumbListHome › Shoes › Runner, matching the URL.
■ Default template /collections/shoes?sort_by=price&filter=size-42
canonical
selfEvery filter combination canonicalises to itself.
title
Shoes – My StoreSame title on every filtered variant of this page.
meta desc
missingNothing distinguishes one variant from another.
h1
1 foundCorrect.
schema
missingNo ItemList or CollectionPage.
crawlable
yesFilters and sorting are reachable URLs spending budget.
● After the sprint /collections/shoes?sort_by=price&filter=size-42
canonical
/collections/shoesFiltered variants point at the clean collection.
title
Road shoes · My StoreOne title for the page that should rank.
meta desc
124 charsWritten for the collection, not the filter.
h1
1 foundUnchanged.
schema
ItemListProducts in the order the page shows them.
crawlable
clean onlyParameter variants no longer compete for budget.
■ Default template /
robots.txt
defaultShopify default. Its last group blocks a crawler named Nutch, which trips careless tools.
sitemap
declaredPresent in robots.txt.
X-Robots-Tag
absentNothing in the response header.
schema
missingNo Organization or WebSite block.
og:image
missingLinks to the store render without a preview.
llms.txt
absentInformational only; AI crawlers are starting to read it.
● After the sprint /
robots.txt
reviewedThe * group verified line by line, nothing important blocked.
sitemap
declaredUnchanged.
X-Robots-Tag
absentChecked on all three templates, not just this one.
schema
OrganizationName, logo, URL and profiles.
og:image
setTitle and image on every shared link.
llms.txt
publishedWritten, and marked informational in the report.
Platform properties, not statistics

Five things Shopify does by default that Google reads badly

Every one of these is verifiable on your own store in a browser, right now. None of them is a claim about your rankings.

  1. 01

    Every product lives at two URLs

    /products/x and /collections/y/products/x both serve the same page. Which one Google keeps depends entirely on the canonical tag your theme emits.

  2. 02

    Filters and sorting mint crawlable variants

    Each filter combination on a collection is a URL a crawler can reach and spend its budget on. On a catalogue of any size that is thousands of near-identical pages competing with the one you want ranked.

  3. 03

    One title pattern, hundreds of pages

    Themes build the title and meta description from a template. It is consistent, and it is why the same phrasing repeats across your whole catalogue with nothing distinguishing one page from the next.

  4. 04

    Variant products need ProductGroup

    Google asks for ProductGroup where a product has variants, with price and availability on the variant. Many themes still emit a bare Product and lose the rich result.

  5. 05

    A noindex can arrive by HTTP header

    X-Robots-Tag lives in the response, not in the theme. You can read every template you own and never see the instruction that is keeping a page out of the index.

The audit · four groups
6 + 4 + 5 + 7 = 22

Twenty-two checks, and the whole list is public

You can repeat every one of these from your own browser. A check that cannot be run on your store is reported as unmeasurable — it is never quietly dropped to make the score look better, which is why the total is always twenty-two.

● Pass ■ Fail ▲ Warning – Not applicable — Unmeasurable Not applicable and unmeasurable do not count against the health percentage. A single-market store without hreflang has no deficiency — it has a check that does not apply to it.
Crawling and indexing
If Google cannot get in, everything after this is decoration.
6 checks · — passed
—robots_txtIt exists and is reachable
—robots_bloqueosIt does not block /products, /collections or /pages
—sitemap_declaradoA Sitemap: line in robots.txt
—sitemap_xmlThe index is served, with its sections
—noindexMeta robots and X-Robots-Tag across all three templates
—error_404An invented URL returns a real 404, not a soft one
Duplicate content
Shopify's speciality: the same page reachable from several routes.
4 checks · — passed
—canonical_presenteA canonical on all three templates
—canonical_autoreferenteIt points at the page itself
—ruta_duplicada/collections/x/products/y canonicalises to /products/y
—hreflangCoherent, with x-default present
Page metadata
What the result actually shows, and what tells two pages apart.
5 checks · — passed
—title_presentePresent, between 15 and 65 characters
—title_unicoDifferent on each template
—meta_descriptionPresent, between 70 and 160 characters
—h1_unicoExactly one per template
—alt_imagenesThe alt attribute is declared — an empty alt on a decorative image is correct
Rich results and AI search
Structured data is how a listing becomes a result with price, stock and a path.
7 checks · — passed
—schema_productProduct or ProductGroup with name, image, price, priceCurrency, availability
—schema_breadcrumbBreadcrumbList on the product page
—schema_organizationOrganization or WebSite on the home
—schema_coleccionItemList or CollectionPage on the collection
—open_graphog:title and og:image
—json_ld_validoNo broken JSON-LD block
—llms_txtPresent — reported as informational
What the audit does not do

No keywords, no backlinks, no search intent, no content quality. All of that needs your Search Console and paid APIs, and cannot be measured from outside without inventing. It is listed as missing data in every report rather than guessed at.

The sprint · 30 days

Four weeks, and the fourth one is the proof

A schema change nobody has re-crawled is deployed, not finished. The last week exists because the work is not done until Google has come back and I can show you the before and after.

  1. 01
    Crawling and indexing
    Week 1

    robots.txt, sitemap, noindex in every template, real 404s. If Google cannot get in, the rest is decoration.

  2. 02
    Duplicates
    Week 2

    Canonicals, the two product routes, filter and sort parameters, hreflang if you sell in more than one market.

  3. 03
    Structured data and metadata
    Week 3

    ProductGroup with price and availability, breadcrumbs, organisation, collection lists, titles and descriptions per template.

  4. 04
    Re-crawl and proof
    Week 4

    The audit runs again. Every check that failed is green, or the sprint is not finished. You get both runs side by side.

SEO audit
Free
48 hours
  • All 22 checks, with the state of each
  • Findings anchored to the checks that failed
  • The four-week plan, yours to hand to anyone
  • One fix you can apply today, without me
  • A three-minute walkthrough on video
Request the SEO audit
Start here
Technical SEO sprint
$2,400
30 days · four weeks
  • Every failed check fixed, in your theme
  • Canonicals, routes and parameters sorted out
  • ProductGroup, breadcrumbs and collection schema
  • Re-crawl in week four, with both runs published
Every failed check green, or full refund
▲ Never promised Positions, traffic or revenue. The fixes ship inside the month; when Google re-crawls and re-ranks is not mine to promise.
Start with the free audit
FAQ

Before you ask

Will this get me to page one?

No, and anyone who promises it is selling something else. This makes your store correctly crawlable, indexable and readable. What you rank for after that depends on your content and your market — neither of which I am touching.

Do I need the speed sprint too?

They are sold separately and neither depends on the other. If you are choosing, start with speed when your traffic is already there, and with SEO when it is not.

What counts as a failed check?

The audit lists each of the 22 with its state before we start. The guarantee covers exactly the ones marked as failing in that first run — agreed in writing, no moving target.

Do you need my Search Console?

Not for the audit — everything in it is measured from outside. During the sprint it helps for the re-crawl in week four, but it is not required.

Find out how many of the 22 you are passing

All 22 checks, findings anchored to the ones that fail, and a fix you can apply yourself. Within 48 hours, no call required.

Get your free SEO audit
Every failed check green, or full refund

Looking for speed instead? The speed sprint is here.