Duplicate without user-selected canonical
Where you see it: Search Console → Indexing → Pages → Why pages aren’t indexed
Google found this URL’s content at another address too, and this URL did not say which one is the original, so Google picked the other one and left this one out of search. Nothing is broken: the content is indexed, under the URL Google chose. It needs work only when Google chose an address you don’t want people landing on, or when the duplicate shouldn’t exist at all.
Fix it only if Google picked the wrong URL.
Open the listed URL in URL Inspection and read the Google-selected canonical. If that is the page you want in results, leave the group alone. If Google chose an http address, a tag archive or a tracking-parameter link, give the duplicates a canonical or a redirect.
Check the URL Search Console listed
Paste the URL exactly as Search Console lists it. The checker fetches it like a crawler and shows every canonical it declares, in the HTML and in the HTTP Link header, along with the status of the canonical target.
Canonical report
Run a check to inspect canonical tags and robots directives.
Reading the result
- No canonical URL and no Link header canonical: nothing on this URL tells Google which version you prefer. That is this status, word for word.
- Two or more canonical URLs that disagree: a theme and a plugin each print one, and Google can discard both, which leaves the URL unclaimed again.
- One canonical naming this URL or another one: the page now declares a choice. After a recrawl expect it indexed, or under Alternate page with proper canonical tag.
The same tool with its full guide: Canonical Checker
Why it happens on WordPress
The status needs two things: the same content at more than one URL, and no canonical on the URL Search Console lists. WordPress core prints a canonical only on single posts, pages and attachment pages. Everything else is up to your SEO plugin, which is why archives fill this list on most WordPress sites.
Archives on a site without an SEO plugin
Category, tag, author and date archives, the blog page when it lists your latest posts, and page 2 onwards of each get no canonical from core. A tag holding one or two posts repeats them almost word for word, so Google files the tag as a copy of the post.
Parameter versions of those archives
WooCommerce shop pages sorted with ?orderby=, archives opened from a newsletter link with ?utm_source=, and internal search results under ?s= all answer 200 with content Google has already seen. With no canonical on the archive, each variant is a separate unclaimed copy.
Protocol, www and trailing-slash variants
When your host answers on http:// or without www instead of redirecting, each archive exists two or four times over. Single posts get away with it because their core canonical is built from your Site Address; archives have nothing to fall back on.
PDFs in the media library
A downloadable PDF of a post has no HTML head, so the only way it can name a canonical is an HTTP Link header, and WordPress never sends one.
A canonical printed where Google stops reading
Google stops reading the head at the first element that doesn’t belong there, such as an iframe a plugin injects near the top. A canonical printed after it counts as no tag.
A staging copy on a subdomain
With a Domain property, staging.example.com reports into the same table as your live site and duplicates every page. Password-protect it.
How to fix it
Work by pattern, not URL by URL. Two hundred tag archives need one setting, not two hundred edits.
1. Group the example URLs, then inspect one per group
Sort the examples into tag archives, ?orderby= links, http addresses, PDFs and staging. Paste one of each into the URL Inspection bar: User-declared canonical will read None, and Google-selected canonical shows the winner. If the winner is the address you want visitors on, that group is finished.
2. Decide what each group should be
Every group gets one of four answers.
- It shouldn’t exist, like an http address or a retired copy of a post: 301 redirect it to the right URL.
- It is a variant of a page you want indexed, like a tracking parameter: a canonical naming the main URL. Sort and filter URLs you never want crawled, such as ?orderby=, may take a Disallow instead.
- It is a page in its own right, like page 2 of an archive: a canonical naming itself, so it is no longer unclaimed.
- It helps visitors but not searchers, like a one-post tag: noindex it, or stop creating it. Google advises against noindex as a way to choose between duplicates, so keep it for pages that should never rank.
3. Let an SEO plugin claim your archives
Yoast SEO, Rank Math, SEOPress and All in One SEO print a self-referencing canonical on archives as well as posts, so most unclaimed duplicates become declared ones once one is active. Then switch thin archives out of search:
- Yoast SEO: Settings → Categories & tags → Tags, and turn off Show tags in search results.
- Rank Math: Titles & Meta → Tags, and set the robots meta to No Index.
4. Name a different canonical on one post, when you mean it
Only for a post that copies another. In Yoast it sits in the post’s Yoast SEO box under Advanced; in Rank Math, in the editor sidebar’s Advanced tab. Leave the field empty everywhere else: empty means the post names itself.
5. Redirect the versions that shouldn’t answer
Check Settings → General first: WordPress Address and Site Address must both use the exact version you want, such as https://www.example.com. Every other protocol and host should reach it in one 301 hop, a rule that lives at your host, CDN or .htaccess.
6. Make every other signal agree
A canonical is a hint that Google weighs against redirects, sitemaps and links. Link internally to the canonical address, list only canonical addresses in your sitemap, and keep the target answering 200.
Three canonical statuses that sound alike
Search Console lists three canonical statuses in the same table, and fixing this one often moves URLs into the other two. That is progress: it means Google read your tag.
| Status | What the URL declared | What Google did | Act? |
|---|---|---|---|
| Duplicate without user-selected canonical | No canonical | Indexed another URL from the group | Only if Google picked the wrong URL |
| Alternate page with proper canonical tag | A canonical naming another URL | Agreed and indexed that URL | Usually not |
| Duplicate, Google chose different canonical than user | A canonical | Indexed a different URL anyway | Yes, if your choice was the right one |
Check the fix in Search Console
The live test in URL Inspection doesn’t check duplicates, so it can’t confirm this fix by itself. Use it to see that your change is live.
- Click Test live URL for one address per group, open View tested page and search the HTML for rel="canonical": exactly one, naming your choice.
- Click Validate fix only if every group now has a canonical or a redirect. Where you left Google’s choice standing, those URLs keep the status and validation would fail, so skip it; the report catches up as Google recrawls.
- Google’s help gives most validations up to about two weeks; if one fails, See details names a URL that still has the status.
Can RankHive fix this?
For posts and pages, yes; for the archives and files that make up most of this list on WordPress, no. RankHive can run URL Inspection on your pages to see which URL Google chose before proposing a fix.
What it writes, once you approve
- A canonical URL on a post or page, saved in the canonical field of Yoast SEO, Rank Math or SEOPress.
- A 301 redirect from a retired duplicate post to the one you keep, served by the RankHive plugin.
- Internal links inside your posts, repointed at the canonical address.
What it can’t do here
- Set a canonical or noindex on category, tag, author or date archives, or noindex anything at all.
- Add the http to https or www redirect, which belongs to your host or CDN.
- Send a canonical header for PDFs or other files.
- Write a canonical that All in One SEO prints, or one on a site with no SEO plugin.
- Change WooCommerce product pages.
Every change is drafted next to the current value and waits for your approval. Each one written is logged in the Change Log, with Revert.
Check the rest of your site while you’re here
The free site check reads your public pages for titles, meta descriptions, headings, canonical tags and schema, and shows what needs fixing. If you sign up, RankHive reads your Google Search Console data every week, drafts the fixes, and writes the ones you approve to WordPress. Nothing changes on your site until you say yes.
Related issues
- Alternate page with proper canonical tagLeave it alone, unless a page you want in Google is on the list.
- Duplicate, Google chose different canonical than userAct if your choice was the right one; otherwise accept Google’s.
- URL Inspection toolNothing to fix: it’s the tool you diagnose and confirm fixes with.
Common questions
Is “Duplicate without user-selected canonical” bad for SEO?
Not by itself. The content is in Google’s index under the URL Google chose. It costs you only when that URL is the wrong one, an http address or an archive for example, because that is the version searchers then see.
Why is my homepage listed as a duplicate?
Usually one of its variants is: http://, a version without www, or a link carrying ?utm_source=. If URL Inspection shows your real address as the Google-selected canonical, there is nothing to fix; if it shows a variant, redirect the variant.
Should every page have a canonical tag?
Yes, naming itself, and every major SEO plugin adds that for you. Only a page that copies another should name a different URL.
Can I block the duplicates in robots.txt instead?
Not for duplicates you want folded into the original: Google can’t read a blocked URL to merge it, and may index it without its content. Use a canonical or a redirect there. A Disallow suits only sort and filter URLs you never want crawled.
Read next
Sources
Checked against these pages on .