Home › Blog › Shopify SEO
SEO GUIDES · PLATFORM TECHNICAL SEO

Shopify SEO: What You Can and Cannot Change

The platform constraints Shopify will not let you edit, the ones it handles for you, and the workaround for each.

By the Digital Hangover team · Updated October 2026 · 8 min read
Quick answer: Shopify SEO is the work left over after the platform's defaults. Shopify sets product canonicals and blocks sort-order URLs for you. It will not write collection copy, stop your theme linking to collection-scoped product URLs, or keep filter URLs out of the crawl. Those are your job.
WHAT SHOPIFY FIXES, AND WHAT IT LEAVES YOU Two columns, and only one is yours SHOPIFY HANDLES THIS Already done for you Product canonical points to the clean /products/ URL Default robots.txt blocks sort_by and multi-filter combinations Not your problem. STILL YOURS TO FIX Nobody else will Tiles linking to collection-scoped product URLs Single-filter URLs — crawlable by default Collection pages with no copy THE ONE MOST PAGES GET WRONG Shopify's default robots.txt blocks filter URLs only when TWO OR MORE filters are applied. A single-filter URL is left crawlable. Read your own store's robots.txt before assuming otherwise. PLATFORM LIMITS WORTH KNOWING BEFORE YOU PLAN 50 products per paginated page 25 storefront filters per store 5,000 products, above which collection.filters empties Every figure above is from Shopify's own developer docs, which print no last-updated date — read 7 Oct 2026.

What Shopify handles, what it leaves you — and the robots.txt detail most pages get wrong.

Most Shopify SEO advice is ecommerce SEO advice with the word Shopify pasted on top. That part is already covered: our ecommerce SEO guide handles keyword mapping and product-page copy, and none of it changes because you are on Shopify.

What changes is the ceiling. Shopify decides your URL shape, caps your collection pagination and sets your canonicals — and the gap between what it decides and what it leaves open is where every real Shopify SEO problem sits.

This page is only that gap, checked against Shopify's documentation on 7 October 2026.

What Shopify's URL structure forces on you

Shopify routes every content type through a fixed prefix you cannot remove or rename. You control only the handle at the end.

  • Products — /products/{handle}. Shopify's Liquid reference shows the product url property returning /products/gorgeous-wooden-computer.
  • Collections — /collections/{handle}, with the collection list at /collections.
  • Pages — /pages/{handle}, as in the documented /pages/contact.
  • Blog articles — /blogs/{blog-handle}/{article-handle}, a two-level path with the blog name baked in.

None of that is a ranking problem. The second route Shopify opens for products is.

The duplicate product URL problem Shopify half-solves

On Shopify the same product resolves at two paths: /products/{handle} and /collections/{collection}/products/{handle}. Not a bug — a documented Liquid filter. Shopify's within filter reference shows it turning /products/draught-of-immortality into /collections/sale-potions/products/draught-of-immortality (no last-updated date is printed on that page; read 7 October 2026).

Shopify handles the indexing half. Its Partners guide to canonical URLs, published 29 September 2021, states that "for Shopify products and variants, the canonical URL output is the default product page with no collection or variant selected" — so /collections/classics/products/classic-t emits a canonical pointing at /products/classic-t.

What Shopify does not handle is your internal linking. Many themes build the collection grid with product.url | within: collection, so every tile points at the duplicate path rather than the canonical one.

That matters twice over. A canonical is a hint, not an instruction — Google's canonicalisation documentation (last updated 10 July 2026) says that without one, Google "will identify which version of the URL is objectively the best version to show to users in Search". And it still has to fetch the duplicate before discarding it.

The fix is one line of theme code: link product tiles to product.url and drop the within filter. The canonical stays as the safety net; your internal links stop arguing with it. Our canonical tags guide covers how the signal is weighed.

Shopify constraints, and the honest workaround for each

Shopify constraintCan you change it?Practical workaround
The /products/, /collections/, /pages/, /blogs/ prefixesNoSpend the effort on the handle — short, exact, never changed once it has earned links.
Products resolving at /collections/.../products/... tooNo — the route existsShopify's canonical names /products/{handle} already. Remove within from the theme's grid links so you stop crawling the duplicate.
robots.txtYes — via robots.txt.liquidShopify's docs allow adding, removing and custom rules. Use it on the parameter paths the default leaves open.
The XML sitemapYou don't author itShopify generates /sitemap.xml. Control its contents by unpublishing and noindexing. Extra sitemap URLs go in robots.txt.liquid.
Products per collection pageCappedShopify's collection.products reference caps pagination at "a limit of 50". Plan the sequence.
Storefront filtersYes — up to 25Keep the count low. Filters return empty on collections over 5,000 products.
Collection page contentOne field by defaultThe collection object ships a single description. Add theme sections or metafields for anything more.
Blog architectureNo — one level, tags onlyUse separate blogs as pseudo-sections; build silos by hand.
App scripts on every pageYes — you chose to install themAudit, remove, defer. The largest speed lever most stores have.
Theme and Liquid templatesYesWhere almost every genuine Shopify SEO fix lives.

What we check first on a new Shopify store

Digital Hangover first-hand note: On an ecommerce audit the first page we open is a collection, not a product — and the first thing we read is where the product tiles point. If they point at /collections/x/products/y, the store is spending crawl allowance and link equity on URLs it has already told Google to ignore. It is usually the highest-value fix: near-universal across themes, a one-line change, nothing to deploy. This is our own observation from client work and it carries no measured figure — we have run no controlled before-and-after we would publish.

The second check: whether those collection pages contain any words at all. Usually not.

Collection pages are the money pages, and Shopify ships them thin

For ecommerce search, collections are where the demand is. Someone searching "cotton kurta set" wants a grid, not one product — so the page that should rank is a collection.

Shopify's default collection template is that grid. Per Shopify's collection object reference (no last-updated date printed; read 7 October 2026) the only built-in content field is description — one block, usually left blank. The result is empty collection pages competing against marketplace listings that at least carry reviews.

  1. Write the description as an answer, not a banner. 60–120 words on what is in the collection, who it suits, how to choose.
  2. Give each collection a distinct title and H1. Two collections titled "Shop All" are two pages Google has no reason to separate.
  3. Add a second block below the grid via a theme section or metafield — buying guidance, sizing, care. Short above, depth underneath.
  4. Create collections for how people search, not how you merchandise. "Linen shirts" earns a query; "New Arrivals" does not.
  5. Link down to the best products with descriptive anchors, and up from each product to its collection.

Filters and faceted navigation: where Shopify's defaults stop

Shopify's storefront filters generate query parameters. Its storefront filtering documentation (no last-updated date printed; read 7 October 2026) gives the shape — filter.p.product_type=shoes, filter.p.tag=new,trending, filter.v.option.color=red, filter.v.price.lte=5 — and a maximum of 25 filters per store.

Four filters times their values gives thousands of crawlable URLs on one collection.

Shopify's generated robots.txt covers part of this. Reading the default file on a live Shopify storefront on 7 October 2026 — a live-store read, not a documentation claim — it disallows sort-order URLs and multi-filter combinations, among others:

Disallow: /collections/*sort_by*
Disallow: */collections/*filter*&*filter*
Disallow: /search
Disallow: /cart

Read the second line carefully. It blocks URLs carrying two or more filter parameters. A single-filter URL such as /collections/shirts?filter.p.product_type=shirt is not blocked, so one page per filter value per collection stays open to crawling.

Google's faceted navigation documentation (last updated 18 December 2025) sets out the options: "use robots.txt to disallow crawling of faceted navigation URLs"; rel="canonical" on a facet "may, over time, decrease the crawl volume"; rel="nofollow" works only if every anchor to that URL carries it; and "return an HTTP 404 status code when a filter combination doesn't return results".

On Shopify that means three decisions:

  • Promote the filter values that are real queries. If "black shirts" has demand, build it as its own collection. If not, it stays a filter.
  • Disallow the rest in robots.txt.liquid, which Shopify's robots.txt documentation (no last-updated date printed; read 7 October 2026) permits via added or custom rules.
  • Don't use noindex for crawl control. Google's crawl budget documentation (last updated 22 July 2026) says to "block these unimportant pages using robots.txt", because with noindex "Google will still request, but then drop the page".

One caveat from that same page: Google aims the guidance at sites with 1 million+ pages changing weekly, or 10,000+ changing daily. A 200-product store has no crawl budget problem. A 40,000-SKU store with 25 filters does — our crawl budget guide marks the line.

Pagination on large collections

Because collection.products caps at 50 per page, any collection over 50 items becomes a paginated sequence — and Shopify does nothing clever with it.

Google's ecommerce pagination documentation (last updated 10 December 2025) is specific: "Give each page a unique URL. For example, include a ?page=n query parameter, as URLs in a paginated sequence are treated as separate pages by Google." It adds "Don't use the first page of a paginated sequence as the canonical page" and confirms Google "no longer uses" rel="next" and rel="prev".

So let ?page=2 self-canonicalise, keep page two onwards indexable, and don't let your sitemap be a crawler's only route to product 300. A collection needing eleven pages usually wants splitting into sub-collections.

Apps, scripts and the speed you actually control

Every app that injects a script costs you render time, and on Shopify the theme and app layer decide most of your speed. Hosting is not the variable; your install list is.

That is Shopify's own position, not ours. Its theme performance best practices (no last-updated date printed; read 7 October 2026) tell developers to "identify and remove or defer app scripts that block HTML parsing before any content is rendered" and to "audit all scripts, including apps, tracking pixels, and theme code, and remove anything that isn't earning its performance cost". The same page notes a theme needs "a minimum average Lighthouse performance score of 60" for the Shopify Theme Store.

We will not quote you a Core Web Vitals benchmark for Shopify stores, because there is no figure we can source and stand behind. The sequence that works:

  • Uninstall apps you no longer use — removal does not always clear the leftover theme code, so check the theme files.
  • defer non-critical scripts; use async only where execution order does not matter.
  • Fix images before JavaScript. Product grids are image-heavy, and image SEO usually pays faster than a theme rebuild.
  • Judge it on field data, not one lab score — our Core Web Vitals guide says which number to trust.

Blogging on Shopify: the honest limitation

Shopify's blog engine is a publishing tool, not a content architecture. Per Shopify's blog object reference (no last-updated date printed; read 7 October 2026) a blog exposes articles, tags and all_tags — and no property for nested categories at all.

So you get one level, tags instead of a taxonomy, and /blogs/{blog-handle}/{article-handle} paths you cannot flatten. Pillar-and-cluster structures have to be built by hand — workable, but more effort than the same job on WordPress. Worth knowing before you plan 80 articles.

One thing to ignore: you do not need an llms.txt file to rank. Shopify's template reference (no last-updated date printed; read 7 October 2026) does now list agents.md.liquid, llms.txt.liquid and llms-full.txt.liquid templates, described as agent-facing descriptions of the store. That is a Shopify feature, not a search engine requirement — no Google documentation asks for them.

Where to go from here

Work in this order, roughly the order of return: theme grid links, collection copy and titles, filter rules in robots.txt.liquid, pagination, app cleanup. All theme and admin work — none of it needs you to leave Shopify.

Expect three to six months before organic changes read as meaningful traffic; technical fixes land faster in crawl data than in revenue. If you would rather someone else ran the audit and theme edits, that is our ecommerce SEO work, paired with ecommerce CRO so the traffic converts.

Key takeaways: Shopify sets your URL prefixes, your product canonicals, your 50-per-page collection cap and your sitemap — none of those are negotiable. Yours are the theme links, the collection copy, the filter rules in robots.txt.liquid, pagination and the app list. That second list is the whole job.

Frequently asked questions

Can you change Shopify's URL structure?

No. Shopify routes products through /products/, collections through /collections/, pages through /pages/ and articles through /blogs/{blog}/{article}, and those prefixes cannot be removed or renamed. You control only the handle at the end, so make it short and exact, and never change it once the URL has earned links.

Does Shopify create duplicate content?

Shopify opens a second route to every product — /collections/{collection}/products/{handle} as well as /products/{handle}. Shopify's Partners guide to canonical URLs (29 September 2021) says the canonical output for products is the default product page with no collection or variant selected, so indexing is handled. What is left is your theme's internal links, which often still point at the duplicate.

How many products can a Shopify collection page show?

Shopify's collection.products Liquid reference says to use the paginate tag to choose how many products per page, "up to a limit of 50" (read 7 October 2026). Any collection over 50 items becomes a paginated sequence, so give each page its own canonical URL rather than canonicalising them all to page one.

Should you block Shopify filter URLs in robots.txt?

Usually yes, for filter values that do not answer a real query. Shopify's default robots.txt blocks sort-order URLs and combinations of two or more filter parameters, but leaves single-filter URLs crawlable. Google's faceted navigation documentation (last updated 18 December 2025) recommends a robots.txt disallow for faceted URLs you do not want crawled.

Do Shopify apps slow your store down?

Apps that inject scripts do. Shopify's own theme performance guidance tells developers to remove or defer app scripts that block HTML parsing, and to audit all scripts including apps, tracking pixels and theme code, removing anything not earning its performance cost. Uninstalling an app does not always clear its leftover theme code, so check the theme files too.

For Shopify and ecommerce stores

Want the theme-level fixes done, not listed?

We audit the grid links, collection copy, filter rules and app layer — then ship the changes.

Explore ecommerce SEO services →

Get our posts in Google

Make Digital Hangover a preferred source

One tap tells Google to show more of our SEO and marketing coverage in your Top Stories.