Alternate page with proper canonical tag

Where you see it: Search Console → Indexing → Pages → Why pages aren’t indexed

The URL in the list names a different page in its canonical tag, Google accepted that, and it indexed the other page instead. On a WordPress site the list fills up with comment-reply links, campaign links and AMP versions, and those are fine where they are.

Leave it alone, unless a page you want in Google is on the list.

Scan the examples for URLs that should rank on their own: page 2 of your blog, a translated post, the https version of a page. Any of those means a canonical points the wrong way.

Check a URL nowCan RankHive fix it? Nothing to fix

Check the URL Search Console listed

Paste one of the example URLs. The checker shows the canonical that page declares, compares it with the address you pasted, and requests the target to see what it answers. Here the question is whether the tag names the right page.

Canonical report

Run a check to inspect canonical tags and robots directives.

Reading the result

  • Warning, the canonical points to a different URL on the same site: expected on ?utm_source=, ?replytocom= and ?amp=1 links whose target is the clean post.
  • The same warning on /page/2/ or on a translated post: the tag is wrong. Those pages list different posts or speak another language, so each should name itself.
  • A www and non-www mismatch, or a canonical starting with http:// on an https page: WordPress is building canonicals from an outdated address in Settings → General.
  • Canonical URL status reading “HTTP 200 after redirecting to …”, or a 4xx: the tag names an address that moved or no longer exists, so Google may ignore it and choose for itself. Point it at the final address.

The same tool with its full guide: Canonical Checker

Why it happens on WordPress

WordPress produces this status by design. Core gives every single post and page a canonical built from its permalink, which drops any query string, so each parameter version of a post points home. The first two causes below are harmless; the rest hide real pages.

Reply links and newsletter links pointing home

A post with threaded comments gets crawled as /my-post/?replytocom=123, and an email campaign sends readers to /my-post/?utm_source=newsletter. Both answer 200 with the post and carry its canonical, so Google files them here.

AMP copies made by the AMP plugin

Google’s help uses AMP pages as its example of an alternate. In Reader and Transitional modes, the AMP plugin for WordPress serves each post again at ?amp=1 or /amp/, with a canonical back to the original. If you have turned AMP off since, 301 those addresses to the post.

Page 2 of an archive naming page 1

If /blog/page/2/ shows up here, its canonical names the first page. Google’s pagination guidance says each page in a series should name itself, because it lists different posts. Yoast SEO does that by default. All in One SEO’s No Pagination for Canonical URLs setting strips the page number when switched on, and some older themes hard-code the same.

Every canonical built from an old http address

Canonicals are built from Settings → General. If Site Address still reads http://example.com after a move to HTTPS, each https page names its http twin and your https URLs land on this list. Google prefers HTTPS, except when the HTTPS page itself points its canonical at HTTP.

A translation that names the original

A French post whose canonical names the English one tells Google the French page is a copy. Google’s guidance is that a translated page names itself, or a page in the same language, and links its language versions with hreflang.

A custom canonical nobody remembers setting

A Canonical URL field filled in on one post during a merge or a test keeps pointing elsewhere long after the plan changed. It prints as the only canonical, so the page source looks normal.

How to fix it

Most of the work is reading the list, not changing anything. Find the pages that belong in search first, then fix only those groups.

  1. 1. Pick out the URLs that should rank

    Open the status in Indexing → Pages and scan the URL column. Parameter links and AMP copies belong here; skip past them. Clean addresses of real posts, numbered archive pages, https URLs and translations don’t, and those are the ones to follow up.

  2. 2. Inspect one of the URLs that should rank

    Paste it into URL Inspection and expand Page indexing. Both canonicals will match, since Google agreed with your tag; the question is whether that target is the page you want indexed.

  3. 3. Empty a wrong per-post canonical

    If the post’s own Canonical URL field holds the wrong address, clear it. The plugin then falls back to the post’s permalink.

    • Yoast SEO: the Yoast SEO sidebar or box in the editor → Advanced → Canonical URL.
    • Rank Math: the Rank Math icon in the editor toolbar → Advanced tab → Canonical URL.
    • SEOPress: the SEO metabox under the editor → Advanced tab → Canonical URL.
  4. 4. Fix paginated archives with one setting

    In All in One SEO, switch off No Pagination for Canonical URLs. If the page source shows a second canonical outside your SEO plugin’s block, the theme prints it: remove that line in a child theme. Then check that /page/2/ names itself.

  5. 5. Correct the site address

    Set WordPress Address and Site Address in Settings → General to https and the host you use. If both fields are greyed out, WP_HOME and WP_SITEURL in wp-config.php set them. Then have your host or CDN send the old protocol and host to the new one with a 301.

    Redirect checker

  6. 6. Purge caches and let Google come back

    A page cache or CDN keeps serving the old tag until you purge it. After that, Google picks up the change as it recrawls, with no request needed for parameter URLs.

Fine or wrong: reading the example list

A no in the last column means that page is missing from Google right now.

Listed URLIts canonical namesLeave it?
/my-post/?replytocom=88/my-post/Yes
/my-post/?amp=1 or /my-post/amp//my-post/Yes
http://example.com/my-post/https://example.com/my-post/Yes, though a 301 would be cleaner
/blog/page/2//blog/No: page 2 should name itself
https://example.com/my-post/http://example.com/my-post/No: correct Settings → General
/fr/mon-article//my-post/No: a translation names itself

Check the fix in Search Console

Parameter and AMP URLs belong on this list for good. Confirm the pages you corrected one at a time.

  1. In URL Inspection, click Test live URL on a corrected page, open View tested page and search the HTML for rel="canonical". It should name the page itself. The live test doesn’t check duplicates, so this proves the change is live, not that Google will index it.
  2. Use Request indexing on the few corrected pages that matter most; it has a daily limit.
  3. Skip Validate fix here. It ends in Failed as soon as Google rechecks a listed URL that still has this status, and the parameter links that rightly stay always will. The report updates as Google recrawls anyway.
  4. After the next crawl, inspect the corrected page again. It should read URL is on Google, with itself as the Google-selected canonical.

If Google still prefers the other address after your fix, the page moves to Duplicate, Google chose different canonical than user, which has its own fix.

Can RankHive fix this?

Usually there is nothing to fix. When a post or page carries a wrong canonical, RankHive can write the right one to your SEO plugin’s canonical field and repoint internal links at the clean address.

What it writes, once you approve

  • A corrected canonical URL on a post or page, saved in the canonical field of Yoast SEO, Rank Math or SEOPress.
  • Internal links in your posts, repointed from parameter or http addresses to the clean URL.

What it can’t do here

  • Change canonicals on archives and their numbered pages, attachment pages or WooCommerce products.
  • Change theme code or All in One SEO settings, or write a canonical through All in One SEO.
  • Edit Settings → General, add the http to https redirect, or add hreflang.
  • Click Request indexing for you: its Search Console access is read-only.

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.

Free site check. No sign-up needed.

Common questions

Is “Alternate page with proper canonical tag” an error?

No. Search Console counts the URL as not indexed, but Google’s help says there is nothing to do. It matters only when the listed page should be in search itself.

Why does Search Console list my ?replytocom and ?amp=1 URLs?

Because Google crawled them and read a canonical pointing to the plain post. They stay listed, and that’s fine.

Should I block alternate pages in robots.txt?

No. Once a URL is blocked Google can’t read its canonical any more, and Google’s documentation says not to use robots.txt for canonicalization. Let the tag do the work.

Should I click Validate fix for this status?

No. Validation passes only when no listed URL still has the status, and parameter and AMP URLs keep it for as long as they exist. Correct the wrong canonicals and follow those pages in URL Inspection instead.