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/article、amp.yourdomain.com/article 指向主站 canonical,主站收录、移动版进 alternate。
最短修复路径
99% 的情况是:不用修,标记”已知正常”即可。 但要先用下面几步验证它确实”正常”。
Step 1:抽样验证 canonical 一致性
在报告里随机点 5-10 个 alternate URL,对每一个:
- 点 URL → 跳转到”网址检查”工具
- 看输出里的两个字段:
- 用户声明的规范网址:你
<link rel="canonical">里写的 - Google 选择的规范网址:Google 实际拿来当主版本的
- 用户声明的规范网址:你
- 两者一致 → 标记”OK”
- 不一致 → 这条不是 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 用统一脚本生成,杜绝手写漏配
相关阅读
- canonical 写错会怎样
- Duplicate, Google chose different canonical
- hreflang 警告快速指南
- Googlebot 抓取上升但曝光不动
- 无限滚动页内容未被收录:3 个原因 + 修复路径
- “Page not mobile friendly” 怎么修
- 页面被取消收录——是算法还是 manual action?
- Google 只爬首页,从不爬文章页
- 为什么反复 resubmit URL 也不能让 Google 收录
- Search Console Pages 报告无故下降
- sitemap 里有但 Search Console 不显示
- Search Console 报结构化数据警告
- “URL is unknown to Google” 是什么意思