"Alternate page with proper canonical tag" 是什么

Search Console 出现 Alternate page with proper canonical tag 一堆 URL,多数人以为被拒收录,其实是 Google 按你的 canonical 配合不收录这条变体。本文讲清楚和真正问题怎么区分。

Search Console 的”页面”报告里看到一堆 URL 落在 “Alternate page with proper canonical tag(含适当规范标记的备用网页)“,第一反应大多数人会以为是被拒收录。其实这是信息提示:Google 知道这是某个 canonical 页面的”非首选版本”,按你的 <link rel="canonical"> 指示主动选择不收录这一个,而是收录你指定的那个。这是 Google 在配合你,不是拒绝你。

真正要警惕的是另一条:“Duplicate, Google chose different canonical than user” —— 那才是 Google 不听你的。两者别混。

常见原因

1. 你确实声明了多个 URL 指向同一个 canonical

最常见情况:你有 /article-a?utm=twitter/article-a?ref=newsletter/article-a/ 这种变体,都在 head 里写了 <link rel="canonical" href="https://yourdomain.com/article-a/">。Google 看完每个变体都汇报”知道了,不收录这个变体,去收录主版本”——这就生成了一条 alternate 提示。

如何判断:点开报告里随便一个 alternate URL,看 Search Console 给出的”用户声明的规范网址”和”Google 选择的规范网址”。两者一致 → 完全正常。

2. 分页 / 参数变体

/blog/?page=2/blog/?page=3 都指向 /blog/,或者 /products?color=red 指向 /products。Google 不会重复收录,但会在这里列出来。

如何判断:URL 里含 ?page=?sort=?utm_?ref= 这类查询参数。

3. hreflang 多语言备用页

如果你做了 <link rel="alternate" hreflang="zh-CN" href="...">,每个语言版本会互相引用对方为 canonical 备用。Google 会把非用户当前语言/区域的版本列在 alternate 报告里。这是设计如此。

如何判断:URL 里含 /en//zh//ja/ 等语言路径。

4. 移动版 / AMP / PWA 子域名

m.yourdomain.com/articleamp.yourdomain.com/article 指向主站 canonical,主站收录、移动版进 alternate。

最短修复路径

99% 的情况是:不用修,标记”已知正常”即可。 但要先用下面几步验证它确实”正常”。

Step 1:抽样验证 canonical 一致性

在报告里随机点 5-10 个 alternate URL,对每一个:

  1. 点 URL → 跳转到”网址检查”工具
  2. 看输出里的两个字段:
    • 用户声明的规范网址:你 <link rel="canonical"> 里写的
    • Google 选择的规范网址:Google 实际拿来当主版本的
  3. 两者一致 → 标记”OK”
  4. 不一致 → 这条不是 alternate 问题,是”Duplicate, Google chose different canonical”,应该到那一类报告里处理(见相关阅读)

也可以用 curl 批量自查:

for u in url1 url2 url3; do
  echo "=== $u ==="
  curl -sL "$u" | grep -oE '<link rel="canonical" href="[^"]+"'
done

Step 2:把”真该被收录的”alternate 挑出来

不全是无害。如果你发现某个你希望被独立收录的 URL 被错放进了 alternate,那是你 canonical 写反了。例子:

  • /blog/2026/comparison 想独立收录,但 head 里 canonical 指向 /blog/comparison
  • 多语言下 /zh/page 的 canonical 错指向 /en/page

修复:

<!-- 改前(错) -->
<link rel="canonical" href="https://yourdomain.com/blog/comparison" />

<!-- 改后(self-canonical) -->
<link rel="canonical" href="https://yourdomain.com/blog/2026/comparison" />

部署后到 Search Console → 用”请求编入索引”重新触发,14 天后再看是否进入”已编入索引”。

Step 3:减少 alternate 噪声(可选)

报告里 URL 数量大到看不过来时,可以瘦身:

  • UTM / tracking 参数:在 robots.txt 加 Disallow: /*?utm_*(Google 仍会发现 canonical,但不会列出每个 utm 变体)
  • 分页:如果分页页本身没收录价值,可以加 <meta name="robots" content="noindex,follow">,移出 alternate 报告
  • 过滤 / 排序 URL:建议在 server 层做 301 到无参版本

不要用 robots.txt 屏蔽真正的 canonical 页——那会让 Google 看不到 canonical 声明,反而出更乱的报告。

Step 4:监控时区分”信息”和”阻塞”

在你定期看的 Search Console 看板里,把状态分成两类:

类别状态名是否要动
信息Alternate page with proper canonical tag
信息Page with redirect
阻塞Duplicate, Google chose different canonical
阻塞Crawled - currently not indexed
阻塞Discovered - currently not indexed
阻塞Excluded by ‘noindex’ tag视情况

把”信息”类放在监控的折叠区,不要每周都重新评估。

容易误判的情况

  • 以为是错误:报告标题没有”Error”字样、URL 数量也不算入”未编入索引”问题——它是正常分类。
  • 以为越少越好:一个健康站这条数量随站点增长会持续上升(hreflang、参数变体),目标不是清零。
  • 混淆 “Page with redirect”:301/302 跳走的页面归在 “Page with redirect”,不在 alternate。
  • 以为可以删 canonical:不写 canonical 反而会让 Google 自己挑,更容易选错。

预防建议

  • canonical 默认走 self-canonical helper(每个 URL 指自己),只在确实是分页 / 参数变体时才指主版本
  • 监控看板区分”信息”和”阻塞”两类状态,alternate 归”信息”
  • UTM / tracking 参数走 robots.txt Disallow: /*?utm_* 减少噪声
  • hreflang 用统一脚本生成,杜绝手写漏配

相关阅读

标签: #SEO #Google #Search Console #收录