SEO Full guide Intermediate

What Is a Canonical Tag? How rel=canonical Really Handles Duplicate Pages

8 min read · Updated

Short answer

A canonical tag is a line of HTML, rel=canonical, that tells search engines which URL is the main version of a page when several URLs show the same or very similar content. It helps consolidate ranking signals onto one URL. Google treats it as a strong hint, not a command, so other signals must agree with it.

In this guide
  1. What a canonical tag actually means
  2. How canonicalisation works
  3. Where duplicate URLs come from
  4. Where to check canonicals in Search Console
  5. A worked example: a home linen store’s filter pages
  6. Canonical tag vs 301 redirect vs noindex
  7. How to set up canonical tags properly
  8. Common canonical tag mistakes
  9. How to tell if your canonical setup is healthy
  10. Key takeaways

Canonical tags get recommended as the first fix for duplicate content, and in my experience they should usually be the last line of defence. Most of the canonical problems I’m asked to untangle on client sites were caused by canonical tags: a theme and a plugin both adding one, a template pointing every product at the homepage, a canonical telling Google to prefer a URL that redirects somewhere else.

The reason is simple. A canonical tag is a suggestion. Search engines weigh it against everything else your site says, including which URLs you link to, which ones you list in your sitemap and which ones redirect. If those signals disagree, the tag loses. So the best canonical strategy is to create fewer duplicates and link consistently, and then use the tag to tidy up what’s left. Here’s how it works and how to use it without making things worse.

What a canonical tag actually means

In plain terms, a canonical tag is a note on a page that says “if you find this content at several addresses, this is the one I want you to treat as the original”.

Formally, it’s a link element with the attribute rel=canonical, placed in the head section of a page’s HTML. It looks like this: <link rel="canonical" href="https://example.com/sofas/">. The href holds the preferred URL, called the canonical URL. For files that have no HTML head, like PDFs, the same instruction can be sent as an HTTP header instead.

The nuance is in what “duplicate” means. The tag is meant for pages with the same or near-identical content: the same product list sorted differently, the same article with tracking parameters on the end, the same page on HTTP and HTTPS. It isn’t meant for merging pages that are merely about similar topics. Point a canonical from one genuinely different page to another and search engines will often ignore it, which is the right call.

How canonicalisation works

Search engines regularly find the same content at several URLs. When they do, they group those URLs into a cluster and pick one to show in search results. That chosen URL is the canonical. The rest are treated as alternates and usually aren’t shown.

Google makes that choice using a set of signals. The strongest are redirects and rel=canonical tags. Weaker signals include which URL appears in your XML sitemap, which one your internal links point to, whether a URL uses HTTPS, and hreflang annotations for international sites. When all of these agree, Google almost always follows your canonical. When they conflict, it makes its own call.

Once a canonical is chosen, signals from the duplicates, such as links from other websites, are generally consolidated onto it. That’s the real value of canonicalisation: instead of three weaker URLs competing for the same query, one stronger URL carries the combined weight.

A few rules shape whether your tag is used. It should sit in the HTML head, not the body. There should be only one per page. It should use a full absolute URL, and that URL should return a normal 200 status, not a redirect or an error.

Where duplicate URLs come from

Before adding canonicals, it helps to know why duplicates exist on your site in the first place, because many can be prevented rather than patched:

  • Protocol and host variations: HTTP and HTTPS, www and non-www versions of the same page.
  • Trailing slashes and capitalisation: /Sofas and /sofas/ can be treated as different URLs.
  • Tracking parameters: UTM tags and click IDs added to links in emails and ads.
  • Sorting and filtering: e-commerce category pages with parameters for price, colour, size and sort order.
  • Multiple paths to one product: a product reachable under several category folders.
  • Session IDs and print versions: older platforms that add session codes or printer-friendly copies.
  • Staging and test sites: development copies that were never blocked from crawling.
  • Syndicated content: your article republished on a partner’s site.

Host and protocol variations should be fixed with redirects. Tracking parameters, sort orders and filters are where canonical tags genuinely earn their place.

Where to check canonicals in Search Console

Google Search Console shows you what Google actually decided, which matters more than what your tag says. Use the URL Inspection tool on any page and compare two fields: the user-declared canonical, which is what your tag says, and the Google-selected canonical, which is what Google chose. If they differ, something on your site is sending mixed signals.

The page indexing report groups URLs by status. “Alternate page with proper canonical tag” is usually fine: Google found a duplicate and followed your tag. “Duplicate, Google chose different canonical than user” means Google disagreed with you, and it’s worth investigating. “Duplicate without user-selected canonical” means Google found duplicates with no tag at all and picked one itself.

A worked example: a home linen store’s filter pages

This is a hypothetical example with example numbers. Say you run an online store in Jaipur selling hand block-printed bedsheets. Your bedsheets category has 60 products, and shoppers can filter by colour, size and fabric, and sort by price or newness.

Every combination creates a new URL. A crawler following filter links finds /bedsheets/?colour=indigo, /bedsheets/?colour=indigo&size=king, /bedsheets/?size=king&colour=indigo and so on. Your 60-product category turns into more than 1,500 crawlable URLs, most showing overlapping sets of the same products.

Search Console shows the damage. Google has indexed a handful of filter URLs, and for the query “indigo block print bedsheet”, a filtered URL is ranking on page two instead of your main category or your dedicated indigo collection.

The fix has three layers:

  1. Canonicals on filter and sort URLs. Every sorted or filtered version of /bedsheets/ gets a canonical pointing to /bedsheets/, because they’re variations of the same list.
  2. A real page for demand that deserves one. Because people genuinely search for indigo bedsheets, you create /bedsheets/indigo/ as a proper collection page with its own copy and a self-referencing canonical. It stops being a filter and becomes a destination.
  3. Consistent internal links and sitemap. Navigation, breadcrumbs and the XML sitemap list only /bedsheets/ and /bedsheets/indigo/, never parameter URLs.

After recrawling, Google’s selected canonical matches your declared one on the filter URLs, and the indigo collection starts appearing for the query it was built for. The canonical tag did part of the work. The site structure did the rest.

Canonical tag vs 301 redirect vs noindex

Canonical tag301 redirectNoindex
What it tells search enginesPrefer this other URL for this contentThis URL has permanently movedDon’t show this page in results
Can visitors still use the duplicate?YesNo, they’re sent to the new URLYes
Strength of signalStrong hintVery strongA directive for indexing
Consolidates link signalsGenerally yesYesNo
Best forSort, filter and tracking variationsOld URLs, HTTP to HTTPS, www to non-wwwThin pages you want visitors to see but not searchers

The mistake I see most is using a canonical where a redirect belongs. If a URL has no reason to exist for people, like the HTTP version of your homepage, redirect it. Canonicals are for duplicates that need to keep working. And don’t combine noindex with a canonical on the same page: one says “don’t index this”, the other says “this is a copy of that”, and search engines have to guess which you meant.

How to set up canonical tags properly

  1. Fix duplicates at the source first. Redirect HTTP to HTTPS and pick one host, www or non-www. Settle on one trailing slash convention and redirect the other.
  2. Add self-referencing canonicals to every indexable page. Each page points to its own clean, final URL. Most CMS platforms and SEO plugins do this, so check the output rather than assuming.
  3. Point parameter variations to the clean URL. Sort orders, tracking parameters and filter combinations that don’t deserve their own page canonicalise to the base URL.
  4. Give real demand its own page. If a filter matches something people search for, build a proper page for it with a self-referencing canonical.
  5. Make every other signal agree. Internal links, breadcrumbs, the XML sitemap and hreflang tags should all use canonical URLs only.
  6. Check there’s only one tag per page. View the page source and search for rel=canonical. Themes, plugins and apps sometimes each add their own.
  7. Verify in Search Console. Inspect key URLs and compare the user-declared and Google-selected canonicals. Recheck after site migrations and template changes.

Common canonical tag mistakes

Canonicalising paginated pages to page one. Page two of a category shows different products from page one, so it isn’t a duplicate. Pointing every page in a series to the first page can stop products deeper in the list being discovered. Let each page in a series use a self-referencing canonical.

Pointing canonicals at redirecting or broken URLs. A canonical that points to a URL which redirects, returns a 404 or is blocked from crawling sends a contradictory message. Always point to the final, live, indexable URL.

Letting two tools add canonicals. A theme adds one, an SEO plugin adds another, and they disagree. Search engines faced with conflicting canonicals on one page may ignore both.

Canonicalising pages that aren’t duplicates. Merging a set of different product pages into one category page, or pointing every blog post to the blog homepage, is an attempt to use the tag as a shortcut. Search engines usually ignore it, and your templates end up sending a signal nobody trusts.

Getting hreflang and canonicals tangled. On international sites, each language version should canonicalise to itself. Pointing the Hindi and English versions to the English URL tells search engines the Hindi page is just a copy, which can keep it out of results in the market it was built for.

How to tell if your canonical setup is healthy

There’s no benchmark for this, but these signals tell you canonicals are doing their job:

  • For your important pages, Search Console’s Google-selected canonical matches your user-declared canonical.
  • “Duplicate, Google chose different canonical than user” stays small and doesn’t grow after releases.
  • Parameter URLs rarely appear in search results or in your organic landing page reports.
  • Every page source shows exactly one canonical tag, with an absolute URL that returns a 200 status.
  • Your sitemap, internal links and canonicals all list the same version of each URL.

Key takeaways

  • A canonical tag tells search engines which URL is the main version of duplicate or near-duplicate content.
  • It’s a strong hint, not a command. Redirects, internal links and sitemaps must agree with it.
  • Prevent duplicates first with redirects and consistent linking, then use canonicals for the variations that must stay live.
  • Use redirects for URLs visitors don’t need, canonicals for duplicates they do, and never mix canonical with noindex.
  • Check Google’s selected canonical in Search Console, because that’s the decision that actually counts.

Frequently Asked Questions

What does a canonical tag do?

A canonical tag tells search engines which URL you consider the main version of a page when the same content is reachable at several addresses. Search engines use it to decide which URL to show in results and to combine signals such as links onto that one version. It doesn't remove the duplicate URLs or stop people visiting them.

Is a canonical tag a directive or a hint?

Google treats rel=canonical as a strong hint rather than a directive. It weighs the tag alongside other signals, such as redirects, internal links, sitemap entries and whether the pages are genuinely similar. If those signals point elsewhere, Google may choose a different canonical. You can see which URL it picked in Search Console's URL Inspection tool.

Should every page have a self-referencing canonical?

It's a sensible default. A self-referencing canonical, where a page points to its own clean URL, protects you when that page is reached through tracking parameters, different capitalisation or other variations you didn't plan for. Most modern CMS platforms and SEO plugins add one automatically, so the main job is checking it points to the correct, final URL.

Should I use a canonical tag or a 301 redirect?

Use a 301 redirect when the duplicate URL has no reason to exist for visitors, such as an old address, an HTTP version or a non-www variant. Use a canonical tag when both URLs need to keep working for people, such as filtered product lists or tracking links. Redirects are the stronger signal because they send users and crawlers to one place.

Can a canonical tag point to another domain?

Yes. A cross-domain canonical can tell search engines that a copy on another site is a duplicate of your original. It works best when the pages are near-identical. For syndicated articles, where the partner's page often looks quite different, many publishers also ask partners to add a noindex tag, because search engines may not honour the canonical.

Consulting & Strategy

Need help putting this concept into practice on your campaigns? Share your current targets and I will suggest the right approach.

Discuss your campaigns