# Shopify SEO Audit

> Checks the thing generic tools miss — every product lives at two URLs, and a broken canonical splits its signals. Paste-in fixes. Never edits your store.

- Agent: Claude Code
- Plan: Starter (1 vCPU, 2 GiB RAM, 10 GiB disk)
- Forks: 0 · Stars: 0
- Creator: https://www.jurniti.com/creator-ca0ff2
- Tags: audit, claude-code, e-commerce, ecommerce, seo, shopify
- Requires config (you provide): ANTHROPIC_API_KEY
- Skills: shopify-seo-audit

**To fork:** open https://www.jurniti.com/templates/shopify-seo-audit and use the Fork action — it starts a Stripe Checkout for a new VM seeded with this template's persist disk (same flat plan price, no fork fee).

## README

# 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/all` duplicates 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

1. Broken or missing canonicals
2. Indexable filter / tag URLs
3. Missing or duplicate product titles
4. Missing metas on products that get traffic
5. Thin collections — no description, under three products
6. 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.
