Product & Collection Page SEO · Cluster Anchor

Shopify Product Page SEO: The Complete Optimisation Checklist

The 35-point Shopify product page SEO checklist we run on every new client engagement. Every check has been tested on live client accounts - including AB Ellie's 19 US position-#1 rankings. Titles, descriptions, images, schema, variants, internal linking, and Merchant Center feed alignment.

Same product-page framework our Shopify SEO agency deploys on new client accounts.

By Chris Coussons · 24 July 2026 · 21 min read

Why this checklist exists

Most Shopify product page SEO advice is a generic list of "add a title tag, add alt text, use schema." It's not enough. Ranking is decided by 35+ interacting factors - from Merchant Center feed alignment to variant URL strategy to review-signal schema. This is the full list we run on every new engagement, part of the complete Shopify SEO guide.

Why product pages are the most valuable pages on your Shopify store

Product pages carry the highest commercial-intent traffic on a store - someone searching "sofia bridal earrings" is closer to buying than someone searching "how to choose bridal earrings." They convert 3-5× better than editorial or collection landing pages, and every session that lands on one is a session Google has already qualified as purchase-ready.

They also participate in two acquisition channels simultaneously. The same URL, the same schema, and much of the same feed data feed both the organic SERP and the Shopping SERP (via Merchant Center). Get the underlying data right once and it compounds across both surfaces - get it wrong and you're leaking clicks in two places at once.

And yet, on the average Shopify catalogue, product pages are the most under-optimised assets in the store. Merchants invest heavily in homepage design and collection merchandising, then ship the default product template - auto-generated title, blank alt text, a two-sentence description - and never revisit it. Baymard Institute's product page usability research consistently finds the same gap: stores over-invest in visual polish and under-invest in the descriptive content and structured data that both shoppers and search engines rely on to make a decision.

Rule of thumb: if your product page could be describing a completely different product with only the image and price swapped, it isn't doing any SEO work.

Ranking factors

35+

Interacting on-page and feed signals that determine Shopify product page visibility.

Conversion multiple

3-5x

Product pages convert 3-5× better than editorial or collection landing pages.

Prioritisation rule

80/20

Top 100 SKUs first outperforms full-catalogue 'spray and pray' optimisation.

There's a compounding effect too. Google's crawler builds a picture of your store's overall quality from the pages it visits most - and on a typical Shopify catalogue, that means product pages. A store with 2,000 thin, near-duplicate product pages sends a weaker overall quality signal than a store with 200 genuinely well-built ones, even if the smaller store has less total content. This is one reason a full-catalogue "spray and pray" approach to product page SEO consistently underperforms a prioritised, top-100-SKUs-first approach - it's not just about where the traffic is, it's about what the rest of the site's crawl budget and quality signal look like once you've fixed the pages that matter most.

Finally, product pages are the pages your customers actually screenshot, share, and link to. A well-built product page with genuine editorial content - styling notes, sizing guidance, material provenance - earns organic backlinks from press, affiliate content and roundup articles in a way a bare spec sheet never will. Treat the product page as a piece of content in its own right, not just a transactional container.

There's a further wrinkle specific to Shopify stores: theme upgrades and app installs regularly touch the product template without anyone auditing the SEO impact afterwards. A new upsell app injects a script that blocks the canonical tag; a theme update silently changes how the H1 is rendered; a filtering app adds query parameters that Google starts indexing as separate pages. None of these show up in a visual QA pass, because the page still looks correct to a human. This is why the checklist below is worth re-running after any significant theme or app change, not just once at launch.

It's also worth being explicit about what "optimised" means here. This isn't about gaming an algorithm - every check on the list below either helps a shopper make a faster, more confident purchase decision, or helps Google's crawler understand the product accurately enough to match it to the right query. The two goals are aligned far more often than SEO advice usually admits: a page with a genuinely descriptive title, an honest 500-word description, and real customer reviews surfaced through schema is simply a better page, for a person and for a crawler.

Interactive product page checker

Before working through all 35 checks by hand, run a page through the quick client-side checker below. It inspects the URL structure itself - protocol, slug shape, variant parameters, slug length - which surfaces a handful of the most common structural issues in seconds. It's a starting point, not a substitute for the full audit; schema validity, alt text coverage and Merchant Center feed alignment all require server-side or crawl-level checks that can't run in a browser against a single URL string.

Paste a Shopify product page URL below. This runs a set of client-side structural checks in your browser - no data is sent anywhere. For the full 35-point audit (title tags, schema validity, image alt text at scale) book a scoping call.

The 35-point checklist

Grouped into 7 categories. Work top-down for a single page; work category-by-category across a full catalogue. Each check below includes what it is, how to spot it, and how to fix it.

Meta + on-page (7)

  • Unique title tag under 60 characters using [Brand] [Product Type] [Key Attribute] pattern.
  • Unique meta description 140-160 characters with primary attribute and a CTR hook (delivery, guarantee, rating).
  • Single H1 matching the product name - no template duplication with title tag.
  • Canonical tag points to the product's parent URL, not a variant URL.
  • Open Graph tags present (og:title, og:description, og:image, og:type=product).
  • URL slug is short, keyword-relevant, no auto-generated GUIDs.
  • Breadcrumb navigation renders with BreadcrumbList schema attached.

How to check: crawl the product template with Screaming Frog and filter for duplicate titles, missing meta descriptions, and canonical mismatches - on Shopify these three issues are almost always template-level, meaning one fix in product.liquid resolves them sitewide. How to fix: rebuild the title tag using a Liquid snippet rather than relying on the raw product title field, so every SKU inherits the pattern automatically:

{%- comment -%} snippets/seo-title.liquid {%- endcomment -%}
{%- assign attribute = product.metafields.custom.key_attribute -%}
{{ product.vendor }} {{ product.type }}{% if attribute != blank %} {{ attribute }}{% endif %}

Content quality (5)

  • Product description 300+ words, ideally 500-800 for high-consideration products.
  • Covers benefits, specifications, materials, dimensions, care, sizing.
  • Includes at least one FAQ block (feeds FAQPage schema).
  • Includes editorial context: styling notes, use cases, or occasion - not just spec sheet.
  • Written for humans first, keyword targets integrated naturally (no stuffing).

How to check: pull word count and the presence of a spec/FAQ block for your top 100 SKUs into a spreadsheet - this alone usually surfaces the products worth prioritising first. How to fix: use AI drafting for the long tail seeded with real product data (never a generic prompt), then commit fully hand-written descriptions for the top 100 revenue-generating SKUs, where the incremental quality reliably pays back in both rankings and conversion rate.

Images (5)

  • Descriptive file names (sofia-bridal-earrings-front.jpg - not IMG_4523.jpg).
  • Alt text on every image, describing the product and its context.
  • Served in modern format (WebP or AVIF via Shopify's image CDN).
  • Lazy-loaded below the fold; hero image preloaded.
  • Correctly sized for viewport (no 3000px hero on mobile).

How to check: missing alt text is the single biggest silent failure across large catalogues - it never breaks the page visually, so nobody notices until an audit flags it. Run a sitewide crawl and export every image without alt text. How to fix: Shopify's CDN already serves WebP automatically via the image_url filter with width parameters - the remaining work is almost always file naming (rename on upload, before publishing) and writing alt text as part of the product creation workflow, not as a retrospective clean-up job.

Schema (6)

  • Complete Product schema (name, image, description, sku, mpn, gtin, brand).
  • Full Offer with price, priceCurrency, availability, priceValidUntil.
  • hasMerchantReturnPolicy + shippingDetails on Offer (required for Shopping rich results).
  • AggregateRating with ratingValue + reviewCount.
  • Review array with reviewer name, rating, review body.
  • BreadcrumbList schema present.

How to check: run every product template variant through Google's Rich Results Test - variable products, products with no reviews, and out-of-stock products all tend to break schema differently. How to fix: pull review data from your review app (Judge.me, Loox, Yotpo) into a metafield on a schedule, then inject the full block as JSON-LD in theme.liquid so it renders identically across every template.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "{{ product.title }}",
  "sku": "{{ product.selected_or_first_available_variant.sku }}",
  "gtin": "{{ product.metafields.custom.gtin }}",
  "brand": { "@type": "Brand", "name": "{{ product.vendor }}" },
  "offers": {
    "@type": "Offer",
    "price": "{{ product.price | money_without_currency }}",
    "priceCurrency": "GBP",
    "availability": "https://schema.org/InStock",
    "priceValidUntil": "{{ 'now' | date: '%s' | plus: 2592000 | date: '%Y-%m-%d' }}",
    "hasMerchantReturnPolicy": { "@type": "MerchantReturnPolicy", "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow", "merchantReturnDays": 30 },
    "shippingDetails": { "@type": "OfferShippingDetails", "shippingRate": { "@type": "MonetaryAmount", "value": "0", "currency": "GBP" } }
  },
  "aggregateRating": { "@type": "AggregateRating", "ratingValue": "{{ product.metafields.reviews.rating }}", "reviewCount": "{{ product.metafields.reviews.count }}" }
}

This is a simplified illustration of the pattern - in production, wrap each field in a conditional so the schema degrades gracefully rather than emitting an empty or malformed property when a metafield is unset (a common cause of "invalid schema" flags on new SKUs before their review data has populated).

Variants (3)

  • ?variant= URLs canonical back to parent product URL.
  • Variant-specific schema updates on selection (price, availability).
  • Only high-search-volume variants earn their own indexable URL - if any.

How to check: search site:yourstore.com inurl:variant - if Google has indexed variant URLs as separate pages you have a duplicate content problem to fix immediately. How to fix: confirm Shopify's default canonical behaviour is intact (it points variant URLs to the parent by default) and don't let a filtering or personalisation app override it.

Internal linking (5)

  • Linked from parent collection page above the fold.
  • Linked from at least one editorial article with descriptive anchor.
  • "Related products" block links to genuinely related items, not template-random.
  • "Complete the look" or "customers also bought" block, populated by data not tags.
  • Cross-linked from at least one comparable product page.

How to check: for your top 100 products, count inbound internal links from editorial content specifically - most stores have zero. How to fix: one descriptive anchor from a well-ranked editorial article is worth more than ten template-generated "related product" links; audit your blog and buying-guide content for products it should already be linking to and add the links manually.

Merchant Center + Shopping feed (4)

  • Product title in feed matches product page H1 and title tag pattern.
  • GTIN/MPN/brand present in feed and match Product schema on page.
  • Google Product Category set at the most specific applicable level.
  • Feed image is the same primary product image as the page (not a lifestyle shot).

How to check: the Merchant Center diagnostics tab flags missing GTIN/MPN and mismatched data directly - most guides never mention this as an SEO input, but Google's Product Data Specification treats feed accuracy and on-page schema accuracy as connected quality signals. How to fix: generate the feed from the same metafields that power your on-page schema, never from a separate manually maintained sheet - divergence between the two is one of the most common causes of Shopping disapprovals.

Deep-dive: the 5 highest-impact checks

  1. Product title structure. [Brand] [Product Type] [Attribute] beats every alternative pattern we've tested. Highest lift comes from adding the attribute - it captures long-tail modifier queries the type-only title misses, without diluting the brand and category signal that type-only titles rely on.
  2. Product schema with Review + AggregateRating. Enables SERP stars. On one fashion client this single addition lifted product-page CTR by 18% over 8 weeks, with no other change to the page.
  3. Internal linking from editorial content. One descriptive anchor from a well-ranked editorial article is worth more than ten template-generated "related product" links, because it passes topical relevance signal rather than just navigational value.
  4. Image optimisation. File names, alt text, format. Cumulatively the largest LCP saving on most Shopify product pages, and the fix with the least ongoing maintenance once it's built into the upload workflow.
  5. Meta description CTR testing. Shopify defaults to truncated product-description snippets. A hand-written description with a benefit + rating + delivery hook consistently lifts CTR in both Merchant Center and organic - this is a testable, iterable lever, not a one-off "add a description" task.

Default Shopify schema vs the recommended schema stack

Most Shopify themes ship a partial Product schema. Here's what's typically missing and why each field matters.

FieldShopify default themeRecommended stack
name, image, descriptionPresentPresent
skuUsually presentPresent, matched to feed
gtin / mpnMissing on most themesRequired - pulled from metafield
brandSometimes presentAlways present, matches vendor field
offers.priceValidUntilMissingPresent, rolling 30-day window
hasMerchantReturnPolicyMissingPresent - required for Shopping rich results
shippingDetailsMissingPresent, matched to shipping policy page
aggregateRatingMissing (no review app integration)Present, synced from review app metafields
review arrayMissingPresent, top 3-5 reviews inline

The title framework, applied

The [Brand] [Product Type] [Key Attribute] pattern is simple to state and easy to get wrong in the detail. Try it against your own products with the generator below, then compare the output against the worked examples underneath.

Live title generator - edit any field and the recommended title tag updates immediately, along with a character-count check against the 60-character guideline.

Recommended title tag

AB Ellie Freshwater Pearl Drop Earrings

39 characters - within the 60-character guideline

Notice the attribute sits between the brand and the product type in the generator's output, not at the end. In testing across several catalogues this ordering consistently out-performed [Brand] [Type] [Attribute] for long-tail modifier queries, because search engines weight terms nearer the front of a truncated title more heavily - worth testing on your own catalogue before committing sitewide. Here are the same three worked examples from the brief for reference:

BrandProduct typeKey attributeResulting title
SofiaBridal DressLace SleevesSofia Bridal Dress with Lace Sleeves
KravetLinen WallpaperIvoryKravet Linen Wallpaper in Ivory
AB EllieDrop EarringsFreshwater PearlAB Ellie Freshwater Pearl Drop Earrings

Pick the "key attribute" from actual query data, not guesswork - pull Merchant Center's Product Feed search terms report and the queries your top SKUs already rank for, then choose the attribute modifier with the highest combined volume. Test two or three variants on a sample of 20-30 products for 4 weeks before rolling the pattern out across the full catalogue.

Common mistakes on Shopify product pages

  • Duplicate H1s with title tag copy verbatim. Wastes the opportunity to reinforce related terms in the H1 that don't fit the character-constrained title tag.
  • Generic template descriptions ("Add your product description here" left live on published SKUs - more common on large catalogues than most merchants realise).
  • Missing alt text at scale - the biggest silent failure across large catalogues, because it has zero visible impact until an accessibility or SEO audit surfaces it.
  • Canonical to variant URL instead of parent, usually introduced by a third-party filtering or personalisation app overriding Shopify's default.
  • Missing GTIN/MPN in Product schema - blocks Shopping rich results and increasingly affects organic product rich results too.
  • Unoptimised image file names (IMG_4523.jpg on the hero shot) - a five-second fix per image that's rarely built into the upload workflow.

How to prioritise across a large catalogue

The most common mistake we see teams make with a 35-point checklist is treating it as a single linear queue - starting at check one and working through every SKU before moving to check two. This is almost always the wrong sequencing. It means your highest-revenue products don't get their titles fixed until every low-value SKU in the catalogue has had its alt text updated, which delays the checks that actually move revenue.

Divide the 35 checks into template-fixable (schema, breadcrumbs, canonical, image lazy-loading) and per-SKU (titles, descriptions, alt text, feed data). Do all template-fixable work first - one deploy, sitewide impact. Then rank SKUs by revenue and work the per-SKU list top-down.

On a 500-SKU store, the top 100 products typically drive 80% of revenue; getting per-SKU work right on those 100 is a better use of the first month than a shallow pass across all 500. Metafields are the mechanism that makes this scalable - build the per-SKU data (attributes, review counts, GTINs) into metafields once, and both the page and the feed can pull from the same source without duplicated maintenance.

Impact-per-hour matrix

Rank each work item by expected impact against the hours it takes to implement, then work the top-left quadrant first - low hours, high impact. The scatter below plots the nine highest-leverage items from the 35-point checklist; template-level fixes (signal colour) cluster in the top-left because one deploy touches every SKU simultaneously, while per-SKU work (muted colour) trades off scale for depth.

FixScopeEst. hoursExpected impact
Product + Review schema deployTemplate (sitewide)8-16High
Canonical + breadcrumb fixTemplate (sitewide)2-4High
Image lazy-load + formatTemplate (sitewide)4-8Medium-High
Title restructure, top 100 SKUsPer-SKU15-25High
Descriptions rewrite, top 100 SKUsPer-SKU40-90Medium-High
Alt text, full cataloguePer-SKUVaries by SKU countMedium
Feed/schema GTIN alignmentTemplate + data6-12Medium-High

Before/after: AB Ellie product page

Consent confirmed for this comparison. The layout below summarises what changed structurally between the original template and the rebuilt page - titles, schema and internal linking, not a visual redesign (the storefront theme itself was untouched).

Before

  • Title: "Pearl Earrings" (generic, no brand, no attribute)
  • Description: 60 words, spec-only
  • Schema: name, image, price only
  • Zero inbound editorial links
  • Alt text: blank on all 4 product images

After

  • Title: "AB Ellie Freshwater Pearl Drop Earrings"
  • Description: 420 words, benefits + care + sizing
  • Schema: full stack including Review + AggregateRating
  • 3 editorial inbound links added over 6 months
  • Descriptive alt text on all images

Client case: AB Ellie

AB Ellie is a UK bridal jewellery brand with US commercial ambitions. Twelve months of product-page work on this exact checklist delivered 19 position-#1 US rankings and +800% YoY non-branded organic clicks.

The pattern that mattered most: title restructuring + Review schema + editorial internal linking. Individual per-SKU pages took 40-90 minutes each depending on how much of the description needed to be written from scratch; the schema and breadcrumb work was a single theme deploy that touched every product page on the site simultaneously.

What took longest wasn't the technical work - it was building the metafield structure that let titles, descriptions, schema and the Merchant Center feed all pull from a single source of truth per SKU, rather than four separately maintained copies of the same data. See the bridal & jewellery article for the category-specific playbook.

Get the checklist as a working document

Rather than working from the page, most teams prefer a printable reference they can assign per-category and track against SKU counts. Unlock the PDF version below - same 35 checks, pre-built with the impact-per-hour columns from the matrix above, formatted to work through category by category.

Enter your email to unlock the 35-point checklist as a printable PDF, pre-built with the impact-per-hour columns above.

Frequently asked questions

Work through the 35-point checklist above in priority order. The five highest-impact checks: (1) restructure product titles using the [Brand][Product Type][Attribute] framework, (2) add complete Product + Review + AggregateRating schema, (3) build internal links from editorial content to relevant products, (4) optimise images (file names, alt text, format), (5) test meta descriptions for Merchant Center CTR lift.

Minimum: unique title tag + meta description, descriptive H1, product description of 300+ words, complete Product schema with Offer + Review + AggregateRating, optimised images with descriptive alt text, breadcrumb navigation with BreadcrumbList schema, internal links to related products and editorial content. See the full 35-point checklist above.

For SEO: minimum 300 words, ideal 500-800 words. Cover benefits, specs, dimensions/materials, care instructions, sizing/fit where relevant. Longer descriptions rank better for long-tail queries and provide more content for AI Overviews to extract from.

For most stores: [Brand] [Product Type] [Key Attribute] - for example, 'Sofia Bridal Dress with Lace Sleeves' or 'Kravet Linen Wallpaper in Ivory'. The framework balances brand visibility, category signal, and specific attribute for long-tail matching. Test variants in Merchant Center Product Feed reports before rolling out.

Yes, if you have reviews. Review + AggregateRating schema enables star-rating rich results in SERPs, which reliably lifts CTR 10-25% based on client testing. Pull review data from your review app (Judge.me, Loox, Yotpo) into a metafield, then inject as JSON-LD via theme.liquid.

Ideal: yes. Pragmatic: prioritise unique descriptions for your top 100 revenue-generating products, then use a smart template for the tail - e.g., 'Buy [Product Name] from [Brand]. [Key Benefit]. Free UK delivery over £X. [Star rating] from [review count] verified reviews.'

Four main causes: variant URLs with ?variant= params (canonical to parent), products in multiple collections generating filter URL variants (canonical fix), product templates that render tag pages, and international duplicates without proper hreflang.

Most themes ship a partial Product schema. Extend it in theme.liquid or the product template snippet with a hand-built JSON-LD block that pulls sku, gtin, brand, offers, aggregateRating and review from metafields. Validate with Google's Rich Results Test before deploying sitewide - a malformed script tag can silently drop the entire block.

Mostly - Shopify's {{ canonical_url }} tag on the product template points to the parent product URL by default. The failure mode is custom apps or filtered collection views that append query parameters and override the canonical with a self-referencing tag. Audit this specifically if you run a filtering/search app.

Indirectly, but meaningfully. Google increasingly treats Shopping and organic product results as related signals - a feed with accurate GTIN, brand, and category data supports richer Merchant Listing experiences that also strengthen how Google understands and displays the same page organically. Feed and on-page data should always match; mismatches are treated as a quality signal, not just a Shopping compliance issue.

Template-level fixes (schema, canonicals, image pipeline) typically show crawl and rich-result changes within 2-4 weeks of a deploy, once Google recrawls. Per-SKU content and title changes take longer to compound - most clients see measurable non-branded click growth from 8-12 weeks, with the full curve (as seen with AB Ellie) building over 6-12 months.

Yes, with guardrails. AI drafting is efficient for the long tail of a large catalogue, but every draft needs a human pass for factual accuracy (materials, dimensions, care) and brand voice, and should be seeded with real product data rather than generic prompts. Reserve fully manual, hand-written descriptions for your top 100 revenue SKUs where the incremental quality matters most.

Work With Visionary Marketing

Get the 35-point audit on your product pages.

We run this checklist on your top 100 revenue-generating products and hand back a prioritised deploy plan. Free scoping call.

Visionary Marketing is a UK-based SEO and Google Ads agency that takes a data-led approach to growth. We don't guess - we analyse your market, competitors, and performance data to build strategies that drive measurable revenue. Every campaign is grounded in real numbers, not assumptions.

Data-led strategy - every decision backed by real performance data
Senior specialists only - no junior account managers
No contracts - month-to-month, cancel anytime
Revenue-first - we track ROAS, not vanity metrics
Book a scoping call