Alternate Page with Proper Canonical Tag: What It Means and How to Fix It
Alternate page with proper canonical tag is one of the reasons Search Console gives for a page not being indexed. It means the page told Google that another URL is the main version, Google agreed, and so only the other URL is indexed. For filtered listings, tracking links and print views this is exactly what you want, and nothing needs doing. The trouble starts when a page with content of its own lands in the report because a template, plugin or theme prints the wrong canonical address. This guide shows you how to sort the expected entries from the real problems, how to read the canonical a page actually sends, how to correct it at the source on common platforms, and how to line up your links and sitemap so Google keeps the URL you chose.
What the status actually means
When Google finds several URLs that show the same or almost the same content, it groups them and picks one to index. That chosen URL is the canonical. The others are alternates, and Google keeps them out of search results so people do not see the same page three times.
A page lands in Alternate page with proper canonical tag when three things are true at once: Google crawled it, the page declares a canonical pointing to a different URL, and Google accepted that choice. The word proper is the key. It tells you Google found nothing wrong with the instruction. Google is not complaining; it is reporting that it followed you.
That makes this status different from its two neighbours in the Page indexing report:
| Status | What happened | Usually needs work? |
|---|---|---|
| Alternate page with proper canonical tag | The page names another URL as canonical and Google agrees | Only if the page should be indexed on its own |
| Duplicate, Google chose different canonical than user | The page names a canonical, but Google picked another URL | Often, because your signals disagree |
| Duplicate without user-selected canonical | No canonical declared, and Google treats the page as a copy of another | Sometimes; add clear canonicals |
For a wider view of every status in the report, see Search Console errors explained.
Which URLs belong in this report
Before changing anything, sort the listed URLs into groups. Export the list from the report and look at the patterns rather than the individual addresses. Most sites find that the bulk of entries fall into a few types that are meant to be alternates:
- Parameter URLs such as
?utm_source=newsletter,?ref=partner,?sort=priceor?view=grid, which show the same content as the clean URL. - Filtered views such as
/shoes?colour=redthat a shop has chosen not to index. - Print and share versions such as
/article/print/or?amp=1. - AMP pages that point back to the standard page.
- Separate mobile URLs on an m-dot site, where the mobile page canonicalises to the desktop page.
- Protocol and host variants such as the http or non-www version, if those are served rather than redirected.
Entries that deserve a closer look are the ones with content of their own: blog posts, guides, product pages, service pages, location pages and language versions. If one of those is here, either its canonical is wrong or the page is so close to another page that you have told Google, perhaps by accident, that they are the same thing.
How to see the canonical a page really sends
Start in Search Console. Paste a URL you want indexed into URL Inspection and open the Page indexing section. It shows two fields side by side: User-declared canonical, which is what your page says, and Google-selected canonical, which is what Google chose. On this status the two match, and both point somewhere other than the inspected URL.
Next, check the live page yourself, because the inspection result reflects the last crawl. From a terminal:
curl -s https://example.com/guides/running-shoes | grep -io '<link[^>]*canonical[^>]*>'
A correct result for a page that should be indexed looks like this:
<link rel="canonical" href="https://example.com/guides/running-shoes">
A canonical can also be sent as an HTTP header, which is common for PDFs and sometimes added by a CDN. Check the headers too:
curl -sI https://example.com/guides/running-shoes | grep -i '^link:'
# Link: <https://example.com/guides/>; rel="canonical"
If the HTML and the header disagree, Google has to guess, so remove one. Then look at the rendered page. Open Chrome DevTools, go to the Elements panel and search for canonical. If the raw HTML says one thing and the rendered DOM says another, a script is rewriting the tag after load. Google can pick up either value, so the safest fix is to put the correct canonical in the server HTML and stop the script changing it.
Check the whole site at once
One page tells you little about a template. Run a crawl with our site audit or any crawler and list every URL whose canonical does not match its own address. Group the results by folder or template. A pattern such as every post in /guides/ pointing to /guides/ is a template bug, and one fix clears the lot.
Why a page ends up with the wrong canonical
| Cause | What you see | Where to fix it |
|---|---|---|
| Template prints the parent or home page address | Many pages share one canonical, often / or a folder | Head template or theme file |
| Hard-coded canonical copied between pages | A duplicated page still points at the page it was copied from | The page settings in your CMS or SEO plugin |
| Two plugins both print a canonical | Two canonical tags in the source, with different values | Turn off canonical output in one plugin |
| Paginated pages pointed at page 1 | /blog/page/3/ canonicalises to /blog/ | Theme or plugin pagination settings |
| Staging or old domain left in the tag | Canonical points at staging.example.com or an old host | Site address setting or environment variable |
| Wrong protocol, host or trailing slash | Canonical points at http, non-www or a slash variant that redirects | Site address setting, then server rules |
| Near-duplicate content | Tag is right, but the page is too similar to another to stand alone | The content itself |
Trailing slash and host mismatches are easy to miss because the pages look fine in a browser. If your canonical points to https://example.com/page while the live URL is https://www.example.com/page/, you are naming a URL that redirects. The trailing slash guide and the www canonicalisation guide walk through settling on one form.
Fixing the tag on common platforms
WordPress
Core WordPress prints a self-referencing canonical on single posts and pages. SEO plugins replace it with their own. In Yoast SEO and Rank Math, open the post, go to the Advanced tab of the plugin panel and look at the Canonical URL field. It should be empty, which means use this page, unless you genuinely want another URL to be the main one. If many posts are affected, the field was probably filled in bulk by an import or a duplicate-post tool. Also confirm that only one plugin outputs canonicals, and that Settings, General shows the correct https site address.
Shopify
Shopify themes normally print the canonical with a Liquid object in theme.liquid:
<link rel="canonical" href="{{ canonical_url }}">
Problems come from themes or apps that replace canonical_url with a fixed address, or from product URLs reached through a collection, such as /collections/sale/products/trainer, which Shopify canonicalises to /products/trainer. That second case is expected and should stay in the report.
Next.js
In the App Router, set metadataBase in the root layout and a per-page canonical in each route's metadata:
// app/guides/[slug]/page.tsx
export async function generateMetadata({ params }) {
const { slug } = await params;
return { alternates: { canonical: `/guides/${slug}` } };
}
A common mistake is setting alternates.canonical once in the root layout, which every child route then inherits, so every page claims to be the home page.
Static and hand-built sites
Search the head include for rel="canonical" and make sure the value is built from the page's own path, not typed in once. For the general rules, the canonical tags guide covers syntax and placement.
A worked example
A small outdoor shop exports 1,240 URLs from this report. Grouping them by pattern gives four buckets:
- 1,100 filter and sort URLs such as
/shoes?colour=redand/shoes?sort=price, all pointing to/shoes. Correct; leave them. - 95 collection paths to products such as
/collections/sale/products/trail-boot, pointing to/products/trail-boot. Correct; leave them. - 27 URLs with
?utm_tracking parameters from an email campaign. Correct, but the menu was linking to some of them. - 18 guides in
/guides/, all pointing to/guides/. Wrong.
URL Inspection on one guide shows the user-declared canonical as https://example.com/guides/. The head template builds the canonical from the section path rather than the page path. After the template is changed to print https://example.com/guides/running-shoes for that page, a curl check confirms the new tag, and the 18 guides are submitted through URL Inspection. Within three weeks the guides show as indexed. The tracking links in the menu are replaced with clean URLs so Google stops finding them.
The fix, step by step
Step 1
Export and group the listed URLs
Open Indexing, then Pages in Search Console, click Alternate page with proper canonical tag and export the list. Sort it into groups by pattern: parameter URLs, filters, print or AMP versions, collection paths and everything else. Mark the groups that are meant to be alternates and set them aside. You are left with a short list of pages that carry content of their own. That short list is the only part of the report that needs work.
Step 2
Inspect a page that should be indexed
Paste one URL from your short list into URL Inspection and open the Page indexing details. Note the user-declared canonical and the Google-selected canonical. If both point at another address, your page is sending that instruction. Write down the wrong value, because its shape usually reveals the cause: the home page, a parent folder, a staging host, an http address or a page the content was copied from.
Step 3
Check the live HTML and headers
Run curl -s on the URL and search the output for rel="canonical", then run curl -sI and look for a Link: header. Open the page in Chrome DevTools and search the Elements panel for canonical to see the rendered value. Confirm there is exactly one canonical, that it sits in the head, and that the HTML, header and rendered DOM all agree. Note any mismatch for the next step.
Step 4
Fix the canonical in the template
Change the source so each page prints its own full https address as the canonical. In WordPress clear the plugin Canonical URL field or fix the bulk setting; in Shopify restore {{ canonical_url }} in theme.liquid; in Next.js set alternates.canonical per route rather than in the root layout. Fix the template once rather than single pages. Purge any page cache, then repeat the curl check to confirm the new value.
Step 5
Remove duplicate canonical sources
If two plugins, a theme and a plugin, or a CDN header all send a canonical, switch off all but one. Search the page source for the word canonical and count the results; there should be one. Check that the CDN or server is not adding a Link header with rel="canonical" to HTML pages. A single, consistent source stops Google from having to choose between conflicting instructions.
Step 6
Line up links, sitemap and redirects
Make every internal link, the XML sitemap and any hreflang tags point at the same URL you call canonical, with the same protocol, host and trailing slash. Replace links to tracking or parameter URLs in menus and templates with clean addresses. Make sure the canonical URL itself returns 200 and does not redirect. Crawl the site afterwards and confirm no internal link points at a URL that canonicalises elsewhere.
Step 7
Clean the XML sitemap
Regenerate the sitemap so it lists only URLs that return 200, carry no noindex and declare themselves as canonical. Remove parameter URLs, print versions and anything that redirects. Fetch the sitemap with curl to confirm the new version is live, then resubmit it under Sitemaps in Search Console. A clean sitemap gives Google one consistent list of the addresses you want indexed, which strengthens the canonical you declared.
Step 8
Merge pages that are true duplicates
If a page has a correct self-referencing canonical but Google still treats it as an alternate, compare it with the page it is grouped with. When the two cover the same topic with similar text, merge them into one stronger page and add a 301 redirect from the weaker URL. When they should both exist, rewrite one so it serves a clearly different purpose, with its own heading, examples and detail.
Step 9
Request indexing and monitor
Run a live test in URL Inspection to confirm Google now sees the self-referencing canonical, then request indexing for the most important pages. Do not request the same URL repeatedly. Check the Page indexing report over the following two to four weeks; fixed pages should move to indexed as Google recrawls them. Schedule a monthly crawl that flags any page whose canonical points away from itself.
Edge cases worth knowing
- A canonical is a hint, not a command. Google weighs it against redirects, internal links, sitemaps and content similarity. That is why fixing the tag alone sometimes leaves a page in the duplicate statuses instead.
- Pagination. Page 2 onwards of a listing should canonicalise to itself. Pointing them at page 1 can stop Google reaching the items linked only from deeper pages.
- Cross-domain canonicals. If you syndicate articles to a partner site, the copy there may canonicalise to your original. The partner's URL will sit in their report, not yours.
- Noindex plus canonical. Avoid putting
noindexon a page that also canonicalises elsewhere. The signals conflict, and Google may carry the noindex over to the canonical. - Product variants. Whether size and colour variants should be separate pages depends on search demand. The product variants guide helps you decide.
Keeping it fixed
Canonical bugs usually arrive with a theme update, a new plugin, a migration or a developer copying a page. Add a canonical check to your routine after any of those changes. A monthly crawl that flags pages whose canonical differs from their own URL catches most regressions before Google does.
Keep your sitemap limited to canonical URLs that return 200, and keep internal links pointing to the same versions. When the sitemap, the menu and the tag all name one address, Google rarely overrides you. If the sitemap and canonicals drift apart, the sitemap mismatch guide shows how to reconcile them. Finally, when two pages truly cover the same thing, merge them and redirect the weaker one; see the duplicate content guide.
1. Is alternate page with proper canonical tag an error?
No, it is not an error. It is Search Console reporting that a page named another URL as its main version and Google agreed, so only that other URL is indexed. For parameter URLs, filtered views, tracking links, AMP pages and print versions this is the intended result. It only needs action when a page with its own content appears in the list, which usually means a template, plugin or copied setting is printing the wrong canonical address. Check a sample of the listed URLs and act only on pages that should appear in Google on their own.
2. How do I fix alternate page with proper canonical tag?
You fix it by making the page declare itself as canonical, but only for pages that should be indexed. Use URL Inspection to see the user-declared canonical, then check the live HTML with curl or DevTools. Correct the template, theme or SEO plugin setting so each page prints its own full https address. Remove any second source of canonical tags, update internal links and the sitemap to the same address, and request indexing. Pages that are true duplicates are better merged and redirected than given a separate canonical.
3. Should I remove the canonical tags to clear this report?
No, removing canonical tags from parameter and filter URLs is a mistake. Without them Google has to work out the main version on its own, and the URLs often move to Duplicate without user-selected canonical, or worse, get indexed as thin copies that compete with your real pages. The report is not a score to bring down to zero. Leave correct canonicals in place and concentrate on the few pages that carry their own content but point somewhere else by mistake.
4. How long does it take for a fixed page to be indexed?
It usually takes from a few days to a few weeks after Google recrawls the page. Requesting indexing through URL Inspection can speed up the first recrawl of an important page, but the report itself updates on Google's schedule. Pages that are well linked from other indexed pages tend to be picked up sooner. If a fixed page is still listed after a month, run a live test to confirm the new canonical is being served, and check that your internal links and sitemap point to the same address.
5. What is the difference between this and Google chose different canonical than user?
The difference is whether Google agreed with you. Alternate page with proper canonical tag means your page pointed to another URL and Google accepted it. Duplicate, Google chose different canonical than user means your page declared a canonical, often itself, but Google picked a different URL anyway, usually because the content is very similar to another page or because links, redirects and sitemaps send stronger signals elsewhere. The first is often fine, while the second nearly always means your signals are inconsistent.
6. Does Shopify cause alternate page with proper canonical tag?
Yes, Shopify sites usually have many entries here, and almost all of them are expected. Products can be reached through collection paths such as collections, then sale, then products, then the item, and Shopify canonicalises those to the plain products address. Variant and sort parameters are treated the same way. Act only if a product, collection or blog post points at the wrong URL, which normally comes from a theme or app that replaced the standard canonical_url object in the theme with a fixed address.
7. Can a page with a correct canonical still appear in this report?
Yes, it can for a while, because the report reflects the last crawl rather than the live page. After a fix, entries stay listed until Google recrawls them. A page can also stay grouped with another if Google sees it as a duplicate, even when the tag points at itself, but then it normally moves to the Google chose different canonical status. If a page with a correct tag stays here for weeks, check for a second canonical in a header, a script rewriting the tag, or a cached old version.
Our site audit crawls your pages and lists every URL whose canonical points away from itself, grouped by template, so you can see in one view which entries are expected and which need a fix.
Open Site Audit Fixes โ