The <link rel="canonical"> tag is one of the most powerful SEO tools — and one of the most misused on e-commerce sites. When configured correctly, it resolves duplicate content, consolidates SEO authority, and helps manage the thousands of technical URLs a catalog generates.
Here are the 4 concrete cases you’ll find on 90% of stores, and the right implementation for each.
It tells Google that this URL is the reference version (not a copy, not a variant)
It protects against stray parameters (UTM, tracking, etc.): if someone links to /products/chaussure-derby?ref=newsletter, Google sees the canonical and knows the real URL is the clean version
It helps normalize URLs with/without a trailing slash, with/without www, http vs https
Without a canonical, Google has to guess which URL to canonicalize, and its choices are not always optimal.
This is the most common case. One product with 5 colors × 4 sizes = 20 variants. Each variant can potentially have a distinct URL:
/products/chaussure-derby ← parent product
/products/chaussure-derby?variant=12345 ← black size 44 variant
/products/chaussure-derby?variant=12346 ← black size 45 variant
/products/chaussure-derby?variant=12347 ← brown size 44 variant
On most platforms (Shopify, WooCommerce), variants change the displayed price and images but do not create a real new page — just the same page with a different state.
Canonical implementation:
<!-- On ALL these URLs, the canonical points to the parent -->
<link rel="canonical" href="https://example.com/products/chaussure-derby" />
Even if the current URL is ?variant=12346, the canonical is the parameter-free version. Google consolidates all link equity on the parent URL, and the variants never appear in the SERP.
Did you enjoy this article?
Common mistake: letting each variant self-canonicalize with its own parameter. Result: Google sees 20 near-identical pages and ranks none of them properly.
Google deprecated support for rel=next/prev in 2019. Today’s best practice:
<!-- On /collections/chaussures -->
<link rel="canonical" href="https://example.com/collections/chaussures" />
<!-- On /collections/chaussures?page=2 -->
<link rel="canonical" href="https://example.com/collections/chaussures?page=2" />
<!-- On /collections/chaussures?page=3 -->
<link rel="canonical" href="https://example.com/collections/chaussures?page=3" />
Each page is self-referential — they contain different content (different products), so they deserve to be indexed separately.
Do NOT do this: canonicalize all paginated pages to page 1. This is a common mistake. Result: Google indexes only page 1, and your products on pages 3–10 become invisible.
This is the most complex case. A category with filters:
/collections/chaussures ← unfiltered
/collections/chaussures?color=noir ← filtered by color
/collections/chaussures?color=noir&size=44 ← filtered by color + size
/collections/chaussures?sort_by=price-asc ← sorted by price
Three possible strategies:
Strategy 1 — Canonicalize all filtered variants to the parent category
<!-- On /collections/chaussures?color=noir -->
<link rel="canonical" href="https://example.com/collections/chaussures" />
Simple. Works if you do not want filtered pages indexed. Trade-off: queries like “black shoes” will not rank to the right filtered page.
Strategy 2 — Clean URLs for important filters, self-canonical
For combinations with strong search volume, create clean URLs:
Shopify automatically generates a canonical on each product, pointing to the clean URL without parameters. Usually correct by default. You can override it in the template:
<!-- theme.liquid in the <head> -->
<link rel="canonical" href="{{ canonical_url }}" />
For URLs with variant parameters, Shopify canonicalizes correctly by default.
No native canonical on every page. SEO plugins (Yoast, RankMath, AIO SEO) handle this. All of them use a self-referential canonical by default, with page-level customization options.
Check with a site: search in Google or with Screaming Frog that every URL on your site has a canonical and that it points to the right URL.
Not directly, but it is at risk. Google chooses its own canonical URL, which may not be the one you want. On an e-commerce store, always define the canonical explicitly.
No. The canonical is a signal. Google can ignore it if it believes another URL is more appropriate. Common reasons: canonical to a lower-quality page, to a page with fewer backlinks, or contradiction with other signals (hreflang, internal linking).
A 301 is a physical redirect: the user and the bot are sent to another URL. A canonical leaves the current URL accessible but signals that another one is the reference version. Use a 301 for permanently moved URLs, and canonical for intentional duplicates (variants, parameters).
No, normally not. Google “merges” the page with its canonical and indexes only the canonical URL. If you want both indexed (rare case), you need to differentiate their content and use a self-referential canonical on each.
Technically yes, practically no. Always use the absolute URL with protocol (https://example.com/products/foo). Relative URLs are a source of errors (wrong scheme, wrong host).