The same page, three URLs: /product, /product?color=blue en /product?utm_source=mail. To you that’s one page. To Google it’s three, and your ranking signals get spread across those three instead of added up. The canonical tag solves that: you point to one as the real one, and the rest refer to it.

What a canonical is, and what it isn’t
A canonical tag points to the preferred version of a page. Two things to remember. It consolidates your signals (links, relevance) to one URL, and it saves crawl budget because Google doesn’t have to keep looking at variants. But note: according to Google itself a canonical is a hint, not a directive. Google weighs all your signals and ultimately decides for itself. Your job is to make those signals so clear that the choice is obvious.

When do you need a canonical?
- URLs with parameters: filters, sorting, tracking (
utm) or session IDs. - Variants on http/https and with or without
www. - Print or mobile variants of the same page.
- Content that’s also published elsewhere (syndication).
How do you provide the canonical?
In most cases it’s one line in the <head>:
<link rel="canonical" href="https://example.com/product" />
For non-HTML files (like a PDF) it can go via an HTTP header. And remember that Google weighs multiple signals: a 301 redirect is the strongest signal, the rel="canonical"tag a strong signal, and a mention in your sitemap a weak signal. Above all, don’t let those signals contradict each other.
Best practices
- Use absolute https URLs, not relative ones.
- At most one canonical per page, and only in the
<head>. - Let the real page point to itself (self-referencing canonical).
- Link internally to the canonical version, not to the parameter variant.
- Make sure JavaScript doesn’t change the canonical afterwards; put it in the HTML source.
- Multilingual? Combine with hreflang.
The mistakes Google explicitly warns against
Google names a few classics by name: relative instead of absolute URLs, http URLs in your sitemap while your site runs on https, multiple canonicals on one page, a canonical pointing to a redirect, noindex or 404, using robots.txt or noindex to canonicalize (that doesn’t work), and giving a URL fragment (#) as the canonical.
How we got our own canonicals in order
On our own site we ran into a classic: our translation tool lowered the URLs to http, so canonicals, og tags and hreflang pointed to http while the site runs on https. Mixed signals. We fixed it with a small piece of our own code: everything canonical on https, every page self-referencing, and 301 redirects from the old URLs to the new ones. The result: one clear real URL per page, no noise.
You want the search engine to take you seriously. Give it mixed signals and it drops off.
Giacomo Perticara, founder and SEO strategist at GRP Digital
Canonical and hreflang belong together: both tell the search engine which URL is meant for what. Get that tight and you add up your signals instead of fragmenting them. And that, just like with JavaScript rendering, is where technology makes the difference between being found or not.




