canonical 这个标签,很多人是跟着模板复制进来的,写的时候未必想过它到底在表达什么。在蜘蛛池的入口页上,它常常被当成一个“规范化”的习惯动作,写对了没什么感觉,写错了蜘蛛的行为会慢慢偏掉。
canonical 在说的是什么
它的作用是告诉蜘蛛:这一组内容相同或高度相似的 URL 里,我认为哪一个才是正本。注意,它是一个建议,不是强制指令。蜘蛛会把它和别的信号放在一起看,比如站内链接指向、sitemap 里的写法、301 跳转、页面本身的相似程度。所以 canonical 写错,不等于蜘蛛一定照做,但等于你在给自己制造互相矛盾的信号。
在蜘蛛池里,入口页往往数量多、结构相似、内容偏薄,这时候 canonical 的影响会被放大。
- 入口页本来就该被独立看待时,写自指即可
- 多个入口页确实讲同一件事,可以合并到一个正本
- 跨域 canonical 更接近一种声明,实际被采纳的程度有限
- 它和 noindex、301 不是一回事,不能互相替代
入口页里常见的几种写错方式
- 全部指向首页。几十上百个入口页都 canonical 到首页,等于告诉蜘蛛这些页面都不值得单独存在,后续可能减少对它们的抓取。
- 指向一个不存在的 URL。拼错、写了个已删除的路径,蜘蛛拿到的是一条无效线索,通常会被忽略,而页面自己也失去了明确的规范化指向。
- 指向目标页。把入口页的 canonical 直接写成目标页,本意是“集中权重”,结果往往是入口页先被当作重复内容,长期看可能逐步退出抓取队列。
- 相对路径或协议域名不一致。页面是 https,canonical 写成 http,或者少了斜杠、多了参数,蜘蛛可能把它们当成两个不同的 URL。
- 互相指向成环。A 指向 B,B 指向 A,蜘蛛得自己猜哪个是正本,结果常常是谁都不确定。
- 分页页全部指向第一页。如果入口页有分页,把第 2、3 页都 canonical 到第 1 页,后续分页里的链接可能不再被跟进。
写错之后蜘蛛会怎么反应
这里没有必然结果,只能讲常见倾向。当 canonical 与页面实际情况矛盾时,蜘蛛通常会:
- 降低对该 URL 的抓取频率,因为它看起来“重复且非正本”
- 把从该页发现的链接,归到 canonical 指向的那个 URL 名下
- 在跨域 canonical 的情况下,多数时候仍按自己的判断处理
- 如果 canonical 指向的页面本身有问题,比如 404 或被屏蔽,那两边都不讨好
这些反应不会当天出现,通常要过几周,才能在日志和索引数据里慢慢看出来。
检查与修正的顺序
- 抓取几个入口页,看渲染后的 HTML 里 canonical 实际是什么,不要只看源码。
- 把 canonical 指向的 URL 汇总出来,看有没有指向 404、被 robots 屏蔽或需要登录的页面。
- 核对 sitemap 里登记的 URL 与 canonical 是否一致,两边打架要统一。
- 检查有没有成环的情况,用工具或写个脚本跑一遍。
- 看访问日志里 canonical 指向的 URL 是否真有蜘蛛来访,没有的话说明这个信号没起作用。
- 改完之后不要频繁再动,留一段观察时间。
几点使用建议
- 入口页默认写自指 canonical,除非你确实想合并。
- 不要在入口页上把 canonical 当成“权重传递开关”,它不承担这个功能。
- 跨域 canonical 用之前,先确认真的是同一内容,否则容易被忽略还留下痕迹。
- 改动集中在一次做完,避免今天改一点明天改一点,日志会变得很难解读。
- canonical 只是众多信号之一,入口页的可抓取性、内容与内链结构同样重要。
canonical 的写法,反映的是你对这批页面的真实态度。如果连自己都说不清哪个是正本,蜘蛛更不会替你决定。