在蜘蛛池的入口页里,canonical 是个经常被随手写上的标签。有人把它当保险栓,指向首页或某个看起来权重更高的页面,觉得这样能集中信号;也有人担心写了 canonical 之后,页面里那些指向目标 URL 的链接就不会再被搜索蜘蛛跟进。这两种理解都偏离了 canonical 本来的用途。
canonical 解决的是“哪一版代表这一页”
rel=canonical 表达的是:当多个 URL 内容高度相同时,我希望哪一个作为代表版本出现在结果里。它是一个提示,不是强制指令。搜索引擎会结合页面正文、内链结构、sitemap 声明、历史抓取记录等信息综合判断,完全可能不采纳你写的那个 canonical。
换句话说,canonical 管的是“版本选择”,并不直接回答“这个页面上的链接还看不看”。
链接的发现与跟进,是另一条路径
搜索蜘蛛抓到一个页面后,通常会做两件相对独立的事:一是判断这个页面是否值得索引、属于重复组里的哪一版;二是解析 HTML,抽取 href,把没见过的 URL 放进待抓取队列。
这两件事有交集,但不完全绑定。一个页面即使被判为重复版本、最终没有被索引,它上面出现的链接仍常常会被抽取和后续抓取。所以单从“能不能发现目标 URL”这个角度看,canonical 一般不会像 nofollow 那样直接切断跟进。
但要注意另一个侧面:链接信号的归属可能会被合并到 canonical 指向的那个 URL 上。也就是说,目标 URL 也许照样被发现、被访问,但你原本想通过这个入口页传递的那部分价值,落点可能变了,甚至被稀释。
常见误区与实际表现
- 把 canonical 当 nofollow 用。它不负责阻止链接跟进,指望它来“收紧”入口页的链接是不现实的。
- canonical 指向首页。入口页的链接通常还会被读取,但这一页大概率不会作为独立入口存在,多个入口页这样写容易被归成一组重复内容。
- canonical 指向一个 404 或不可抓取的地址。搜索引擎可能忽略这个提示,也可能自行挑一个版本作为代表,结果比较不可预期。
- canonical 和 noindex 同时出现。两个信号方向不一致,页面可能既不被索引,链接处理也变得难以推断。
- 一批入口页全部 canonical 到同一个目标。本来分散的入口页会被当成同一套模板的复制品。
蜘蛛池入口页该不该写 canonical
- 入口页的链接列表各不相同、内容本身是唯一的,一般不需要写,让它指向自身反而更清楚。
- 如果确实是同一套模板批量生成、正文几乎一字不差,问题不在 canonical,而在于页面的重复度。与其硬加标签,不如减少数量、提高每页的差异度。
- 需要保留入口页作为独立页面时,把 canonical 指向它自己的规范地址,注意协议、域名、末尾斜杠要统一。
- 不要为了“集中权重”把入口页 canonical 到首页或频道页,这会让入口页失去独立身份,得不偿失。
- 如果入口页是给不同渠道、不同地区用的,用路径或参数区分,而不是靠 canonical 混在一起。
如何确认链接到底有没有被跟进
最直接的方式还是看服务器日志:确认搜索蜘蛛抓过入口页之后,是否有随后对目标 URL 的请求。观察时留意这几点:
- 是否真的是搜索蜘蛛的 UA,而不是其他爬虫或采集程序伪装。
- 入口页请求与目标 URL 请求之间的时间间隔,可能隔几分钟,也可能隔几天。
- 请求是否带 Referer,能否对应到入口页。
- 不要只凭一次抓取下结论,至少观察一到两周的日志趋势。
站长的后台工具里的“网址检查”和覆盖率报告也可以交叉参考,但这些数据有延迟,且只覆盖部分搜索来源。
更稳妥的组合做法
- 入口页链接用普通的 a href 输出,避免依赖 JavaScript 动态插入。
- 把重要的目标 URL 同时放进 sitemap,作为链接之外的第二条发现路径。
- 控制单页链接数量,把链接分到多个入口页,而不是一页堆几百条。
- canonical 与页面实际内容保持一致,不做“页面写 A、canonical 写 B”的错配。
- 定期清理入口页里已经失效的目标链接,减少蜘蛛在死链上浪费的抓取次数。
canonical 回答的是“哪一版算代表”,不回答“链接能不能被看到”。想控制链接跟进,用的是 rel=nofollow、robots.txt 或者干脆不放链接,别指望 canonical 代劳。
最后要说明的是,不同搜索引擎对 canonical 的采纳程度和处理细节并不一致,规则也在变化。上面讲的是一般规律,具体到你的站点,还是以自己的日志和站长工具数据为准,先小范围试,再决定要不要在整批入口页上铺开。