About this template
Every product on your store lives at two URLs
/products/tote-bag and /collections/bags/products/tote-bag. Shopify canonicalises
to the first by default — but themes and apps break it, and when that happens every
product's ranking signals split in half.
Your generic SEO tool reported title lengths. It never checked this.
So the canonical test runs first
It fetches a sample of products both ways and compares the rendered
<link rel=canonical>. A broken one outweighs every title fix on the report.
That's the check no generic tool performs, and it's the reason this exists.
Four more Shopify-specific traps
- Collection filters generate crawlable URLs —
?filter.v.price,/collections/all/red— multiplying into near-duplicates of the parent collection. /collections/allduplicates your homepage for most stores, and themes link it automatically.- The title template appends your store name, so the length you typed isn't the length Google renders. Drafts show the rendered length.
- Out-of-stock and archived products often stay indexable and rank for things you can no longer sell.
Report order is leverage
- Broken or missing canonicals
- Indexable filter / tag URLs
- Missing or duplicate product titles
- Missing metas on products that get traffic
- Thin collections — no description, under three products
- Missing image alt text
Every fix names the exact string and where in Shopify admin to paste it — product SEO section, collection description, or theme file.
What you supply
Your own Claude Code login. Nothing else — sitemap.xml and your public pages are
the whole input, and Shopify always serves the sitemap.
Optionally paste a Search Console export into ~/shopseo/pages/ and "products that
get traffic" stops being an assumption.
Where this stops
It reads your public storefront and drafts fixes. No admin login, no Admin API token, cannot publish.
It won't tell you which app caused a problem — it sees rendered HTML, not your app stack. It won't predict rankings without Search Console data, won't estimate revenue impact, and won't decide what to do about out-of-stock products: it flags them, and whether to redirect, keep or unpublish is a business call.
Verified on build: the skill, the working tree, the NEVER_AUTOEDIT guard, all five
platform traps and the canonical-test-first method are present on a fresh fork.
Running it on your own store is yours to do.