/ โ† Site Audit Fixes / Alternate page with canonical
In this guide
  1. What the status actually means
  2. Which URLs belong in this report
  3. How to see the canonical a page really sends
  4. Why a page ends up with the wrong canonical
  5. Fixing the tag on common platforms
  6. A worked example
  7. The fix, step by step
  8. Edge cases worth knowing
  9. Keeping it fixed
  10. Questions and answers

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:

StatusWhat happenedUsually needs work?
Alternate page with proper canonical tagThe page names another URL as canonical and Google agreesOnly if the page should be indexed on its own
Duplicate, Google chose different canonical than userThe page names a canonical, but Google picked another URLOften, because your signals disagree
Duplicate without user-selected canonicalNo canonical declared, and Google treats the page as a copy of anotherSometimes; add clear canonicals

For a wider view of every status in the report, see Search Console errors explained.

๐Ÿ’ก A growing count in this report is not a sign of trouble on its own. A shop that adds filters or a site that adds UTM-tagged links will see the number rise while everything works as intended.

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:

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.

โš ๏ธ Language and country versions linked with hreflang must each carry a canonical pointing to themselves. If your French page canonicalises to the English page, the French page drops out of the index and the hreflang set breaks. The hreflang and canonical conflict guide covers this case in full.

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

CauseWhat you seeWhere to fix it
Template prints the parent or home page addressMany pages share one canonical, often / or a folderHead template or theme file
Hard-coded canonical copied between pagesA duplicated page still points at the page it was copied fromThe page settings in your CMS or SEO plugin
Two plugins both print a canonicalTwo canonical tags in the source, with different valuesTurn 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 tagCanonical points at staging.example.com or an old hostSite address setting or environment variable
Wrong protocol, host or trailing slashCanonical points at http, non-www or a slash variant that redirectsSite address setting, then server rules
Near-duplicate contentTag is right, but the page is too similar to another to stand aloneThe 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:

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

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.

Questions and answers

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.

Find pages pointing the wrong canonical

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 โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Site Audit Fixes  ·  Fix canonical tags  ·  Fix canonical conflicts  ·  Fix duplicate content  ·  Fix crawled, currently not indexed  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.