TL;DR: “Alternate page with proper canonical tag” is an informational status, not an error. Google found a non-preferred version of a page, read your <link rel="canonical">, and is deliberately indexing the canonical instead of this variant. Google’s own docs say: “There is nothing you need to do.” The fastest correct action is to sample-check 5-10 of these URLs, confirm the user-declared and Google-selected canonicals match, mark the status “known good,” and stop watching it. Only act if a URL you actually want indexed on its own is stuck in this bucket.
When you open Search Console’s Page indexing report and find a stack of URLs under “Alternate page with proper canonical tag,” most people assume Google is refusing to index them. It isn’t. Google sees these URLs are non-preferred versions of some canonical page, respects the <link rel="canonical"> you set, and deliberately doesn’t index this one in favor of the canonical you nominated. Google is cooperating, not rejecting.
The status you should actually watch is the adjacent one: “Duplicate, Google chose different canonical than user.” That one means Google ignored your declared canonical and picked its own. Don’t confuse them — they sit in different buckets and need opposite responses.
Which bucket are you in?
Open the report and read the URL. As of June 2026 these four patterns cover almost every entry:
| Pattern in the URL | Likely cause | Action |
|---|---|---|
?utm_, ?ref=, ?fbclid= | Tracking-param variant | None (canonical is working) |
?page=2, ?sort=, ?color= | Pagination / filter variant | None, unless the page should index alone |
/en/, /zh/, /ja/ locale segment | hreflang alternate | None (cross-references by design) |
m. or amp. subdomain | Mobile / AMP alternate | None |
| A clean URL you want indexed | Backwards canonical | Fix it (see Step 2) |
The first four are normal. Only the last row is a real problem.
Common causes
1. You legitimately declared multiple URLs pointing to one canonical
The most common case: you have /article-a?utm=twitter, /article-a?ref=newsletter, and /article-a/, and they all carry <link rel="canonical" href="https://yourdomain.com/article-a/"> in their head. Google reports back “got it, won’t index this variant, will index the main version” — and each variant lands in the alternate bucket.
How to confirm: Click any alternate URL in the report to open URL Inspection, then read the two fields Search Console returns under Page indexing: User-declared canonical and Google-selected canonical. If they match, this is working as intended.
2. Pagination or parameter variants
/blog/?page=2, /blog/?page=3 pointing to /blog/, or /products?color=red pointing to /products. Google won’t double-index, but it lists the variants here.
How to confirm: The URL contains query params like ?page=, ?sort=, ?utm_, or ?ref=.
3. hreflang alternates
If you’ve set <link rel="alternate" hreflang="zh-CN" href="...">, each language version cross-references the others. Google indexes the version that matches the searcher’s locale and lists the non-matching versions in this report by design. Google’s guidance: each hreflang entry should point to a canonical page in the same language (or the closest substitute language), so do not let the canonical of /zh/page point at /en/page.
How to confirm: The URL path contains a locale segment like /en/, /zh/, or /ja/.
4. Mobile / AMP / PWA subdomains
m.yourdomain.com/article or amp.yourdomain.com/article pointing to the main-site canonical. The main site indexes; the mobile / AMP version goes to alternate. (Google still documents this exact case as a normal reason for the status.)
Shortest path to fix
99% of the time the fix is: don’t fix it. Mark “known good” and move on. But run these checks first so you actually know it’s fine.
Step 1: Sample-verify canonical consistency
Randomly pick 5-10 alternate URLs from the report. For each:
- Click the URL to open the URL Inspection tool.
- Read these two fields:
- User-declared canonical: what your
<link rel="canonical">says. - Google-selected canonical: what Google is actually treating as the main version.
- User-declared canonical: what your
- Match → mark “OK.”
- Mismatch → this URL doesn’t belong in “alternate,” it belongs in “Duplicate, Google chose different canonical than user.” Handle it under that status (see Related).
For a quick batch check from your terminal:
for u in url1 url2 url3; do
echo "=== $u ==="
curl -sL "$u" | grep -oE '<link rel="canonical" href="[^"]+"'
done
If a variant returns no canonical line, or returns a canonical pointing somewhere unexpected, that variant is the one to fix.
Step 2: Find any URL that’s incorrectly classified as alternate
Not every entry is harmless. If you discover a URL you actually want indexed on its own sitting in the alternate bucket, your canonical is backwards. Examples:
/blog/2026/comparisonshould index independently, but its head says<link rel="canonical" href="/blog/comparison">.- A localized
/zh/pagewhose canonical wrongly points to/en/page.
Fix by making the page self-canonical:
<!-- Wrong -->
<link rel="canonical" href="https://yourdomain.com/blog/comparison" />
<!-- Right (self-canonical) -->
<link rel="canonical" href="https://yourdomain.com/blog/2026/comparison" />
After deploy, open the corrected URL in URL Inspection and click Request indexing, then re-check in about 14 days.
Step 3: Trim alternate noise (optional)
If the report list is too long to skim, prune it — but pick the method that doesn’t blind Google to your canonical.
- UTM / tracking params: Keep the
<link rel="canonical">pointing to the clean URL on every variant. That is the canonical method Google recommends, and it consolidates link signals to the clean page. Do not reach forDisallow: /*?utm_*in robots.txt — Google explicitly warns “Don’t use the robots.txt file for canonicalization purposes,” because a blocked URL can still get indexed and Google can no longer read its canonical at all. - Pagination: If a paginated page has no standalone value, add
<meta name="robots" content="noindex, follow">so it drops out of the report. Allow it to be crawled first — a robots.txt-blocked page is never fetched, so Googlebot never sees thenoindex. - Filter / sort URLs: Ideally 301 them server-side to the param-less version. A redirect is the strongest canonicalization signal Google recognizes (stronger than
rel="canonical", which is stronger than a sitemap entry); the signals stack when combined.
Note: the old Search Console URL Parameters tool was retired in April 2022 and is not coming back. Parameter handling now lives entirely in your canonical tags, redirects, and (where appropriate) noindex.
And don’t block the actual canonical page in robots.txt — that prevents Google from reading your canonical declaration and produces messier reports.
Step 4: Triage your monitoring as informational vs. blocking
In whichever Search Console dashboard you check regularly, split statuses into two groups:
| Bucket | Status | Action? |
|---|---|---|
| Informational | Alternate page with proper canonical tag | No |
| Informational | Page with redirect | No |
| Blocking | Duplicate, Google chose different canonical than user | Yes |
| Blocking | Crawled - currently not indexed | Yes |
| Blocking | Discovered - currently not indexed | Yes |
| Blocking | Excluded by ‘noindex’ tag | Depends |
Collapse the informational rows into a folded section. Don’t re-litigate them weekly.
How to confirm it’s fixed
You don’t “fix” a healthy alternate status, but after correcting a backwards canonical (Step 2) you should verify the page moved:
- Run the corrected URL through URL Inspection and confirm User-declared canonical and Google-selected canonical now both equal the URL itself.
- Wait until the next recrawl (use Request indexing to nudge it), then re-open the Page indexing report after ~14 days. The URL should appear under Indexed rather than Alternate page with proper canonical tag.
- For the URLs you confirmed were correct all along, no change is expected — and that’s the point.
Easy to misdiagnose
- Treating it as an error: the report has no “Error” label here, and these URLs don’t count against your indexed-page problems. It’s a normal category.
- Trying to zero it out: on a healthy growing site this number rises forever (hreflang, param variants, pagination). Zero isn’t the goal.
- Confusing it with “Page with redirect”: 301/302 redirects land in “Page with redirect,” not here.
- Thinking you can just delete the canonical: dropping
<link rel="canonical">lets Google pick on its own, which is worse and can land you in the “Duplicate” bucket.
Prevention
- Default to self-canonical: each URL points to itself, and only point at a master version for true variants (params, pagination).
- Split monitoring into informational and blocking buckets; this status goes in informational.
- Handle UTM / tracking noise with canonical tags (and 301s for filter/sort URLs), not robots.txt blocks.
- Generate hreflang and canonicals with one shared helper so cross-references can’t be hand-broken.
FAQ
Is “Alternate page with proper canonical tag” hurting my SEO? No. It confirms Google read your canonical and is consolidating signals onto the page you chose. The chosen canonical still ranks normally; the variant simply isn’t indexed as a separate page.
Why does the count keep going up? Every new tracking link, paginated page, filter combination, and hreflang version adds entries. On a growing site the number climbs indefinitely. Watch the trend for sudden spikes, not the absolute number.
Can I make Google index both the alternate and the canonical? Not while both declare the same canonical. If you genuinely want a page indexed on its own, make it self-canonical (Step 2). If it’s a true duplicate, leave it consolidated — indexing both would split ranking signals.
Should I add noindex to these pages?
Usually not. noindex is for pages you never want in the index at all. For canonical variants, the canonical tag already does the right thing and preserves link equity. Reserve noindex for low-value pagination or filter URLs you’d rather remove entirely — and never combine it with a robots.txt Disallow, or Googlebot won’t fetch the page to see the tag.
The report shows a URL with no canonical declared. What now?
Add a <link rel="canonical"> to it. Without one, Google guesses, and a wrong guess pushes the URL into “Duplicate, Google chose different canonical than user,” which is the status you don’t want.
Related
- Canonical misconfigured
- Duplicate, Google chose different canonical
- hreflang warning quick guide
- Googlebot Crawl Spikes But Impressions Stay Flat
- Infinite Scroll Pages Don’t Get Indexed
- Page Not Mobile-Friendly Warning
- Pages Suddenly Deindexed After a Policy Action
- Google Crawls My Homepage But Never the Article Pages
- Why Resubmitting URL Inspection Does Not Solve Indexing
- Search Console Pages Report Sees Drops With No Obvious Reason
- Pages in My Sitemap Don’t Appear in Search Console (2026)
- Structured Data Warning in Search Console
- What “URL is Unknown to Google” Really Means
Tags: #SEO #Google #Search Console #Indexing