canonical 这个标签经常被当成让页面被收录的工具,但它实际做的事情只有一件:在一组内容相同或高度相似的 URL 里,指明哪一个才是主版本。搜索引擎会把索引和排名信号尽量集中到这个地址上。它不承诺收录,也不负责提升页面本身的质量。
归并信号,不是收录开关
一个页面能不能进索引,取决于内容质量、能否被抓取、是否被规则挡住等一串条件。canonical 只在这些 URL 已经进入候选范围之后才起作用,作用是帮搜索引擎少做一次选择。
如果主版本自己没被抓取、被 robots.txt 挡住,或者内容过于单薄,那么 canonical 写得再规范也没有意义。反过来,把 canonical 指向一个不该当主版本的地址,可能让原本有排名的页面被合并掉,流量跟着一起走。
判断一条 canonical 是否合理,先问一句:这些 URL 对用户来说是不是同一个页面。
常见写错的几种情况
- 自引用写成了别的地址:页面本该指向自己,却在套模板时指向了栏目页或首页,等于告诉搜索引擎我不是主版本。
- 跨页错误指向:详情页的 canonical 指向列表页,在带参数或分页的页面没有单独处理时尤其容易发生。
- A 指 B、B 又指 A:互相指向形成循环,搜索引擎无法判断谁是主版本,只能自己挑一个。
- 指向 404 或重定向地址:主版本不存在或者会跳走,归并信号等于落空。
- 多语言、多分站混用:不同语言的版本互相 canonical,可能导致某个语言版本无法单独出现在索引里。
自引用 canonical 的价值
给每个正常页面加一条指向自己的 canonical,看上去多余,但能减少动态参数、大小写、结尾斜杠等变体带来的干扰。在参数多、同一内容能通过多个地址访问的站点上,自引用是比较稳妥的默认做法。
前提是这个页面本身希望被收录。如果某个页面只是筛选条件的组合结果,不希望它单独出现在索引里,更合适的做法通常是 noindex 或 robots 规则,而不是把 canonical 指向别的页面。
上线前后的检查顺序
- 确认主版本 URL 自己能返回 200,且没有被 robots.txt 或 noindex 挡在外面。
- 列出所有指向同一内容的 URL 变体,看它们的 canonical 是否统一指向同一个主版本。
- 检查是否存在互相指向和链式指向,例如 A 指 B、B 指 C,尽量收成一层。
- 用抓取工具查看渲染后的 HTML,确认 canonical 不是靠脚本后插入才出现。
- 观察一段时间内索引里留下的是哪个地址,如果和预期不一致,再回头调整。
归并之后要留意什么
canonical 生效后,被归并的 URL 可能逐渐从索引里淡出,这属于正常现象。真正需要盯的是主版本是否稳定被抓取、排名有没有明显下滑。如果主版本自己的收录就不稳,先去解决它的可抓取性和内容问题,再谈归并。
还要记住,canonical 是建议而不是强制指令,搜索引擎可能因为其他信号选择忽略它。把它当成整理 URL 的工具,而不是决定收录的手段,很多判断会清楚得多。