TECHNICAL
Shopify SEO: The Complete Guide for 2026
A complete Shopify SEO guide covering URL structure limitations, duplicate content from collection/product URL patterns, structured data for product pages, Core Web Vitals for Shopify themes, blog content strategy, and the Shopify-specific technical issues that limit organic rankings.
Published July 13, 2026 · 9 min read
Shopify is a managed e-commerce platform — unlike WordPress or a custom stack, you have limited control over server configuration, URL structure, and HTML output. Understanding where Shopify restricts your SEO options (and how to work within those restrictions) is essential for growing organic traffic on any Shopify store.
The Shopify URL structure problem
Shopify enforces a fixed URL structure that you cannot change:
- Products:
/products/product-handle - Collections:
/collections/collection-handle - Collection + product combination:
/collections/collection-handle/products/product-handle - Blog posts:
/blogs/blog-name/post-handle - Pages:
/pages/page-handle
The /collections/ and /products/ prefixes are permanent. You cannot have clean top-level URLs like /running-shoes for a product — it will always be /products/running-shoes. This is a deliberate platform constraint; Shopify does not provide a way to change these prefixes.
The duplicate URL issue: When a product belongs to a collection, Shopify serves it at two URLs:
/products/product-handle(standalone)/collections/collection-handle/products/product-handle
Both return HTTP 200 and serve the same content. Shopify handles this with a canonical tag pointing to the /products/product-handle URL as canonical. This means the collection-path URL will not be indexed as a separate page — Google follows the canonical to the standalone product URL. This is correct behaviour. However, verify in GSC that the canonical is being followed and that collection-path product URLs are not appearing in your index as separate pages.
Duplicate content from collections
Shopify collections create another source of duplicate content: a product appearing in multiple collections is served at multiple URLs, all canonicalised to the same /products/ URL. This is fine for SEO as long as all canonical tags are correctly implemented.
A more significant issue: collection pages with overlapping products. If your site has /collections/womens-shoes and /collections/sale, a product in both collections appears in both collection listings. These collection pages themselves have distinct URLs and distinct canonical tags, but their content (product listings) overlaps significantly. This is a normal e-commerce pattern and Google handles it well — the canonical on each collection page points to itself, and the title/meta description differ.
Tag-filtered collection URLs are the real duplicate content risk: /collections/shoes/running and /collections/shoes/blue are filtered views of the same collection. By default, Shopify canonicalises these filtered views back to the root collection page (/collections/shoes), which prevents indexation of the filtered variants. This is usually the right choice, but if specific filtered views have significant search demand (e.g., "blue running shoes" has meaningful search volume), consider creating dedicated collections for high-value product segments rather than relying on tag filters.
Product page SEO
Shopify's product page template is where you have the most SEO control:
Title tags and meta descriptions: Shopify's theme uses the product's title field and description field by default for meta tags — but these aren't optimal. The product title becomes the <title> tag without any structural modification. Most Shopify themes allow you to override the page title and meta description in the product's "Search engine listing preview" section (below the description in the product editor). Use this to write SEO-optimised title tags (include primary keyword + brand) and meta descriptions separate from the product description.
Product JSON-LD: Shopify's Dawn theme and most modern Shopify themes automatically output Product schema with the basic properties. Verify yours includes: name, description, image, sku, offers (with price, priceCurrency, availability). For Rich Results eligibility, Google requires offers to be present. The highest-value addition is aggregateRating — customer review data — which enables Review stars in search results. Shopify apps like Judge.me and Okendo can add aggregateRating to your Product schema automatically if they're properly configured.
Product descriptions: Shopify's product description editor is a rich text field. Write unique, substantive product descriptions (200+ words) for your most important products. Avoid manufacturer descriptions used verbatim across multiple retailers — these are duplicate content. Unique descriptions that provide genuine purchase decision value (materials, dimensions, use cases, comparisons to similar products) rank better and convert better.
Collection page SEO
Collection pages are Shopify's equivalent of category pages in a traditional e-commerce site. They're often undertreated from an SEO perspective.
Collection descriptions: Add a unique, keyword-rich description to every indexable collection page. Shopify allows HTML in collection descriptions — use H2 subheadings, paragraph text, and internal links to related collections. A collection page with only a product grid and no textual content is thin. 150–300 words of editorial content describing the collection, who it's for, and what differentiates the products gives Google signal about the collection's purpose.
Collection titles and URLs: The collection handle (which becomes the URL slug) is set when the collection is created and should be keyword-descriptive. A collection titled "Women's Running Shoes" should have handle womens-running-shoes — resulting in the URL /collections/womens-running-shoes. Change generic handles like /collections/collection-1 before the store launches.
Internal linking between collections: Shopify doesn't create links between collections automatically. Add cross-collection links manually in collection descriptions or via a navigation structure. This distributes link equity between related collections and helps Googlebot discover all collections from any entry point.
Shopify Core Web Vitals
Shopify themes vary enormously in performance. The Dawn theme (Shopify's free reference theme) scores well on Core Web Vitals out of the box. Many third-party themes — particularly older premium themes from the Shopify Theme Store — load large JavaScript bundles and many external requests that fail LCP and INP thresholds.
LCP on Shopify: The primary LCP element on most Shopify product and collection pages is the hero or first product image. Key optimisations:
- Use
fetchpriority="high"on the LCP image in your theme's Liquid template (edit the section template that renders the hero or featured image) - Ensure images are served via Shopify's CDN in WebP format (Shopify automatically converts to WebP via its image CDN — verify the
<img>src usescdn.shopify.comand the URL containsformat=webp) - Use appropriate sizes — a product thumbnail doesn't need to be 2000px wide
INP on Shopify: The most common Shopify INP causes are third-party apps that inject JavaScript into storefront pages. Each installed Shopify app that adds storefront JavaScript is a potential INP degrader. Audit installed apps and remove those that add storefront scripts you don't actively use. Shopify's Theme Editor shows which apps have theme app extensions — this is where storefront JavaScript is loaded.
CLS on Shopify: Common CLS causes in Shopify themes: product images that load without explicit width/height in the Liquid template (image_tag filter without size attributes); fonts loaded from Google Fonts or custom CDN with FOUT; promotional banners or app-injected elements that push content down after initial render.
Blog SEO on Shopify
Shopify includes a blog system with URLs at /blogs/news/ (or whatever blog handle you set). For content marketing SEO, Shopify's blog is functional but limited compared to WordPress:
- No native categories (only tags, which create
/blogs/news/tagged/tag-nameURLs — noindex these) - No native author archive pages
- Limited native schema support for blog posts (most themes don't output Article JSON-LD automatically)
For Article JSON-LD: edit your article.liquid theme template to add <script type="application/ld+json"> with the Article schema, populating from Shopify's Liquid template variables ({{ article.title | json }}, {{ article.published_at | date: '%Y-%m-%dT%H:%M:%SZ' }}, {{ article.user.name | json }}).
For blog content strategy: treat the Shopify blog as a long-form content hub targeting informational and commercial-investigation queries relevant to your products. A sporting goods store's blog covering "how to choose running shoes" or "best running shoes for flat feet" supports both informational SEO and the purchase decision for their product pages.
Run the DeepSEOAnalysis free audit on your Shopify store to check Product schema completeness (including aggregateRating), duplicate URL canonicalisation, Core Web Vitals from real CrUX field data, internal link coverage for all collection pages, blog Article JSON-LD, and all five AI visibility signals — without requiring any Shopify app or admin access.
Frequently asked questions
Can I change Shopify's URL structure?
No. The /products/, /collections/, /blogs/, and /pages/ URL prefixes are platform-enforced and cannot be changed without migrating away from Shopify. The /products/ and /collections/ path structure is baked into Shopify's routing system. If you're migrating to Shopify from a platform with different URL structures (e.g., WooCommerce with /product/ prefix), you'll need a 301 redirect strategy mapping old URLs to new /products/ URLs. Shopify's URL Redirects feature (under Navigation) handles these — or use an app like Matrixify for bulk redirect imports. Ensure every old URL that had backlinks or GSC traffic has a corresponding 301 redirect.
How do I fix duplicate product URLs in Shopify?
Shopify automatically canonicalises collection-path product URLs (/collections/collection/products/product) to the standalone product URL (/products/product) via the canonical tag in the theme's <head>. This is handled by Shopify's default liquid template — check that your theme's theme.liquid (or layout/theme.liquid) includes {{ content_for_header }} in the <head>, which is where Shopify injects the canonical tag. If the canonical is correctly implemented, you don't need to take any additional action. Verify in GSC that collection-path URLs are marked as "Duplicate, Google chose different canonical than user" in Coverage — this is correct, expected behaviour, not an error.
Does Shopify have good SEO out of the box?
Shopify handles several SEO basics automatically: canonical tags on product and collection pages, auto-generated XML sitemap at /sitemap.xml, HTTPS on all stores, mobile-responsive themes, and basic Product schema in modern themes. What Shopify doesn't handle automatically: collection page description content (you must write it), blog Article JSON-LD (you must add it to the theme template), aggregateRating in Product schema (requires a reviews app configured for schema output), and blog tag archive pages (you should noindex these — add <meta name="robots" content="noindex"> conditionally in your theme template when template.suffix == 'tagged' or the URL contains /tagged/).
What's the best way to add structured data to Shopify?
For most structured data needs: edit your Shopify theme templates directly. Shopify's Liquid template system allows adding <script type="application/ld+json"> blocks directly in section templates — this is the most reliable method as the JSON-LD renders in the server-side HTML (visible to Googlebot's first-wave crawl). Shopify apps that add structured data via JavaScript injection are less reliable — the schema may render client-side and be invisible to Googlebot's first-wave crawl. The highest-value structured data additions for Shopify stores: Product schema with aggregateRating (via a reviews app), BreadcrumbList on product and collection pages, and Article JSON-LD on blog post pages.
MORE FROM THE BLOG
Related articles
11 min read
YouTube SEO: How to Rank Videos on YouTube and Google Search
YouTube SEO covers title optimisation, description keyword placement, chapters, thumbnails, closed captions, and the watch signals that drive YouTube and Google ranking.
Read →7 min read
Voice Search SEO: How to Optimise for Voice Queries and AI Assistants
How voice search queries differ from typed queries, what technical signals (FAQ schema, speakable schema, featured snippet eligibility) matter for voice results, and why optimising for voice search overlaps heavily with AI visibility.
Read →10 min read
TikTok SEO: How to Rank in TikTok Search and Get Discovered in Google
TikTok SEO covers how to optimise videos for TikTok's internal search algorithm, how TikTok content ranks in Google Search, and how TikTok presence feeds into AI answer systems.
Read →Run DeepSEOAnalysis on your own site.
Free, no signup. Technical SEO, Core Web Vitals, structured data, and AI visibility in one report.
Run a free audit →