Search Console reports Duplicate, Google chose different canonical than user when a page declares itself (or another URL) as canonical, but Google decided a different URL in the same duplicate group is the better one to index. The page in the report is not indexed; Google's pick is.
rel="canonical" is a strong hint, not a directive. Google weighs it with redirects, internal links, sitemaps, HTTPS and how similar the pages are. When those signals disagree with the tag, the tag loses.
Shows status, redirects, the canonical tag, meta robots, X-Robots-Tag and robots.txt rules for Googlebot. Free, no signup.
Run URL Inspection on a URL from the report. Under Page indexing it shows User-declared canonical and Google-selected canonical. Inspect the Google-selected URL too and compare the two pages side by side.
If Google's pick is fine, for example the same product without a tracking parameter, there is nothing to fix. The status is a notice. Only act when Google picked a URL you don't want in search: the wrong language, an old HTTP URL, a parameter or print version, or a different page altogether.
| Signal | What to check |
|---|---|
| Your canonical target | The URL in the tag should answer 200, be indexable and not redirect. A canonical pointing to a 404, a redirect, a noindex page or a URL blocked in robots.txt is usually ignored. |
| The tag itself | One canonical per page, in the <head> of the HTML Google fetches. Two different canonicals, a tag in the body, or one added or changed by JavaScript can be ignored. A canonical in a Link HTTP header counts too and can disagree with the HTML. |
| Internal links | Menus, breadcrumbs and product grids that link to the other version (with a trailing slash, a parameter, http:// or another host) tell Google that version is the main one. |
| Sitemap | Your sitemap should list only canonical URLs. A sitemap that lists the duplicate is a vote for it. |
| Redirects and protocol | Google prefers HTTPS and the target of redirects. If http:// or the non-www host still answers 200 instead of 301, both versions compete. |
| Content | If the two pages are near duplicates, Google groups them and picks one. Thin category pages, product variants that differ only in colour, and location pages with swapped city names end up here. If the page is meant to rank on its own, make it different enough that it is not a duplicate. |
| hreflang | Language versions should each be self-canonical and list each other in hreflang. A canonical from the German page to the English page tells Google they are the same page. |
The noindex checker shows the status, redirect chain and canonical tag of a URL in one go; run it on both your URL and Google's pick. The X-Robots-Tag checker shows a canonical sent in the Link header on every redirect hop.
Make every signal point at the URL you want: the canonical tag on all duplicates, 301 redirects where a duplicate does not need to exist, internal links to the canonical URL only, and the canonical URL only in the sitemap. Google's own guidance is to not use noindex or robots.txt to choose a canonical inside one site. A blocked duplicate can't pass its signals on, and a noindex can drop the page from search altogether.
Run Test live URL on the page you want indexed, then Request indexing for a handful of URLs. For many, click Validate fix on the report row. Google has to recrawl both versions before it changes its choice, so expect days to weeks, and longer for URLs it rarely crawls.
A canonical tag can flip with a theme update, a plugin setting or a template change, and Search Console reports it days later. NoindexWatch checks your URLs once a day for canonicals that point elsewhere, noindex in meta tags and headers, robots.txt blocks and error status codes, and emails you when something changes. The free plan covers 1 URL, no card.
Sources: Google Search Central documentation on canonicalization, consolidating duplicate URLs, URL Inspection and the Page indexing report. Related: Excluded by 'noindex' tag · Blocked by robots.txt.