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 Pages, Staging Sites and Other Leftovers
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.
The HTML Link Element
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,mediaortypeattributes to the canonical link. Google ignores annotations with these attributes for canonicalization. - Don’t use fragments. A canonical like
/page/#sectionis 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
/shoesbut 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:
- 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.
- Check your declared canonical’s status. It should return 200, be indexable and not redirect.
- Look for clashing signals. Check whether your sitemap, internal links, hreflang tags and redirects all use the same URL you declared.
- Check the HTTPS version. Certificate problems or mixed content can push Google towards a different version.
- 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.



