
Shopify gives you a fast checkout, a decent theme and a URL structure you cannot fully control. What it does not give you is demand. Every Canadian store owner eventually hits the same wall: paid traffic works until the CPA creeps past margin, and then the question becomes whether anyone would find the store at all if the ads stopped. This guide is about closing that gap — the specific, unglamorous Shopify SEO work that moves a store from brand-only search into non-brand revenue.
We run this playbook for merchants doing anywhere from $30k to $2M a month. The mechanics rarely change. What changes is how disciplined the team is about the boring 20% that actually compounds.
Where Shopify helps you and where it quietly hurts
Shopify handles a lot by default. Clean HTML, HTTPS, mobile-responsive themes, automatic sitemaps, canonical tags on most templates, and a CDN that keeps time-to-first-byte respectable across Canada. That baseline is better than most custom builds.
The problems are structural, and they are the same on every store:
Forced URL prefixes
Every product sits under /products/, every collection under /collections/. You cannot nest a product inside its category path. That is fine — Google handles it — but it means internal linking has to do the work your URL hierarchy is not doing.
Duplicate product paths
The same product is reachable at /products/x and /collections/y/products/x. Shopify canonicals these, but sloppy themes and apps still surface the collection-scoped versions in internal links and sitemaps.
Faceted navigation sprawl
Filter and sort parameters can spawn thousands of near-identical URLs. Left unmanaged, they burn crawl budget on a store with 400 real pages.
App bloat
Reviews, upsells, popups, currency switchers, chat widgets — each one injects render-blocking script. A store with 14 apps rarely passes Core Web Vitals on mobile.
The single most common diagnosis we write: the store ranks fine for its own brand name and almost nothing else, because collection pages were never treated as landing pages.
Collections are your money pages, not products
This is the part most merchants get backwards. They pour effort into individual product descriptions and leave collection pages as a bare grid with a 40-word intro. But non-brand commercial search is overwhelmingly category-level. Someone searching “merino wool base layer” or “commercial espresso grinder Canada” is shopping a category, not a SKU. Google returns collection-style pages for those queries almost every time.

Build your architecture from keyword demand, not from how your warehouse is organised. Start with a flat export of every query your category has, cluster it by intent, and then decide which clusters deserve their own collection. A useful rule: if a cluster has meaningful monthly volume and a distinct buying intent, it earns a page. If it does not, it becomes a filter or a section on an existing page.
What a collection page needs to compete
- An H1 that matches the query, not your internal name. “Winter Hiking Boots” beats “FW25 Outerwear Collection.”
- 150–350 words above or below the grid that answer a real buying question — sizing, materials, use cases, what separates the $90 option from the $260 one. Not keyword padding.
- Visible sub-collection links. Waterproof, insulated, wide-fit. These become their own rankable pages and pass relevance both ways.
- Faceted URLs that are indexable only where demand exists. “Wide-fit winter boots” has demand; “winter boots sorted by price descending” does not.
- A short FAQ block with real questions pulled from your support inbox, marked up with FAQPage schema.
- Internal links from your blog content pointing into the collection with descriptive anchor text.
We rebuilt collection pages for an Ontario outdoor gear store using exactly this structure. Ten pages, no new products, no link building. Non-brand clicks over the following four months:
Handling faceted navigation without wrecking crawl budget
Filters are the most common source of Shopify index bloat. The fix is a deliberate policy rather than a plugin toggle.
| URL type | Example | Treatment |
|---|---|---|
| Demand-backed filter | Waterproof winter boots | Static collection, indexable, unique intro copy |
| Low-demand single filter | Boots in size 11 | Crawlable, canonical to parent, no internal links from nav |
| Multi-filter combination | Waterproof + size 11 + blue | Blocked in robots.txt, rel="nofollow" on the control |
| Sort and view parameters | ?sort_by=price-descending | Blocked, canonical to unparameterised URL |
| Pagination | ?page=3 | Indexable, self-canonical, unique title suffix |
Do not canonicalise paginated pages back to page one. That has been bad advice for years and it strips deep products of the only internal link they have.
Product pages: differentiation beats description length

If you sell products other retailers also carry, your biggest liability is the manufacturer description. It appears verbatim on forty other sites. Google has no reason to prefer yours.
What actually moves product pages:
First-party detail
Real measurements, fit notes, what it ships in, how it compares to the two nearest alternatives you also stock. Information no other retailer has.
Reviews on the page, in the HTML
Many review apps render client-side only. Check the rendered source. If review text is not in the DOM Google receives, it is contributing nothing.
Complete Product schema
Price, currency, availability, GTIN or MPN, aggregateRating, shipping and return details. Incomplete markup is why merchant listings get dropped.
Variant strategy
If a colour or size has genuine standalone search demand, give it its own indexable URL. If not, keep variants on one page and avoid splitting authority.
A merchant we work with rewrote 60 product pages in-house over six weeks — measurements, use notes, honest comparisons. Nothing else changed. Those 60 pages went from 4% to 31% of non-brand organic sessions.
Speed, on Shopify specifically
Shopify’s infrastructure is fast. Your theme and apps are usually not. Three checks find most of the damage:
- Audit apps by script weight, not by usefulness. Uninstalling an app rarely removes its leftover theme code. Search your theme files for orphaned script tags after every removal.
- Fix the LCP element. On a product page that is the main image. Serve it in modern format, at the size actually rendered, with
fetchpriority="high"and no lazy-loading. - Defer everything below the fold. Chat widgets, review carousels, related-product sliders and popups should never block first render.
Typical mobile Core Web Vitals improvement from these three alone, across the stores we have audited this year:
Content that earns links a product grid never will
Ecommerce link building is hard because nobody links to a product page. They link to something useful. Your job is to publish the useful thing and then route its authority to the pages that convert.
The formats that reliably work for Canadian merchants:
- Buying guides that take a position. “The three grinders we stopped stocking and why” gets shared. “Top 10 grinders” does not.
- Sizing, compatibility and fit tools. Interactive, indexable, and referenced by forums for years.
- Original data from your own order history. Aggregate, anonymised, seasonal. Journalists and niche publications cite this.
- Care and repair content. Enormous long-tail volume, low competition, and it reduces returns.
Every one of these should link into the relevant collection with descriptive anchor text, and into two or three specific products. That internal routing is the mechanism that turns editorial links into ranking movement for commercial pages.
Shopify SEO and AI search
A growing share of product research now starts inside ChatGPT Search, Perplexity or Google’s AI Overviews. Those systems do not browse your grid — they extract structured, self-contained facts.
Structure for extraction
Short, factual paragraphs under descriptive headings. A specification table beats a paragraph of prose every time.
Keep schema complete and honest
Price and availability mismatches between markup and page get you excluded from shopping surfaces entirely.
Answer comparison questions directly
“X vs Y” and “is X worth it” are the queries AI assistants resolve most often. Publish real answers, including when the cheaper option is fine.
Check your crawler policy
Blocking GPTBot or PerplexityBot removes you from those results. Decide deliberately rather than by default.
A realistic 90-day sequence
- Days 1–15 — Diagnose. Crawl the store, map indexed URLs against real pages, pull twelve months of Search Console query data, and separate brand from non-brand. Establish the baseline before touching anything.
- Days 16–30 — Fix the structure. Set the faceted URL policy, clean the sitemap, resolve duplicate paths, fix the LCP element and strip orphaned app scripts.
- Days 31–55 — Rebuild collections. Ten to fifteen priority collection pages with real copy, sub-collection links, FAQ blocks and schema. This is where most of the revenue comes from.
- Days 56–75 — Product depth. Rewrite the top 50 products by revenue potential with first-party detail. Complete the Product schema across the catalogue.
- Days 76–90 — Publish and route. Ship two or three genuinely useful content pieces, link them into collections and products, and begin outreach on the assets worth promoting.
What to measure
Rankings are a diagnostic, not a result. Track these instead:
| Metric | Why it matters | Healthy direction |
|---|---|---|
| Non-brand organic sessions | The only traffic that represents new demand | Up month over month |
| Non-brand organic revenue | Separates vanity traffic from sales | Up, with stable conversion rate |
| Indexed vs submitted URLs | Detects facet and duplicate bloat | Converging |
| Collection page entrances | Shows whether category work is landing | Rising share of total entrances |
| Mobile LCP at 75th percentile | Field data, not lab scores | Under 2.5s |
| AI assistant citations | Early indicator of extraction-readiness | Appearing and growing |
Frequently asked questions
How long does Shopify SEO take to show results?
Technical and on-page fixes on existing collection pages often move within four to eight weeks because those URLs already have history. Net-new pages and content-driven rankings typically need four to six months. Anyone promising faster on non-brand commercial terms is either targeting keywords nobody searches or is not being straight with you.
Do I need a Shopify SEO app?
Apps help with bulk metadata edits and schema, and that is genuinely useful on a large catalogue. None of them will build architecture, write differentiated copy or earn links. Treat them as tooling, not strategy, and audit their script weight before installing.
Should I blog on my Shopify store or a subdomain?
On the store, always. Shopify’s native blog is limited but it keeps content on the same domain, which means the authority it earns flows directly into your collections and products. A subdomain throws that away.
Will duplicate manufacturer descriptions get me penalised?
Not penalised — just ignored. Google filters near-duplicate product content rather than punishing it. The practical outcome is the same: your page never surfaces. Rewriting the top revenue products is one of the highest-return tasks available.
How many collection pages should a store have?
As many as there are distinct commercial search intents you can genuinely serve, and no more. A 300-product store might justify 25 to 40 well-built collections. Creating 200 thin ones to cover every keyword permutation reliably backfires.
Does Shopify’s URL structure hurt rankings?
No. The forced /collections/ and /products/ prefixes are cosmetically annoying and competitively irrelevant. Internal linking and page quality determine outcomes, not URL depth.
Want to know what your store is leaving on the table?
We will crawl your Shopify store, separate brand from non-brand revenue, and send you a prioritised list of what to fix first — no charge, no lock-in, cancel any time if you go on to work with us.
