The duplicate content on your store isn’t your fault. Shopify made it.
Every product on a Shopify store lives at two addresses. There’s the clean one, /products/linen-shirt, and there’s the collection scoped one, /collections/summer/products/linen-shirt. Sell that shirt through four collections and you now have five URLs for one product. Shopify points the canonical tag at the clean version, which is the right call, but the pages still exist and still get crawled.
Then add variants. Shopify hangs a ?variant= parameter on the URL for each one, so a product with 40 sizes and colors is 40 more crawlable addresses. Five hundred products at that rate is twenty thousand URLs before you’ve added a single filter.
Turn filters on and it gets worse fast. Published figures for larger catalogs run into six figures of crawlable URLs generated from nothing but filter combinations.
So here’s the checklist, and it’s shorter than the ones you’ll find elsewhere. Fix how your theme links internally, control the parameter URLs, write the collection pages, and write the product pages. That’s most of it. The blog is not the priority, which is where most stores put their effort.
Stop your own theme from linking to the duplicates
This is the one nobody checks and it takes ten minutes.
Shopify sets the canonical correctly. But most themes, when they render a product card inside a collection, link to the collection scoped version. Which means your own internal linking is voting for the URL you told Google to ignore. You’ve published a contradiction about your own site, and the usual result is authority split across two addresses and occasional indexing of the wrong one.
Go to Online Store, Themes, Edit code, and search your theme for within: collection. It’ll usually be in the product card snippet. Remove that filter so the link renders as the plain /products/ path.
Test it by opening a collection page, right clicking a product, and copying the link. If it still has /collections/ in the middle, you missed one.
Take control of the parameter URLs
Two things to do, and one thing not to bother with.
Edit robots.txt.liquid from the same theme code editor. Shopify made that file customizable back in 2021, so you can add disallow rules for the filter parameter patterns your theme generates. Look at your own filter URLs first and match what you actually see, because themes differ.
Then decide which filter pages deserve to exist. A handful of them have real search demand. Shoppers genuinely search for “black linen shirt”, and if that’s a meaningful part of your revenue it deserves a proper collection with its own handle, its own description and its own title, rather than living as a parameter string. Everything else gets blocked or set to noindex.
What not to bother with: the ?variant= parameters. Shopify canonicals those to the product, Google handles them adequately in my experience, and the effort is better spent elsewhere.
Your collection pages are the money pages and they’re empty
Collection pages target the phrases with actual purchase intent. “Men’s linen shirts” converts. “Ten ways to style linen” does not, and yet that’s where the content budget goes.
Most Shopify collection pages have a headline, a grid of products, and nothing else. No text, no reason for Google to think this page is about anything in particular beyond the product names it can already see.
What to add, per collection, top three by revenue first:
A short intro that says what’s in the collection and who it’s for. Two or three sentences, above the grid.
A longer block below the grid answering what people actually ask before buying this category. Fit, care, sizing, materials, shipping timelines. Real questions from your own support inbox, not invented ones.
A title tag that isn’t the theme default. Check what your theme is producing, because a lot of them emit Collection Name - Store Name and stop there.
And links to the two or three related collections, so the crawler and the shopper both have somewhere to go. Same principle as any other internal linking problem: the pages that make money should be easy to reach.
Product pages, and why this changed in March
Most product pages carry forty words of manufacturer copy that appears identically on six other stores.
That was always weak. It’s worse now, because of something that happened this year.
ChatGPT’s Instant Checkout was abandoned in March 2026, reportedly because in-chat purchasing was too messy to get right. What replaced it matters more: Shopify rolled out Agentic Storefronts, which made a large share of Shopify catalogs discoverable inside ChatGPT by default, with the assistant handling browsing and recommendation and then sending the shopper to your actual store to buy.
Read what that means. A machine is now doing the comparison step for a slice of your customers, and it’s reading your product data to do it. Forty words of copy shared with six competitors gives it nothing to prefer you for.
So on each product page: write your own description, with the specifics a buyer would ask about. Dimensions, materials, what it fits, what it doesn’t. Make sure the structured data is complete, not just present, which means brand, availability, price, condition and shipping details rather than the minimum your theme emits. Add the questions people email you about, answered on the page.
Start with your top twenty products by revenue. Nobody finishes a catalog of eight hundred, and the top twenty are usually most of the money anyway. That’s also how I’d approach refreshing anything on a site too big to do all at once.
Which SEO apps are worth installing
Two categories, and the distinction is simple.
Apps that do a job are worth it. Bulk editing metafields and descriptions. Redirect management when you restructure. Image compression. Structured data that fills the gaps your theme leaves. These save real hours.
Apps that produce a score are mostly theater. You install it, it tells you your store is at 62 out of 100 and lists 340 issues, most of which are the platform generated URLs described at the top of this post and cannot be fixed from inside an app anyway. You now have a dashboard instead of a decision.
I’m not criticizing any specific product here. The model is the problem: reporting is cheap to build and easy to sell, and fixing a Liquid template is neither.
Before lunch
About an hour, in order.
Search your theme for within: collection and remove it. That one’s free and it’s the highest leverage thing on this page.
Open your three highest revenue collection pages and write an intro and a buying-questions block for each.
Look at your own filter URLs, then add matching disallow rules to robots.txt.liquid.
Then pick your single best selling product and rewrite its description in your own words, properly, as a test of how long it takes. Multiply by twenty and you have next week’s plan.
My notes on SEO cover the wider picture. If you’d like a second opinion on your own store, drop me a line on email, WhatsApp or LinkedIn and we can have a quick chat. I’m contracted full time so this isn’t a pitch.