在 Google Search Console 里对任意已收录页面跑 URL Inspection,展开 Page indexing 区块,会看到两个 canonical 字段:User-declared canonical(你的页面声明的)和 Google-selected canonical(Google 实际收录的)。两者一致就没事;不一致说明 Google 推翻了你的 rel="canonical"——因为你的其他信号指向了别处。而这种不一致恰好告诉你,到底是哪些信号分裂了。
一句话结论
- canonical 标签是提示,不是指令。Google 官方明确说它「可能选择和你不同的页面作为 canonical」。
- Google 按强弱排列各类 canonical 信号:301 重定向和
rel="canonical"是强信号;HTTPS 优先于 HTTP 也是强信号;sitemap 收录是弱信号;内链和外链按数量累计权重。 这些信号打架时,多数派赢,不是你的标签赢。 - 如果 User-declared 和 Google-selected 不一致,找出指向 Google 那个选择的因素(重定向、sitemap、内链、外链),然后要么接受 Google 的选择,要么把所有信号重新统一到你偏好的 URL。
- 把所有信号对齐并申请收录后,重新爬取时 Google-selected canonical 通常会在 1 到 4 周内切换。
- 「Alternate page with proper canonical tag」是成功状态,不是 bug。
两个字段到底是什么意思
| 字段 | 来源 | 它告诉你什么 |
|---|---|---|
| User-declared canonical | 你的 <link rel="canonical">、HTTP Link 头、或 sitemap | 你投票给的那个 URL |
| Google-selected canonical | Google 自己对所有信号的综合评估 | Google 收录并排名的 URL,也是搜索里出现的那个 |
| Inspected URL | 你输入工具的那个具体 URL | 可能和上面两个都不同 |
如果 Google-selected 和你声明的 canonical 一致,说明信号对齐了。如果不一致,说明 Google 看到了相互矛盾的证据,挑了它信号更偏向的 URL。这是 Google 的正常行为,不是惩罚。
怎么判断你中招了
- URL Inspection 显示某个 URL 的 User-declared 和 Google-selected canonical 不一样。
- Pages 报告(「Why pages aren’t indexed」下面)把 URL 列为 「Duplicate, Google chose different canonical than user」。
- 一个相关但不同的状态 「Duplicate without user-selected canonical」,意思是你压根没声明 canonical,Google 替你挑了一个。
- 你想被收录的 URL 一直不出现在搜索里,但同一页的另一个版本出现了。
- 同一页面你提供了多种 URL 格式:结尾斜杠 vs 无斜杠、
?utm_*参数、wwwvs 裸域、httpvshttps、或/index.htmlvs/。
Google 实际怎么权衡各个信号
根据 Google 的 canonicalization 官方文档,截至 2026 年 6 月,这些是参与权衡的因素及其相对分量:
| 信号 | 强度 | 说明 |
|---|---|---|
| 301/308 重定向 | 强 | 重定向的目标是成为 canonical 的强信号 |
rel="canonical" 标注 | 强 | 你的明确提示,但只是众多强信号之一 |
| HTTPS 优先于 HTTP | 强 | Google 偏好安全版本 |
| 内链 | 累计 | 你大多数导航、面包屑、正文链接指向哪个格式,哪个就靠数量赢 |
| sitemap 收录 | 弱 | 有帮助,但压不过重定向或大量内链 |
| 外链 | 累计 | 如果外部网络链向另一个版本,会把 Google 的选择往那边拉 |
关键洞察:信号会叠加。canonical 标签 + sitemap 条目 + 一致的内链 + 干净的重定向,几乎总能赢。一个孤零零的 canonical 标签去对抗一份 sitemap 和 50 条说反话的内链,会输。
逐步修复
- 检查 URL。 打开 URL Inspection,展开 Page indexing,记下两个 canonical 字段。一致就停手,没什么要修的。
- 看已爬取的 HTML。 点 View crawled page,读 Google 上次抓取的 HTML 里的
<link rel="canonical">,和你的线上页面对比。如果不一样,说明 Google 上次爬取早于你的修复。点 Request Indexing,等重新爬取。 - 确认是真的信号冲突。 如果已爬取的 HTML 和你想要的 canonical 一致,但 Google 还是选了别的 URL,那就是真正的信号分裂。对 Google 选的那个 URL 审四件事:
- 它在你的 XML sitemap 里吗?
- 内链指向它是不是比指向你偏好的 URL 更多?
- 有没有 301 跳到它(或者没有从它跳走)?
- 它是不是在另一个主机(
wwwvs 裸域)或协议(httpvshttps)上?
- 定下赢家。 决定你想收录的那一个 URL。通常是最干净、被指向最多、被分享最多、HTTPS、不带参数的版本。
- 让每个信号都一致。 把 canonical 标签、sitemap 条目、所有内链、所有重定向都指向那一个 URL。如果
www和裸域都在跑内容,把一个 301 到另一个。如果?utm_*或会话参数在制造重复,确保 canonical 不带参数,并考虑屏蔽参数爬取。 - 对赢家申请收录。 清理完后,对 canonical URL 跑 URL Inspection 并点 Request Indexing。下次重新爬取时(单个 URL 通常 1 到 4 周),Google-selected canonical 字段会切回你设的。
容易踩的坑
- 把 canonical 当命令。 它是强提示。当重定向、内链或外链唱反调时,Google 会无视它。
- canonical 链。 把 A 的 canonical 指向 B,而 B 又 canonical 到 C。Google 会忽略链式或自相矛盾的 canonical;直接指向最终 URL。
- 跨域 canonical 指向你不拥有的域名。 通常被忽略,还显得可疑。
- hreflang 和 canonical 不匹配。 每个 hreflang alternate 必须自指 canonical(指向自己),不是指向另一个语言版本。一个页面 hreflang 到它的中文孪生页、却把 canonical 指向英文 URL,就是「Google chose different canonical」的经典来源。参见 hreflang 是什么。
- 以为「Alternate page with proper canonical tag」是坏掉了。 这个状态恰恰是成功条件:Google 看到了 alternate、尊重了你的 canonical、把 alternate 排除在索引外。无需处理。
- 内容太薄或几乎重复。 如果两页 95% 相同,不管你的标签怎么写,Google 都可能把它们合并成一个 canonical。修法是让内容有区别,或者接受合并。
这篇适合谁
多版本内容的站点:分页归档、参数 URL、语言对、www vs 裸域,或任何同一页面对外有不止一个地址的情况。双语站(比如 EN/ZH 配对)因为 hreflang 和 canonical 的相互作用,会反复遇到这个问题。
这篇不适合谁
单语言、单模板、一页一 URL 的小站很少遇到 canonical 冲突。如果真遇到了,先怀疑发布 bug、误配的重定向、或 CMS 吐了个错误的 canonical,再去怀疑 Google。
FAQ
- 我把无斜杠版设成 canonical,为什么 Google 选了带斜杠的?: 因为你的 sitemap、内链、或某个重定向更偏向带斜杠的版本。canonical 标签是一个强信号,但它压不过一份 sitemap 加几十条指向另一边的内链。把每个信号对齐,然后申请收录。
- 我能不能直接删掉 canonical 标签让 Google 自己判断?: 可以,但那样状态会变成「Duplicate without user-selected canonical」,你也失去了唯一的明确投票。自指 canonical 是安全默认;只有你真的没偏好时才省。
- 「Alternate page with proper canonical tag」是问题吗?: 不是。这是 alternate URL 的成功状态。Google 看到了 alternate、看到它 canonical 到了你的主版、正确地把它挡在索引外。完全符合预期。
- 所有信号对齐后多久 Google 会切换?: 单个 URL 通常 1 到 4 周,取决于重新爬取。申请收录可以催一下,然后在 URL Inspection 里跟踪 Google-selected canonical 字段。
- 强 canonical 会把排名信号传给被选中的 URL 吗?: 会。Google 把一个重复簇合并后,链接权重和排名信号会集中到被选中的 canonical 上——所以干净、一致的 canonical 设置帮的不只是整洁,还有排名。