有些页面内容写得完整,内链也有,蜘蛛日志里能看到抓取记录,但过了一两个月在索引里就是找不到。排查模板时经常能看到同一个问题:页面的 rel=canonical 指向了另一个 URL。这相当于在告诉搜索引擎“这一页不是正主,请去看那一页”,收录信号自然就被让出去了。
canonical 在收录链路里做的是什么
需要先分清一件事:canonical 不是用来决定“收不收录”的开关,它表达的是“这一组内容相近的 URL 里,我认为哪一个才是代表”。搜索引擎会把它当作一个较强的参考信号,但最终仍会结合内容、内链、外链、历史表现等因素自己判断。
正因为它是参考而非命令,所以用错的后果往往是渐进的:一开始可能还照常收录,等搜索引擎确认了你的指向,才慢慢把这一页合并到目标 URL 上。运营端看到的现象就是“这页越来越难搜到,索引里也查不到了”。
指向错的几种典型情况
列表页的全部分页都指向第一页
分类页、文章列表页在模板里统一输出 canonical,值写成不带分页参数的主地址。第 2 页、第 3 页上的每一条内容都带着“我是第一页”的信号,这些分页本身很难被单独收录,翻页里独有的那部分内容也就不容易被索引到。
带参数的页面全部指向无参数版本
筛选、排序、跟踪参数这类 URL,如果全部 canonical 到干净地址,在参数只是排序变化时是合理的;但如果参数决定了完全不同的内容集合,比如不同城市的列表、不同规格的商品,统一指向就会让这些页面互相挤压,最后只留一个。
模板里写死了一个示例地址
改版或套用主题时比较常见:canonical 的地址被硬编码成某个示例页,所有页面都指向它。这种错误覆盖面最大,也最难从单个页面上看出来,通常要抽查多个不同栏目才会发现。
把内容指向了站外
有的站点因为内容同时发布在别处,就在自己页面上 canonical 到对方域名。这等于主动放弃这一页作为首选地址,如果对方站点并不稳定,最终可能两边都拿不到应有的收录。
多语言、多地区版本互指混乱
语言版本之间应该用 hreflang 互相说明,而不是用 canonical 互指。把英文页 canonical 到中文页,会让英文版本失去独立收录的机会。
自查时按什么顺序看
- 先抽查三类页面:首页、一个栏目列表页、一篇内页。看它们的 canonical 是否指向自己。
- 再看分页和带参数的 URL,确认指向的对象和内容集合是否匹配。
- 检查是否有多个 canonical 标签同时出现,这种情况通常会被整体忽略。
- 确认 canonical 指向的地址本身可访问,返回正常状态码,不是 404 或跳转链。
- 核对它和 noindex、robots.txt 之间有没有互相矛盾:一个说别收录我,一个说以我为准。
不是所有页面都该急着加 canonical
如果站内每一个 URL 的内容本来就各不相同,页面上又没有真正重复的版本,自引用的 canonical 是安全做法,但加上一层指向别处的标签反而增加出错概率。以下几种情况更适合先别动:
- 页面内容独立,没有对应的重复版本;
- 两个页面只是主题相近,目标关键词和正文并不重合;
- 还在测试 URL 结构,地址随时可能调整。
判断要不要合并,先问一句:如果只留其中一个地址,用户和搜索引擎看到的东西会不会变少?如果会变少,就不该合并。
改回来之后怎么观察
把错误的 canonical 修正为自引用或正确的目标地址后,不要期待第二天就看到变化。可以先在抓取日志里确认这些页面重新被访问,再通过站内搜索、内链锚文本等方式给它们补一些入口。索引的合并和拆分本身需要时间,通常按周观察比按天观察更靠谱。
同时留意一件事:如果这些页面之前被合并到了别的 URL 上,现在拆开,等于重新让搜索引擎认识两个独立的地址,短期内表现可能会有波动,属于正常范围。修 canonical 的目标是让信号和页面结构保持一致,而不是短期内让收录数字变好看。