New ChatGPT vs Google Search Volume: What OpenAI’s 20% Claim Really Means

Technical SEO

Canonical Tags Explained: Fix Duplicate Content Without Panic

How Google picks a canonical URL, why duplicate pages appear, how to set rel=canonical the right way, and what I do when Search Console says Google picked a different page.

Canonical Tags Explained: Fix Duplicate Content Without Panic

Quick Answer

A canonical tag (rel="canonical") tells Google which URL is the main version of duplicate or near-identical pages. It is a strong hint, not a rule. Put a full URL in the head of each page. Point duplicates at one live page that returns 200. Back it up with redirects, sitemap entries and internal links. Then check Google's choice in URL Inspection.

Key Takeaways

  • A canonical tag is a hint. Google weighs it together with redirects, sitemaps, internal links and HTTPS.
  • Use a self-referencing canonical with a full URL in the head of every indexable page.
  • Give each paginated page its own canonical instead of pointing the whole series at page 1.
  • Use the HTTP Link header to set canonicals for PDFs and other non-HTML files.
  • Never mix canonical with noindex, or point canonicals at 404s, redirects or the homepage.
  • URL Inspection shows the user-declared and Google-selected canonical side by side.
In this article
  1. What Canonicalization Means
  2. How Google Chooses a Canonical URL
  3. Where Duplicate URLs Come From
  4. How to Set Up Canonical Tags
  5. Common Canonical Tag Mistakes
  6. How to Check Canonical Tags in Search Console
  7. Bringing It Together
  8. Frequently asked questions

Maybe Search Console says Google is indexing a different URL from the one you wanted. Or you found the same page living at five slightly different addresses. Either way, you are dealing with canonicalization. Canonical tags are how you tell Google which version of a duplicate page is the main one. They are a strong hint, not a command. In my experience, they work best when every other signal on your site agrees with them.

Duplicate URLs are normal and rarely a penalty risk. The real costs are quieter: the wrong URL ranks, link signals get split, and reports get messy. In this guide I cover how Google picks a canonical, where duplicates come from, how to set one up correctly, and how to check whether Google agreed with you.

What Canonicalization Means

Sometimes Google finds the same or very similar content at more than one URL. It then groups those URLs into a cluster. It picks one URL from the cluster as the canonical: the main version it indexes and usually shows in search results. The others are treated as duplicates.

Google crawls the canonical most often and visits duplicates less often. Duplicates are not deleted from Google’s memory. They are folded into the canonical. Google can still show a duplicate when it suits the searcher better, like a mobile URL for someone on a phone.

Duplicate content is not against Google’s spam policies. Sorting options, tracking parameters and HTTP and HTTPS versions create duplicates on almost every site.

How Google Chooses a Canonical URL

First, Google works out the main content of each page and ignores repeated parts like headers and footers. Pages with near-identical main content are grouped. Google then picks the URL it thinks is the most complete and useful version of that group.

That choice uses many signals. The ones you control most directly are:

  • Redirects. A permanent redirect from one URL to another is a strong signal that the target should be canonical.
  • The rel="canonical" annotation. Also a strong signal. You can give it as an HTML link element or as an HTTP header.
  • Sitemap inclusion. A weak signal. Listing a URL in your sitemap suggests it is the version you prefer.
  • Internal links. The URLs you link to across your own site show which version you treat as the real one.
  • HTTPS. Google prefers HTTPS URLs over HTTP as canonical, unless something about the HTTPS version is broken.

Google says clearly that a declared canonical is a hint, not a rule. Say your canonical tag says one thing, but your redirects, sitemap and internal links say another. Google weighs them all and may pick a URL you didn’t choose. The most reliable result comes from stacking signals so they all point to the same URL. That is the main idea I’d want you to take from this guide.

If you set nothing, Google picks a canonical on its own. The tag matters most when that default guess would be the wrong page.

Where Duplicate URLs Come From

Most duplicates are created by the site itself, not by copied content. These are the usual sources.

URL Parameters

Tracking codes, session IDs and sorting options all add query strings to a URL without changing the core content. These three addresses usually show the same page:

https://example.com/shoes/
https://example.com/shoes/?utm_source=newsletter
https://example.com/shoes/?sort=price-asc

Protocol, Subdomain and Trailing Slash Versions

Your server may answer on both http:// and https://, and on both www. and the bare domain. Then every page can exist at four addresses. Trailing slashes add another layer. Google treats /services and /services/ as two different URLs everywhere except the root of the domain. Mixed capital letters, like /Services/, can add more.

The fix for these is almost always a site-wide redirect to one preferred format, backed up by a self-referencing canonical tag. When I audit a site, this is the first thing I test, because it affects every page at once.

Pagination

Paginated category pages and article archives are often handled badly. A common mistake is pointing page 2, page 3 and beyond at page 1 with a canonical tag. Google’s ecommerce guidance says not to do this. Each page in a series lists different products or posts, so each should have a canonical pointing to itself.

Google no longer uses rel="next" and rel="prev". It relies on normal <a href> links between the pages, so make sure those links exist in the HTML.

Faceted Navigation

Filters for colour, size, brand and price can create thousands of URL combinations from one category page. Many of these are near-copies of the unfiltered page. A canonical tag pointing filtered URLs to the main category helps Google combine them.

On very large stores, canonicals alone may not be enough, because Google still has to crawl a URL to see its tag. You can check with log file analysis whether filter combinations are eating crawl activity. If they are, blocking low-value filter patterns in robots.txt is usually the stronger fix for crawl waste. Keep the filter combinations people actually search for, like “black running shoes”, as indexable pages with their own canonical. See our guide to crawl budget for faceted navigation.

Device and Regional Versions

Separate mobile URLs (an m. subdomain) duplicate the desktop pages. So do regional versions in the same language, like near-identical UK and US pages. Pages translated into another language are not duplicates, as long as the main content is actually translated.

For same-language regional versions, use hreflang annotations (tags that tell Google which language and region a page is for) alongside canonicals. Then Google can show the right regional URL. Each regional page should normally point its canonical to itself, not to one global version. Our hreflang guide covers the full setup.

Syndicated Content

When another site republishes your article, the copy can compete with your original. You might expect a cross-domain canonical to solve this, and Google does support cross-domain canonicals in general. For syndication, though, Google’s current guidance is that the canonical element is not the recommended tool. Syndicated versions often differ a lot from the original page.

Instead, Google recommends that syndication partners block indexing of their copy with a noindex robots meta tag. Put that rule in your syndication agreement before the content goes out.

Print-friendly versions, AMP pages, demo or staging sites left open to crawlers, and CMS quirks can all create duplicates. Examples include WordPress attachment pages or the same product listed in two categories. Password-protect staging sites so they never compete with live pages. I see open staging sites far more often than I’d like.

How to Set Up Canonical Tags

There are two ways to declare a canonical with rel="canonical". Use an HTML link element for web pages. Use an HTTP header for files that have no HTML <head>. Google’s guide to specifying a canonical URL covers both methods in full.

Add a link element to the <head> of every duplicate page, pointing to the canonical URL. Add the same element to the canonical page itself, pointing to its own URL. This self-referencing canonical protects the page when parameters get added to it.

<head>
  <title>Women's Running Shoes</title>
  <link rel="canonical" href="https://www.example.com/shoes/womens-running/" />
</head>

That same element would sit on https://www.example.com/shoes/womens-running/?sort=price-asc and on http://example.com/shoes/womens-running. So every version points to one address.

A few rules decide whether Google uses your tag or ignores it:

  • Use full (absolute) URLs. Include the protocol and full domain. Relative paths can break when a staging copy or another hostname gets crawled.
  • Keep it in the <head>. Google only accepts the element in the head. Broken HTML, like a stray <div> or <img> placed above it, can make the head close early and push the tag into the body.
  • Use one canonical per page. Two different canonical tags on the same page make the signal unclear. Often a theme and a plugin both add one.
  • Don’t add hreflang, lang, media or type attributes to the canonical link. Google ignores annotations with these attributes for canonicalization.
  • Don’t use fragments. A canonical like /page/#section is not supported.

For separate mobile URLs, the desktop page has a canonical to itself plus an alternate link to the mobile version. The mobile page has a canonical back to the desktop URL:

<!-- On https://www.example.com/shoes/ -->
<link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.example.com/shoes/">
<link rel="canonical" href="https://www.example.com/shoes/" />

<!-- On https://m.example.com/shoes/ -->
<link rel="canonical" href="https://www.example.com/shoes/" />

If your site relies on JavaScript in the browser, put the canonical in the source HTML and don’t let scripts change it later. A canonical that differs between the raw HTML and the rendered page sends mixed signals. Our guide to how Google renders JavaScript explains why the two versions can differ.

The HTTP Header for PDFs and Other Files

PDFs, Word documents and other non-HTML files have no head section. So the canonical goes in the HTTP response header instead. It also lets you point a PDF copy at the HTML page you would rather rank.

HTTP/1.1 200 OK
Content-Type: application/pdf
Link: <https://www.example.com/downloads/price-guide.pdf>; rel="canonical"

On an Apache server, you could set this in .htaccess for a specific file:

<Files "price-guide-2026.pdf">
  Header add Link "<https://www.example.com/downloads/price-guide.pdf>; rel="canonical""
</Files>

Google supports the header method for web search results. You can use either the header or the HTML element on HTML pages. Using both on the same page adds room for error, so pick one.

Using a CMS or SEO Plugin

Most platforms handle canonicals for you. WordPress outputs self-referencing canonicals on posts and pages by default. SEO plugins like Yoast SEO and Rank Math let you change them per page. Shopify adds canonicals to product and collection pages for you.

Check the output instead of assuming. I never trust a plugin setting until I’ve seen the source. View the page source, search for rel="canonical", and confirm there is exactly one tag with the URL you expect.

Back the Tag Up With Other Signals

A canonical tag works best when the rest of your site agrees with it:

  • Redirect duplicates you don’t need. If an old URL or an HTTP version serves no purpose, a 301 redirect is stronger than a canonical tag.
  • List only canonical URLs in your sitemap. Our XML sitemap best practices guide covers what belongs in the file.
  • Link internally to the canonical version. If your menu links to /shoes but your canonical says /shoes/, you are arguing with yourself. A clean internal linking structure supports the right URL.
  • Keep HTTPS clean. Google can choose HTTP over HTTPS in some cases. For example, if the certificate is invalid, the HTTPS page loads insecure files, redirects to or through HTTP, or has a canonical pointing to HTTP.

Common Canonical Tag Mistakes

Most canonical problems come from a small set of errors. Any of these can make Google ignore your tag and choose its own canonical.

Pointing to a URL That Doesn’t Return 200

A canonical should point to a live, indexable page that returns a 200 status. A canonical aimed at a 404 page, a URL that redirects elsewhere, or a page blocked in robots.txt sends Google to a dead end. This often happens after a migration, when canonicals still use the old URL structure. Our website migration SEO checklist covers updating canonicals during a move.

Pointing Every Page to the Homepage

Some themes or badly set up plugins make the homepage the canonical for every page. The homepage is not a copy of your product or blog pages, so Google will usually ignore the tag. If it doesn’t, your inner pages could drop out of the index. Canonicals should only connect pages with basically the same content.

Clashing Signals

The canonical says URL A. The sitemap lists URL B. Internal links point to URL C. The hreflang annotations use URL D. Google then has to guess. Pick one preferred URL and use it everywhere. Canonical chains cause the same confusion, where page A points to B and B points to C. Point every duplicate straight at the final canonical.

Combining Canonical and Noindex

A canonical tag says “this page is a copy of that one, combine them.” A noindex tag says “remove this page from search.” On the same page, the two contradict each other. Google advises against using noindex to choose a canonical within a site. Noindex removes the page from search instead of passing its signals to the preferred version. Use rel="canonical" alone.

Using robots.txt or the Removals Tool to Fix Duplicates

Blocking a duplicate in robots.txt stops Google from crawling it. That also stops Google from seeing its canonical tag. A blocked URL can still be indexed without its content. The URL removal tool is no better. It hides every version of a URL from search, including the one you want.

Canonicalizing Pages That Aren’t Duplicates

Pointing a page about blue widgets at a page about red widgets merges different content, and Google will likely ignore the tag. If two pages are too similar to justify both, I’d merge them and redirect the weaker one.

How to Check Canonical Tags in Search Console

Search Console shows both the canonical you declared and the one Google actually chose. Two tools matter here.

URL Inspection

Paste a URL into the inspection bar at the top of Search Console. In the indexed result, open the Page indexing section and look for two fields:

  • User-declared canonical: the canonical your page declares, from the link element, HTTP header or sitemap.
  • Google-selected canonical: the URL Google chose to index. If it matches the inspected URL, Google treats that page as the canonical.

The live test shows your declared canonical but not Google’s choice. Canonical selection happens during indexing, so the live test can’t predict it. Use the indexed result to see where things stand.

The Page Indexing Report

Open Indexing > Pages and look at the reasons pages are not indexed. Three statuses relate to canonicals:

  • Alternate page with proper canonical tag: the page points to a canonical and Google agreed. Nothing to fix.
  • Duplicate without user-selected canonical: Google sees the page as a duplicate and picked a canonical, but the page doesn’t declare one. Inspect a few URLs. If Google’s choice is fine, leave them. If not, add a canonical.
  • Duplicate, Google chose different canonical than user: you declared a canonical, but Google picked a different URL. This is the one that needs attention, and it’s the one I look at first.

The full list of statuses is in Google’s Page indexing report documentation.

Fixing “Duplicate, Google Chose Different Canonical Than User”

Click into the status, inspect a sample of URLs, and work through these checks:

  1. Compare the two URLs in a browser. If your declared canonical shows different content from the inspected page, Google won’t treat them as duplicates. Fix the content or the tag.
  2. Check your declared canonical’s status. It should return 200, be indexable and not redirect.
  3. Look for clashing signals. Check whether your sitemap, internal links, hreflang tags and redirects all use the same URL you declared.
  4. Check the HTTPS version. Certificate problems or mixed content can push Google towards a different version.
  5. Ask whether Google is right. Sometimes Google picks the URL with more internal links or a cleaner structure. If its choice works for you, match your canonical to it.

After fixing the cause, request indexing for a few key URLs and use the validation option in the report. Expect it to take time, because Google has to crawl the affected pages again and reprocess the group.

Bringing It Together

Canonical tags are a simple element with a lot of influence. Use self-referencing canonicals on every indexable page. Point duplicates at one live URL. Back that choice up with redirects, a clean sitemap and consistent internal links. When Search Console says Google chose a different canonical, I treat it as a sign that my signals disagree. Then I find and fix the clash.

A good next step is to inspect your ten most important URLs and confirm the Google-selected canonical matches each one. For more on how Google crawls, indexes and ranks pages, read how Google Search works.

Frequently Asked Questions

What is the difference between a canonical tag and a 301 redirect?

A 301 redirect sends users and Googlebot to another URL, so the duplicate can no longer be seen. A canonical tag keeps both URLs working for visitors but tells Google which one to index. Use a redirect when the duplicate has no reason to exist. Use a canonical when it needs to stay reachable, like a sorted or tracked URL.

Does every page need a canonical tag?

It isn't required, but I add a self-referencing canonical to every indexable page. It tells Google the clean URL is the preferred one, even when parameters or tracking codes get added to it. Most CMS platforms and SEO plugins add one for you.

Does Google always follow canonical tags?

No. Google treats rel=canonical as a strong hint, not an order. It can pick a different URL if the pages aren't really duplicates, the canonical target is broken, or other signals like internal links and sitemaps point somewhere else.

Can I use a canonical tag to point to another domain?

Yes. Google supports cross-domain canonicals for duplicate pages, for example when you run the same content on two of your own sites. For articles republished by syndication partners, Google instead recommends that the partner adds a noindex tag to its copy.

Is duplicate content a Google penalty?

Normal duplicate content, like parameter URLs or HTTP and HTTPS versions, is not against Google's spam policies. Google just groups the URLs and shows one. The risk is the wrong URL ranking and signals being split, not a penalty.

How do I fix "Duplicate without user-selected canonical"?

First inspect a few affected URLs to see which canonical Google chose. If its choice is the page you want indexed, you don't need to do anything. If not, add a rel=canonical tag pointing to your preferred URL. Or make the page's content clearly different if it isn't really a duplicate.

How long does it take Google to update a canonical?

There is no fixed time. Google has to crawl the affected pages again and reprocess the group. That can take days for pages crawled often and longer for others. Requesting indexing for key URLs in URL Inspection can help the important ones get picked up sooner.

Should paginated pages have a canonical to page 1?

No. Each page in a paginated series shows different items, so Google advises giving each page a canonical pointing to itself. Make sure the pages link to each other with normal HTML links, because Google no longer uses rel=next and rel=prev.

Get the Next Guide in Your Inbox

Google updates, AI search changes and practical SEO guides. We email you when a new article is published, nothing else.

One email when we publish something new. No spam, unsubscribe in one click. Privacy

Written by Lovepreet Singh Digital Marketing Manager @ Softtrix
  • 12+ years in SEO
  • 331 articles
  • Punjab, India

Lovepreet Singh has been working in SEO for the last 12 years. He started as an SEO analyst, checking rankings and fixing on-page issues, and today he is Digital Marketing Manager at Softtrix Tech Solutions, looking after search and growth for client websites, from online stores to local service businesses.

  • AI Search & AEO
  • Technical SEO
  • Local SEO
  • Google Business Profile

Keep Reading