Skip to main content
Reading Time: 9 min.

Shopify SEO is mostly about controlling what the platform does by default: the extra URLs it creates for every product, the tag and filter pages your theme exposes, the scripts apps inject into every page, and the structured data that several sources emit at once. At #10, we start a Shopify SEO review with those, because that is where we see stores lose search engine traffic. Missing keywords come later.

Shopify handles a lot of technical SEO well out of the box. It generates a sitemap, sets canonical tags, serves pages over HTTPS and gives every product and collection an editable title and description. That is why the problems that remain are easy to miss. They don’t show up as errors. They show up as pages competing with each other, crawl time spent on URLs nobody should land on, and a store that feels slow on a phone.

This guide covers the technical SEO issues we check first on Shopify and Shopify Plus stores, and what we do about each one. It is closer to a working Shopify SEO guide than a list of SEO best practices. If you want the platform-neutral version, covering category structure, faceted navigation and discontinued products on any catalog site, read our ecommerce SEO framework.

Why Shopify SEO is a different job

On most platforms, a search engine optimization fix is a settings change or a plugin. On Shopify, the URL structure is fixed, the robots.txt file is generated, and much of what reaches the page comes from the theme and the apps you’ve installed. Fixing search problems usually means working in theme code (Liquid), in app settings, or in Shopify’s admin and API, and knowing which of the three owns the problem.

That also means the usual SEO tools need interpreting. A crawler will happily report thousands of “duplicate” URLs on a healthy Shopify store. Some of those are a real problem and some are Shopify working as designed. The job is telling them apart.

We do this work on stores we build and run. Our longest search engagement is with a premium California olive oil and wine brand. It started with an audit and cleanup of penalty risks on its previous platform, carried through the move to Shopify Plus, and continues today. Several examples below come from that store.

One product, several URLs

Every Shopify product lives at /products/handle. But a product that belongs to three collections can also be reached at /collections/olive-oil/products/handle, /collections/gifts/products/handle and so on, plus a ?variant= version of each when someone picks a size.

<figure class=“ar-fig”><svg viewBox=“0 0 640 330” role=“img” aria-labelledby=“shopify-seo-urls-t”><title id=“shopify-seo-urls-t”>Four URLs for one Shopify product, all pointing their canonical tag at /products/evoo</title><text x=“16” y=“24” style=“font-size:16px;fill:var(–muted)”>URLs a shopper can land on</text><text x=“452” y=“24” style=“font-size:16px;fill:var(–muted)”>Canonical</text><rect x=“10” y=“44” width=“390” height=“48” rx=“8” fill=“none” stroke=“var(–ar-c0)” stroke-width=“2”/><text x=“24” y=“74” style=“font-size:16px”>/products/evoo</text><rect x=“10” y=“112” width=“390” height=“48” rx=“8” fill=“none” stroke=“var(–ar-c0)” stroke-width=“2”/><text x=“24” y=“142” style=“font-size:16px”>/products/evoo?variant=401</text><rect x=“10” y=“180” width=“390” height=“48” rx=“8” fill=“none” stroke=“var(–ar-c0)” stroke-width=“2”/><text x=“24” y=“210” style=“font-size:16px”>/collections/gifts/products/evoo</text><rect x=“10” y=“248” width=“390” height=“48” rx=“8” fill=“none” stroke=“var(–ar-c0)” stroke-width=“2”/><text x=“24” y=“278” style=“font-size:16px”>/collections/oil/products/evoo</text><g stroke=“var(–muted)” stroke-width=“2” fill=“none”><path d=“M400 68 L446 160”/><path d=“M400 136 L446 166”/><path d=“M400 204 L446 172”/><path d=“M400 272 L446 178”/></g><rect x=“450” y=“138” width=“180” height=“64” rx=“10” fill=“none” stroke=“var(–ar-c1)” stroke-width=“3”/><text x=“464” y=“176” style=“font-size:16px;font-weight:700”>/products/evoo</text><text x=“16” y=“322” style=“font-size:14px;fill:var(–muted)”>Each page tells Google: index /products/evoo</text></svg><figcaption>Shopify points the canonical tag on every product URL at the plain /products/ address. The problem is not the canonical tag. It is a theme that links to the collection versions, so the URL Google crawls most is not the one you asked it to index.</figcaption></figure>

Shopify handles the canonical tag on a Shopify product page correctly. On all of those URLs, the theme’s canonical_url points to /products/handle. So the duplicates are not, on their own, a penalty risk.

The cost comes from internal links. Many themes build product links with Liquid’s within: collection filter, so every product card on a collection page links to the /collections/.../products/... version. So Google finds the product mostly through URLs that say “index the other one.” A canonical tag is a hint, not a command, and you are asking Google to trust it against the evidence of your own links.

What we do:

  • Check how product cards, related products and search results build their links. If they use within: collection, change them to link to product.url directly.
  • Confirm the canonical tag is present on the live rendered page, not just in the theme file. Apps and page builders sometimes replace the product template.
  • Leave ?variant= URLs alone in most cases. They canonicalize to the product, and that is usually what you want. Separate variant pages only make sense when a variant has its own search demand, and then it is often better as its own product.

Collections are your category pages, so treat them that way

On most catalog stores, collections are the pages that should rank for category searches (“extra virgin olive oil”, “olive oil gift sets”). They are also the pages Shopify makes easiest to create and forget.

When we audited the collections on the olive oil and wine store this fall, the findings were ordinary, which is the point:

  • None of the collections had an SEO title or meta description set, so every title tag was just the collection name plus the store name.
  • An internal marker the merchandising team used to flag special collections was showing up in public title tags, and so in search results.
  • Two live collections covered the same products and competed for the same brand searches.
  • After a redesign, nearly 30 old collection URLs that still had search impressions returned 404 with no redirect.

None of these show up as an error in Shopify. A crawl plus Google Search Console data does surface them.

Two Shopify-specific gotchas from that work:

A redirect does not fire while the old URL still exists. Shopify’s URL redirects only take effect when nothing lives at the old path. If you retire a collection by redirecting it but leave it published to the Online Store, the old page keeps loading for shoppers and for Google. We had to unpublish collections before their redirects would work, then check each one resolved in a single hop.

Redirect chains end in odd places. One legacy URL redirected to a second URL that had itself been removed, so the chain ended at a 404. Load redirects, then crawl them. “We added the redirect” is not the same as “the old URL lands somewhere useful.”

Operational collections and tag pages

Shopify stores accumulate collections that exist for apps, not shoppers: collections that drive discount rules, tax overrides, point-of-sale behavior, subscription eligibility, wholesale testing. On the store above, about half of the collections were this kind of internal plumbing, and all of them were publicly indexable. One of them contained nearly the whole catalog, which put a second crawlable path in front of almost every product.

The fix we recommended was noindex, not deletion. Those collections run real business logic. Deleting them to tidy up search would break discounts or tax. A theme-level noindex by collection handle, or Shopify’s seo.hidden metafield, keeps them working and keeps them out of the index.

Tag pages are the other common source of thin pages. If your theme lets shoppers filter a collection by tag, Shopify serves URLs such as /collections/olive-oil/organic. Each one is a near copy of the parent collection with fewer products. Shopify’s default robots.txt already blocks some combined-tag patterns, but single-tag pages are crawlable and, depending on the theme, can be self-canonical.

Our approach: if a tag page matches a real search (“organic olive oil”) and you would happily send ad traffic to it, make it a proper collection with its own URL and a title written for that search. Otherwise, noindex it and stop linking to it from places crawlers follow.

Faceted filters and robots.txt.liquid

Shopify’s storefront filters (through the Search & Discovery app or the theme) add parameters such as ?filter.v.option.size=500ml&filter.p.vendor=... to collection URLs. Combine a few filters with sort orders and a single collection can produce hundreds of crawlable URLs that show the same products in a different order.

Most of these should never be indexed. Shopify’s default robots.txt blocks some patterns, including several sort and multi-filter combinations. Since 2021, you can edit the rules with a robots.txt.liquid template in the theme, which is how we add or adjust disallow rules for a store’s own filter and app URLs.

Two cautions. First, a robots.txt disallow stops crawling, not indexing. A blocked URL with links pointing to it can still appear in results without a description. For pages already indexed, noindex (which Google has to be able to crawl to see) comes first, and the disallow later, if at all. Second, edit robots.txt.liquid by adding to Shopify’s default rule groups rather than replacing them, so you keep the protections Shopify ships and pick up its future changes.

We cover the platform-neutral rules for which filter combinations deserve to be indexable in the ecommerce SEO framework, including an interactive example.

App bloat is a speed problem and a search problem

Every app with a storefront component adds something to the page: a script, a stylesheet, a block of data in the HTML. Uninstalling an app often leaves its code behind in the theme. Over a few years, this is usually the biggest single reason a Shopify store is slow.

On the olive oil and wine store, we measured page weight. Most of the HTML on every page came from three app embeds, not the theme. One was a store locator’s full list of locations. Another was a discount app’s stylesheet. The third was a membership app’s copy of the entire product catalog. Each was needed on one or two pages and loaded on all of them. Because the HTML is compressed in transit, the cost was not download time. It was the time a phone takes to parse it.

We also found that a fallback video in a theme section was the largest element on the home page, loaded from a hardcoded URL that couldn’t be seen in the theme editor. That kind of problem only shows up when you measure the live page.

Speed matters to a store’s SEO through Core Web Vitals, but mostly it matters to the people who land on the page. What we do:

  • Measure the live page on a phone-sized device, by template (home, collection, product), and record what each app contributes.
  • Remove leftover code from uninstalled apps.
  • Ask each remaining app whether it can load only where it is used. Some can be configured that way; some need a conversation with the app’s support team.
  • Test changes on a duplicate of the live theme, compared against an unchanged copy, before publishing.

Our site speed optimization work covers this in detail.

Structured data from themes and apps

Most Shopify themes output Product structured data (JSON-LD) on product pages. Review apps often output their own Product markup with ratings. Some SEO apps add a third version. The result can be two or three Product entities on one page with different prices, availability or names, and Google has to pick one.

Shopify has no Yoast-style plugin that owns all of this. On Shopify, structured data is expressed in the theme or in an app, and it has to be verified on the live rendered page, not assumed from the theme files.

What we check:

  • One Product entity per product page, with price, currency, availability and the variant data that matches what the page shows.
  • Review markup that attaches to that one Product, not a second one.
  • BreadcrumbList on collections and products, matching the visible breadcrumb.
  • Organization markup once, site-wide.

Structured data also matters beyond classic search. AI assistants that recommend products lean on product pages that clearly state what the product is, who it’s for and what it costs. We cover that side in our guide to generative engine optimization for ecommerce brands.

The paths you can’t change, and handles you can

Shopify’s URL prefixes are fixed: /products/, /collections/, /pages/, /blogs/<blog-name>/. You can’t remove them or move products under their category path. That is a constraint, not a ranking problem. Google doesn’t need /olive-oil/extra-virgin/ to understand a well-linked page. Spending effort on folder structure gets you less than on-page SEO work on titles and internal links.

The part you control is the handle. Keep handles short and stable. When you change one, Shopify offers to create a redirect from the old handle. Leave that box checked, and keep a list of the changes so a later redesign or migration doesn’t drop them.

This matters most when replatforming. If you are moving a store onto Shopify, the redirect map from old URLs to the fixed Shopify paths is one of the most important SEO pieces of the project.

Where to start: a Shopify SEO checklist

Issue How to spot it First fix
Collection-path product links Product cards link to /collections/…/products/… Link to product.url in the theme
Indexable operational collections Collections named for discounts, tax or POS return 200 and index noindex by handle; don’t delete
Thin tag and filter pages Crawl shows many ?filter. and tag URLs Promote the few with demand, noindex the rest
Missing collection titles Title tags are just the collection name Set SEO title and description in Shopify
404s after a redesign Old URLs with impressions in Search Console Redirect, unpublish, crawl to confirm
App weight HTML or scripts from apps on every page Load only where used; remove leftovers
Duplicate Product schema Two or more Product entities on one page One source, verified on the live page

The order matters if you want SEO efforts to improve SEO performance rather than just add activity. Titles and copy on a collection that is duplicated, unindexed or slow will not do much. We fix crawling and redirects first, then targeting, then content.

Our technical SEO audit guide walks through the full process, and the SEO audit checklist is a working list you can use with your own team. If you want a quick first look at your own Shopify site, the instant site audit in our Labs checks speed, search basics and AI visibility in about a minute.

Questions Shopify store owners ask

Is Shopify bad for SEO?

No. SEO on Shopify starts from a good base: canonical tags, a generated sitemap, HTTPS and editable titles. The problems we see come from themes and apps, and from how the catalog grows over time. They are fixable without leaving the platform.

Do the duplicate /collections/ product URLs hurt rankings?

Not directly, because Shopify points their canonical tag at the /products/ URL. They waste crawling and send mixed signals when your own theme links to them. Changing the theme to link to the canonical URL is usually a small change.

Should we use a Shopify app for SEO?

Sometimes, for a specific job. But many SEO app features (structured data, image compression, meta tags) overlap with the theme or with other apps, and add their own scripts. An extra app is not automatically good for SEO. We would check what the theme already does before adding another layer.

Why did our traffic drop after a Shopify redesign or theme change?

The usual causes are old URLs that now 404, redirects that don’t fire because the old collection is still published, title tags and copy that didn’t carry over, and slower pages from new sections or apps. Search Console comparisons from before and after the launch, by page type, show which applies.

What does a Shopify SEO agency actually do?

Not generic Shopify SEO tips. The useful part is technical and editorial work inside your store: theme fixes, redirects, index control, page copy, structured data and speed. It should end in changes made and verified on the live store, not just a report. That is how we run our technical SEO audit and ongoing SEO programs.

Bring us the store

Send us the store URL and what changed recently: a redesign, a new app, a drop in Search Console. We will look at the live site and tell you which of these issues apply and what we would fix first. Talk to #10, or see more about how we work on Shopify and Shopify Plus.

Close Menu