页面被收录,本来是一件相对确定的事。但不少站点遇到的情况是:内容明明在 A 页面,搜索结果里打开的却是 B 页面;或者 A 页面一直停在已发现、未编入索引的状态。这类问题里,canonical 标签指错了方向,是最常见的原因之一。
canonical 到底在做什么
页面上的 rel=canonical,是在声明一件事:在这一组内容里,我认为哪个 URL 才是正主。它是一个提示性信号,不是强制指令。搜索引擎会结合重定向、内链、站点地图、外链、内容相似度等信息综合判断,可能采纳,也可能不采纳。
正因为它是提示,写错的代价往往不是立刻报错,而是看起来一切正常,收录归属却在慢慢跑偏。
几种常见的写错方式
- 整站模板写死一个地址:所有页面都指向首页或某个固定 URL,结果大量页面被判为重复,无法单独收录。
- 列表页统一指向第一页:翻页内容被并到第一页,后续页基本失去收录机会。
- 写成相对路径或带参数:指向的版本带着追踪参数、排序参数,和实际被收录的版本不是同一个。
- 大小写、末尾斜杠、协议不统一:http 与 https、有无末尾斜杠混用,会让指向自己变成指向另一个 URL。
- 多语言页面互相指错:英文页指向中文页,或者 hreflang 与 canonical 互相打架。
- 改版后忘了解除:旧模板留下的标签还在,新页面继续指向已经下线的地址。
出现这些现象,先怀疑 canonical
- 同一份内容,索引里只出现另一个 URL,自己的页面长期不进索引。
- 检查单个页面时,用户声明的规范地址和搜索引擎实际选择的地址不一致。
- 两个栏目页面互相抢同一个词,排名在两者之间来回跳。
- 站点改版后新地址收录慢,旧地址反而还活着。
排查与修正的顺序
- 先分清声明与选择。用 URL 检查类工具看单个页面:你声明指向谁,搜索引擎实际选了谁。这一步能判断是标签写错,还是搜索引擎有自己的判断。
- 回到源码看标签本身。确认页面里只有一个 canonical,是完整绝对地址,且指向当前页的规范版本。同一页出现多个标签时,结果不可控。
- 核对全站一致性。canonical、站点地图、内链、重定向目标,这四处应指向同一个版本。任何一处不一致,都会削弱声明的可信度。
- 检查参数与追踪码。带筛选、排序、追踪参数的版本,用 canonical 或抓取规则收口,避免同一内容裂变成大量 URL。
- 检查模板生成逻辑。很多错误不是手写的,而是模板变量为空时默认输出了首页地址。抽查不同栏目页,看标签是否动态取当前 URL。
- 修正后给一点时间。改完标签不会立刻生效,需要等重新抓取与重新评估。期间保持内链与站点地图指向统一版本,减少反复。
几个容易搞混的边界
- canonical 不能阻止收录。想完全不进索引,用 noindex,而不是把 canonical 指向别处。
- canonical 和重定向不是一回事。重定向是把用户与爬虫直接送走,canonical 只是声明,原页面仍可被访问和抓取。
- 内容确实不同的页面,不要为了集中权重硬做合并,容易被判为误导。
canonical 是给搜索引擎的建议,最终收录归属由搜索引擎判断。把标签写对、写一致,能减少不确定性,但无法保证一定被采纳或收录。
小结
遇到收录归属混乱时,先别急着改内容。把 canonical 当成一条线索,从单页声明、全站一致性、模板生成逻辑这三层往上查,通常比反复提交 URL 更有效。标签统一之后,URL 发现、抓取和收录的路径才会稳定下来。