做站点运营时,经常会遇到一种情况:同一篇内容在服务器上有好几个可以打开的地址,但从访客角度看它们长得一模一样。搜索引擎抓取时会把它们当成不同页面分别处理,权重和点击数据被拆散,自己排查问题时也分不清哪个地址才是正主。规范链接(canonical)就是用来减少这种歧义的,但它不是加一行代码就万事大吉,需要定期自查。
同一篇内容为什么会有多个网址
多数重复地址不是故意做出来的,而是站点在建设和维护过程中自然形成的。常见来源包括:
- 域名层面:带 www 和不带 www 同时可访问,http 与 https 并存。
- 路径层面:末尾有没有斜杠、大小写不同、中文目录被转义成编码。
- 参数层面:来源跟踪参数、排序参数、会话 ID,都会生成新地址。
- 模板层面:打印页、独立移动版域名、AMP 版、预览版各有一套地址。
- 系统层面:商城或 CMS 生成的 ID 页与别名页同时存在。
这些地址在浏览器里都能打开,但如果没有明确告诉搜索引擎哪一个是首选,抓取分配和后续统计就会分散。
自查从三个地方入手
- 看页面源码。打开一个页面,查看 head 区域的 link rel="canonical" 指向哪里。它应当是绝对地址,且与页面当前的主地址保持一致;如果页面本身就是唯一地址,指向自身即可。
- 看服务器日志。观察蜘蛛抓取的地址里,是否存在同一内容被不同参数反复抓取的情况。重复地址出现得越多,说明规范化还没做干净。
- 看站点配置。检查服务器是否对首选域名做了 301 跳转,是否强制 https,是否统一了大小写和末尾斜杠。能靠跳转解决的,不必都留给 canonical。
写 canonical 时容易踩的坑
指向了不该指向的地址
常见的错误是把 canonical 指向一个已经返回 404 的页面、一个还要再跳一次的地址,或者一个被 robots 规则屏蔽的地址。这种情况下搜索引擎无法把它当成有效首选,等于白写。
分页和筛选页乱用
把所有分页都 canonical 到第一页,或者让不同筛选条件互相指向,容易让部分内容失去被抓取的机会。分页页通常保留自指 canonical 更稳妥,筛选页则要看它是否有独立价值,没有就别让它大量生成。
和 noindex 打架
同一个页面既写 noindex 又写 canonical,信号会互相矛盾。如果只是不想让某个版本被收录,优先用跳转处理,而不是两条规则一起上。
规范链接是一种建议,不是强制命令。它能减少歧义,但不能代替服务器跳转和清晰的结构设计。发现重复地址,先从源头治理,再用 canonical 收尾。
把检查变成固定动作
网站上线新栏目、更换模板、增加追踪参数时,都是重复地址容易冒出来的节点。可以在这些时间点安排一次检查,用同一套步骤过一遍:确认首选域名和跳转规则,抽查十个页面的 canonical,再看一眼日志里被抓取的地址。坚持下来,这类问题通常不会积成大麻烦。