TGT-01 · Pillar 1 of 4

SEO for Shopify.
Crawl, parse, rank.

Whether conventional search engines can crawl, parse, and rank the catalogue. Shopify generates the sitemap and the default robots.txt. It cannot generate the catalogue data an index sorts on, and a theme can undo what the platform gets right.

Intel // SEO readoutAvailable
Target
TGT-01 · SEO · Search engine optimisation
Checks
9 in pillar layer v1.0
Weight sum
100 — relative within this pillar; not rescaled to 100
Heaviest
Title length and uniqueness · sitemap.xml validity (14 each)
Fix classes
0 automatic · 6 assisted · 3 guided — the design
Crawler rule
6 points per fully disallowed search crawler (Googlebot, Bingbot), capped at 30. Search-crawler blocks never touch the composite.
Composite
A separate layer (rubric v1.0). Pillars do not sum to it.
Fixes
Planned automatic · Planned assisted
Verify · rollback
Planned · Planned
Stake · SEOWhat failing costs

Not in the running.

A product with no type joins no comparison set — it is not ranked badly, it is not in the running. Where several URLs serve the same item with no canonical to settle it, an index picks one and drops the rest, so variants a shopper searches for are simply not there.

01 // Shopify relevance

Three owners.
One surface.

The platform, the theme and the merchant each write part of what a search crawler reads.

On a Shopify store the SEO surface has three owners. The platform generates /sitemap.xml — links to products, their primary images, pages, collections and blog posts, split into child sitemaps by type — and a default robots.txt, which a theme customises through the robots.txt.liquid template. The theme renders what a crawler reads at the top of every product page: the title element, the meta description, the canonical link and the heading structure. The merchant owns the record: title, product type, tags, handle, image alt text.

That split is why one SEO number is not enough. A missing canonical is a template problem, a blank product type is a catalogue problem, and a broken sitemap is configuration the app cannot write at all. So every SEO check carries a fix class naming who can change it: 6 of the 9 are native Shopify fields, 3 live in the theme or the platform.

It is also why SEO comes first. Google documents Googlebot’s robots.txt rules as the control for how a site is crawled for Google Search — AI Overviews and AI Mode included. On Google, the conventional crawl is the door to the generative features too.

02 // Systems involved

Crawler, index,
platform, theme.

SYS-01

Search crawlers

Googlebot and Bingbot fetch pages, follow links and read sitemaps. Google documents Googlebot as the crawler for Google Search, Discover and the AI features inside Search.

SYS-02

The index

Keeps one version of each page it judges canonical and files products into the result sets they can compete in. It sees the storefront, never the Shopify admin.

SYS-03

Shopify’s platform files

/sitemap.xml and the default /robots.txt, generated by Shopify. Changes to robots.txt go through the robots.txt.liquid template; the sitemap is not writable.

SYS-04

The theme

Liquid templates render the title element, meta description, canonical link and H1 of every product page. A head problem on one product page is usually a template problem on all of them.

03 // Duplicate URLs

One product,
several addresses.

What a canonical link settles — and what Rank Sniper’s canonical check does and does not test.

A Shopify product can resolve at more than one address: its own /products/ path, a collection-scoped path where a theme links products from inside a collection, and either of those with a ?variant= query when a shopper picks an option. To an index these are separate URLs serving near-identical pages.

Illustrative · one product, three URLs, one canonical
/products/linen-throw
/collections/bedding/products/linen-throw
/products/linen-throw?variant=<variant-id>

<link rel="canonical" href="https://example.com/products/linen-throw">

The canonical link is how a page names the address it wants indexed. Where nothing settles it, the index chooses — and the URL it keeps is not necessarily the one a shopper’s search should land on.

What the check tests

Canonical tags (weight 10) passes a sampled product page that declares a canonical link in absolute form. It does not compare that URL with the page’s own address, and it does not crawl collection paths looking for duplicates: the public scan reads at most three product pages, so it can see whether a canonical is declared, not whether it names the right page. The tag lives in the theme template, which is why the fix class is guided.

04 // Comparison sets

Product type and tags.
How a product joins the running.

The two catalogue fields that decide what a product is compared with.

Shopify defines product type as a category the merchant defines, one per product, and tags as searchable keywords attached to it. Type is the catalogue’s own statement of what a thing is. Tags carry the use-case, occasion and material vocabulary a category name leaves out. Where automated collections select products by conditions on those fields, a blank value also keeps a product off the collection page — the indexable page that lists it beside its peers.

Rank Sniper scores both over every product in the public listing. Product type set (weight 12) passes a product with a non-blank product_type; Tag richness (weight 10) passes a product with three or more tags. Both are catalogue checks, so a failing result carries a count and example product titles — something a merchant can open in the admin, not a statistic.

Shopify also assigns a product category from its Standard Product Taxonomy. No check in this pillar reads it.

05 // Observable signals

What a crawler
can actually see.

Read from the served storefront, not from the Shopify admin — raw HTML, no JavaScript.

Page head
The title element, the meta description and the canonical link in the raw HTML of each sampled product page — before any script runs.
Headings
How many non-empty H1 elements a product page carries. One says what the page is; two or none leave it open.
Images
The alt attribute on every image of the sampled pages, counted per image. Images marked role="presentation" or aria-hidden are decorative and skipped.
sitemap.xml
Whether /sitemap.xml answers, parses as a sitemap or sitemap index, and lists URLs. Shopify serves an index of child sitemaps; the scan validates the index and does not follow it down. Shopify states the sitemap is not readable by crawlers while a store is password-protected.
Catalogue record
product_type, tags and handle for every product in the storefront’s public product listing.
robots.txt
The groups that apply to Googlebot and Bingbot, parsed per group with path matching — the same parser the scan uses for AI agents.

Alt text is read from the page, because the image objects in the public product listing carry no alt field. When the sampled pages have no images to judge, Alt-text coverage is an unscored check — excluded from the pillar, not scored zero. The same rule holds for every input the scan could not read.

06 // What Rank Sniper evaluates

9 checks.
One weight each.

The SEO pillar as the scorer runs it today, read from the live derivation.

SEO · pillar layer v1.0 · weights relative within this pillar; not rescaled to 100
WeightShareif all scoredFix classdesignWhat the scan reads
Title length and uniqueness1414%AssistedThe title element of each sampled product page: its length, and whether titles differ across pages
sitemap.xml validity1414%GuidedGET /sitemap.xml — presence, a parseable sitemap or sitemap index, URLs listed
Meta description1212%AssistedThe meta description of each sampled page, and its length
Product type set1212%Assistedproduct_type on each product in the public listing
Canonical tags1010%GuidedA canonical link in absolute form on each sampled page
H1 structure1010%GuidedExactly one non-empty H1 per sampled page
Tag richness1010%AssistedThree or more tags per product
Alt-text coverage1010%AssistedA non-empty alt on each image of the sampled pages, decorative images excluded
URL structure88%AssistedHandle shape — words, not imported identifiers
Sum of weights100——Relative within this pillar; not rescaled to 100.

Catalogue checks (type, tags, handle) score the share of products that pass. Page checks score the share of sampled product pages — up to three per scan. The sitemap check is one per store.

Share assumes every check was scored. A check whose input could not be read is unscored and leaves the denominator instead of counting against the store. The same rows, and how the pillar layer sits beside the composite, are on the rubric. The fix class column is the design — who will have to act — not a shipped fix.

07 // Search-crawler policy

Googlebot and Bingbot.
The SEO pillar only.

A block on a search crawler costs this pillar points and never touches the composite.

Rank Sniper reads the robots.txt groups for Googlebot and Bingbot with the same group parser it uses for AI agents. Each one fully disallowed costs this pillar 6 points, capped at 30. The composite never sees it: the composite crawler penalty counts AI agents only, and adding search crawlers to it would have moved every score already published. The pillar layer carries the signal; the composite stays as it was.

Google’s documentation explains why the signal belongs here. Googlebot’s robots.txt rules are the control for how a site is crawled for Google Search, including AI Overviews and AI Mode; Google-Extended, a separate token, does not affect inclusion in Search. Google also states that robots.txt manages crawling and is not a way to keep a page out of its results — that is what noindex or password protection is for.

On Shopify, changes to /robots.txt go through the robots.txt.liquid template. Shopify recommends building on the Liquid objects it provides, because the default rules it ships are updated over time.

Illustrative · a group that removes a store from Google’s crawl
User-agent: Googlebot
Disallow: /
08 // Shopify examples

Four ways
it goes wrong.

Illustrative cases, not customers. Each maps to one check and one fix class.

EX-01 · Illustrative

The CSV import with no Type column

A catalogue imported from a supplier spreadsheet lands with product_type blank on every product. Product type set scores zero across the board — weight 12 of this pillar’s 100 — and the failing result carries a count and example titles. The fix is one native field per product.

EX-02 · Illustrative

A test rule that shipped

A developer adds a Googlebot group with Disallow: / to robots.txt.liquid while working on a theme, and it goes live. The SEO pillar loses 6 points; the composite does not move. Per Google, the same group governs crawling for AI Overviews and AI Mode.

EX-03 · Illustrative

Two H1s from the theme

The header renders the shop name as an H1 and the product template renders the title as a second one. H1 structure fails on every sampled page. It is a template change, so the fix class is guided.

EX-04 · Illustrative

Titles written for the grid

“Throw — Sand” reads well beside a photo and says little in a results page. Title length and uniqueness scores the title element each sampled page serves, and marks titles down when two sampled pages share one.

09 // Failure modes

How SEO fails
on a Shopify store.

FM-01

Not crawled

Googlebot or Bingbot disallowed, or no readable sitemap — deep products are found only by following links.

FM-02

Deduplicated away

Several URLs serve one product and nothing names the canonical, so the index keeps whichever it picks.

FM-03

Not in the running

A blank product type, or fewer than three tags: no comparison set to compete in.

FM-04

Snippet left to the engine

No meta description of a usable length, so the results page shows whatever text the engine chooses.

FM-05

Ambiguous subject

Zero or several H1s on the product template.

FM-06

Unreadable images

No alt text: a crawler has no description of what the photograph shows.

10 // Remediation and verification

What happens today.
What is still planned.

Rank Sniper finds and scores. Today the merchant makes the change and re-runs the scan.

  1. NOW-01

    The scan reads and scores

    Reads robots.txt first, then the public product listing, up to three product pages as raw HTML and sitemap.xml, and scores the 9 SEO checks above.

    Available
  2. NOW-02

    The full report lists what fails

    Every failing SEO check, heaviest-weighted first, in the full report sent by emailed sign-in link.

    Beta
  3. NOW-03

    You make the change, then re-scan

    Setting a product type and three or more tags puts each product into a comparison set instead of leaving it uncategorised. A valid sitemap.xml and one self-referencing canonical per page remove the duplicate-URL ambiguity that keeps variants out of an index.

  4. FIX-B

    Assisted · 6 of 9 checks

    Changes a native Shopify field — a title, description, tag, image or variant field. Drafted and staged; written only when you approve and apply it.

    Planned
  5. FIX-C

    Guided · 3 of 9 checks

    Outside the app’s write scope — a theme template, a file at your domain root. You make the change from exact instructions; the next scan checks it. Until the app ships, the failing check and its fix class say where the change lives.

  6. VER-01

    Verification after a fix

    Designed to re-fetch what agents actually receive once a change ships, and confirm it landed.

    Planned
  7. VER-02

    Rollback

    Designed to store the prior value of every write, with per-product restore.

    Planned
11 // Field brief

SEO in
five lines.

FB-01

What it is

Making a Shopify catalogue crawlable, deduplicated and categorised for Google, Bing and the indexes behind them — the oldest of the four disciplines.

FB-02

Why it matters

Every other pillar starts from a fetch. On Google, Googlebot’s robots.txt rules also govern crawling for AI Overviews and AI Mode.

FB-03

What Rank Sniper observes

9 checks: the head and H1 of up to three product pages, alt text on their images, sitemap.xml, product type, tags and handles, and robots.txt groups for Googlebot and Bingbot.

FB-04

What Rank Sniper does today

Available Scores the pillar on every public scan and names what fails. It does not crawl the site, compare canonicals against each other, or submit anything to a search engine.

FB-05

What remains planned

Planned Drafted titles, meta descriptions, types, tags, alt text and handles, applied only on approval. Planned Verification after a fix.

13 // Engage

Scan a store.
Read its SEO pillar.

The public scan scores all four pillars from what the storefront serves. Failing SEO checks come back with their weights.

Shopify SEO: crawl, canonicals and comparison sets — Rank Sniper