When you open Search Console’s “Pages” report and find a pile of URLs under “Alternate page with proper canonical tag,” most people assume Google is refusing to index them. It isn’t. This is an informational status: 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 you. Don’t confuse them.
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, /article-a/, and they all have <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 and look at the two fields Search Console returns: “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 them here.
How to confirm: The URL contains query params like ?page=, ?sort=, ?utm_, ?ref=.
3. hreflang alternates
If you’ve set <link rel="alternate" hreflang="zh-CN" href="...">, each language version cross-references the others as canonical alternates. Google lists the non-active-locale versions in this report by design.
How to confirm: URL path contains a locale segment like /en/, /zh/, /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.
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 know it’s actually fine.
Step 1: Sample-verify canonical consistency
Randomly pick 5-10 alternate URLs from the report. For each:
- Click the URL → opens 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.” Handle it under that status (see Related).
For a batch check:
for u in url1 url2 url3; do
echo "=== $u ==="
curl -sL "$u" | grep -oE '<link rel="canonical" href="[^"]+"'
done
Step 2: Find any URL that’s incorrectly classified as alternate
Not all entries are harmless. If you discover a URL you actually want indexed on its own is 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:
<!-- 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, hit “Request indexing” in Search Console and re-check 14 days later.
Step 3: Trim alternate noise (optional)
If the report list is too long to skim, prune it:
- UTM / tracking params: add
Disallow: /*?utm_*to robots.txt (Google can still discover the canonical, but won’t list every utm variant) - Pagination: if paginated pages aren’t worth indexing on their own, add
<meta name="robots" content="noindex,follow">to remove them from the alternate report - Filter / sort URLs: ideally 301 them server-side to the param-less version
But don’t block the actual canonical page in robots.txt — that prevents Google from reading your canonical declaration at all 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 | Yes |
| Blocking | Crawled - currently not indexed | Yes |
| Blocking | Discovered - currently not indexed | Yes |
| Blocking | Excluded by ‘noindex’ tag | Depends |
Collapse informational into a folded section. Don’t re-litigate it weekly.
Easy to misdiagnose
- Treating it as an error: the report title has no “Error” label and these URLs don’t count against “Not indexed” — they’re a normal category.
- Trying to zero it out: on a healthy growing site this number rises forever (hreflang, param variants). Zero isn’t the goal.
- Confusing with “Page with redirect”: 301/302 redirects go to “Page with redirect,” not here.
- Thinking you can just delete the canonical: skipping
<link rel="canonical">lets Google pick on its own, which is worse.
Prevention
- Default to self-canonical (each URL points to itself); only point to a master version for true variants (params, pagination)
- Split monitoring into informational and blocking buckets; this status goes in informational
- Strip UTM / tracking noise with
Disallow: /*?utm_*in robots.txt - Generate hreflang with one shared helper so cross-references can’t be hand-broken
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