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 producturlproperty 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 constraint | Can you change it? | Practical workaround |
|---|---|---|
The /products/, /collections/, /pages/, /blogs/ prefixes | No | Spend the effort on the handle — short, exact, never changed once it has earned links. |
Products resolving at /collections/.../products/... too | No — the route exists | Shopify's canonical names /products/{handle} already. Remove within from the theme's grid links so you stop crawling the duplicate. |
robots.txt | Yes — via robots.txt.liquid | Shopify's docs allow adding, removing and custom rules. Use it on the parameter paths the default leaves open. |
| The XML sitemap | You don't author it | Shopify generates /sitemap.xml. Control its contents by unpublishing and noindexing. Extra sitemap URLs go in robots.txt.liquid. |
| Products per collection page | Capped | Shopify's collection.products reference caps pagination at "a limit of 50". Plan the sequence. |
| Storefront filters | Yes — up to 25 | Keep the count low. Filters return empty on collections over 5,000 products. |
| Collection page content | One field by default | The collection object ships a single description. Add theme sections or metafields for anything more. |
| Blog architecture | No — one level, tags only | Use separate blogs as pseudo-sections; build silos by hand. |
| App scripts on every page | Yes — you chose to install them | Audit, remove, defer. The largest speed lever most stores have. |
| Theme and Liquid templates | Yes | Where almost every genuine Shopify SEO fix lives. |
What we check first on a new Shopify store
/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.
- Write the description as an answer, not a banner. 60–120 words on what is in the collection, who it suits, how to choose.
- Give each collection a distinct title and H1. Two collections titled "Shop All" are two pages Google has no reason to separate.
- Add a second block below the grid via a theme section or metafield — buying guidance, sizing, care. Short above, depth underneath.
- Create collections for how people search, not how you merchandise. "Linen shirts" earns a query; "New Arrivals" does not.
- 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.
defernon-critical scripts; useasynconly 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.
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.
Want the theme-level fixes done, not listed?
We audit the grid links, collection copy, filter rules and app layer — then ship the changes.
Make Digital Hangover a preferred source
One tap tells Google to show more of our SEO and marketing coverage in your Top Stories.
