The short answer: Shopify SEO in 2026 means working around the platform's fixed constraints. You cannot change the /products/ and /collections/ URL structure, but you control canonicals, schema markup, theme speed, images, and internal linking. This technical SEO checklist covers the eight areas I audit on every Shopify store, from duplicate variants to hreflang.
I have spent three years doing technical SEO for Shopify stores. The platform makes half the decisions for you, which is a blessing when it handles canonicals and sitemaps automatically, and a trap when its defaults quietly create duplicate content or slow down your theme. Here is the technical SEO checklist I run on every store audit, with the Liquid and JSON-LD snippets I use.
How Do I Handle Shopify's Forced URL Structure and Canonicalization?
Shopify forces URL prefixes you cannot change: /products/, /collections/, /pages/, and /blogs/. Accept it and optimize what you can control.
The real issue is that every product is reachable through multiple paths, like /products/blue-tshirt and /collections/summer/products/blue-tshirt. Shopify handles this with a canonical tag pointing to the /products/ version, which most themes include in theme.liquid:
<link rel="canonical" href="{{ canonical_url }}">
- Confirm the canonical tag renders correctly on product, collection, and blog pages.
- Keep product handles short and keyword rich.
/products/organic-acacia-honey-480gbeats/products/organic-raw-unfiltered-acacia-honey-480g-glass-jar. - Never link internally to the
/collections/.../products/...versions. Always use the canonical/products/URL. - If you migrated from another platform, map old URLs to the new Shopify structure with 301 redirects under Content > Menus > URL Redirects.
Why Do Product Variants Create Duplicate Content on Shopify?
Every variant combination generates a ?variant=123456789 URL. Google usually respects the canonical, but variant URLs still get indexed more often than expected, especially when theme code or apps link to them.
- Click through variant pickers and watch the URL bar. If selecting a size or color rewrites the URL with
?variant=, make sure no internal navigation links to those URLs. - Do not submit variant URLs in your sitemap or link them from collection grids.
- Exception: if a color variant genuinely deserves its own rankings (think "red evening dress"), consider splitting it into a separate product.
What Schema Markup Does a Shopify Store Actually Need?
This is where I find the most missed opportunities. Most themes ship with basic Product structured data, but it is often incomplete. I have audited stores displaying customer reviews through apps like Judge.me whose Product JSON-LD had no aggregateRating or review fields at all. Visible reviews without matching schema means no star ratings in search results.
The markup I implement:
-
Product with
offers(price, currency, availability). - Review / aggregateRating wired to your review app's data.
- BreadcrumbList for the Home > Collection > Product trail.
- FAQPage wherever the theme renders FAQs.
- Organization with logo and sameAs links.
Here is the JSON-LD pattern I use for products with reviews:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Organic Acacia Honey 480g",
"image": "https://cdn.shopify.com/.../honey-480g.jpg",
"description": "Raw, unfiltered acacia honey in a 480g glass jar.",
"sku": "HON-AC-480",
"brand": { "@type": "Brand", "name": "Example Store" },
"offers": {
"@type": "Offer",
"url": "https://example.com/products/organic-acacia-honey-480g",
"priceCurrency": "USD",
"price": "24.99",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "46"
}
}
Validate with Google's Rich Results Test, and re-validate after every theme update.
How Do I Improve Core Web Vitals on a Shopify Theme?
If a Shopify store is slow, apps are the cause about eight times out of ten. Every app injects its own JavaScript and CSS, often render blocking, often on pages where it is not used. I have seen stores running 25 apps where 10 were installed, tried once, and forgotten.
- Audit installed apps quarterly. Delete what you do not use, then check
theme.liquidandsnippets, because uninstalling does not always remove the code. - Defer non-critical scripts and lazy load below the fold images. Older custom themes often skip this.
- Give your hero/LCP image
fetchpriority="high"and a propersrcset. - Keep web fonts minimal. Two font families with limited weights is plenty.
- Be realistic: aim for green Core Web Vitals on mobile product and collection pages. Chasing a perfect 100 while running reviews, upsell, and chat apps is not a good use of time.
How Should I Optimize Images for SEO on Shopify?
Shopify's CDN serves WebP and AVIF automatically when you request images through Liquid filters, so this part of the checklist is mostly about using the platform correctly.
{{ product.featured_image | image_url: width: 800 | image_tag: loading: 'lazy', alt: product.title }}
- Use
image_urlwith explicit widths andsrcsetinstead of full resolution files. - Write descriptive alt text for every product image. Describe the image, do not stuff keywords.
- Rename files before upload:
organic-acacia-honey-480g.jpginstead ofIMG_4829.jpg. - Compress originals before uploading. The CDN optimizes delivery, but it cannot fix a 6MB source file.
What Are Shopify's Robots.txt and Sitemap Limits?
Shopify auto-generates your sitemap at /sitemap.xml, split into sub-sitemaps per resource type. It updates itself as products change, and noindexed pages are excluded automatically. You cannot edit entries manually. Submit only /sitemap.xml in Search Console, not the individual sub-sitemaps.
For robots.txt, Shopify lets you customize it through a robots.txt.liquid template. The defaults sensibly block /admin, /cart, /checkout, and internal search URLs. The customization I use most is blocking filtered collection URLs, which create crawl bloat on stores with heavy faceted navigation:
{% for group in robots.default_groups %}
{{- group.user_agent -}}
{%- for rule in group.rules -%}
{{- rule -}}
{%- endfor -%}
Disallow: /*?*filter.p.m*
Disallow: /*?*sort_by*
{% endfor %}
Only add disallows you understand. A wrong pattern can accidentally block paginated collection pages you want indexed.
How Do I Set Up Hreflang for Multi-Region Shopify Stores?
Shopify Markets creates localized subfolders like /en-us or /de, and this is where hreflang becomes essential. Without it, Google may show the wrong regional version.
What I implement in theme.liquid:
{%- for locale in shop.published_locales -%}
<link rel="alternate" hreflang="{{ locale.iso_code }}"
href="{{ canonical_url | replace: shop.locale, locale.iso_code }}">
{%- endfor -%}
<link rel="alternate" hreflang="x-default" href="{{ shop.url }}{{ request.path }}">
- Every localized page must list all versions including itself, with reciprocal links.
- Include an
x-defaultpointing at your primary market. - Test with a hreflang validator after launch. The most common failure I see is hreflang tags pointing to 404s after a market was disabled.
How Should I Structure Internal Linking for Shopify Collections?
Collections are your category hub pages and your best shot at ranking for competitive terms, yet most stores treat them as thin product grids with no text and no inbound links beyond the main nav.
- Add 150 to 300 words of useful descriptive text below the product grid on important collection pages, and link collections contextually from product descriptions and blog content.
- Implement breadcrumbs in Liquid for crawl depth and BreadcrumbList eligibility.
- Make "related products" sections real links, not JavaScript-only carousels that crawlers cannot follow.
FAQ
Can I change Shopify's forced URL structure?
No. The /products/, /collections/, /pages/, and /blogs/ prefixes are mandatory on Shopify. Instead, optimize product handles, keep URLs short, and keep canonicals and internal links consistent.
Do I need a paid SEO app for schema markup on Shopify?
Not necessarily. Most schema needs can be handled with JSON-LD hardcoded into your theme, which is faster than an app and fully under your control. Apps make sense for collecting and displaying reviews, but the schema itself belongs in the theme.
Why are some of my product pages not getting indexed?
The usual suspects are variant URL duplication, thin supplier descriptions, and crawl budget wasted on filtered collection URLs. Check Search Console's page indexing report, fix the pattern rather than individual URLs, and keep your sitemap limited to canonical, indexable pages.
How many Shopify apps are too many for SEO and speed?
There is no magic number, but every app adds JavaScript weight. I get suspicious above 10 to 12 apps. Audit quarterly and remove what is unused, including leftover code in your theme files.
Does Shopify handle canonical tags automatically?
Mostly yes. Shopify outputs canonical tags on products, collections, and articles by default. Your job is to verify the tag renders, never link to non-canonical versions internally, and watch for apps or theme code that override it.
Shopify gives you a fast, secure foundation, but the technical SEO details are yours to own. Work through this checklist and you will cover the issues I find on most audits. For a second pair of eyes on your store, I offer technical SEO audits and Shopify optimization over at my portfolio.
Top comments (0)