同一个页面,蜘蛛可能通过多个地址访问到:带 www 和不带 www、http 和 https、结尾有没有斜杠、大小写不同、带追踪参数或排序参数。对用户来说这些地址打开的可能是同一篇内容,但对抓取系统来说,它们是若干个 URL。如果不做收敛,蜘蛛会把抓取次数花在这些重复地址上,真正需要更新的页面反而排不上队。
蜘蛛合并重复 URL 时看的几个信号
蜘蛛没有读心术,它主要依赖页面和服务器给出的几类提示来判断哪个地址才是代表版本。
canonical 标签
在页面 head 中写一个指向规范地址的 canonical,是最直接的做法。它相当于告诉蜘蛛:这几个地址的内容以这个为准。使用时注意三点:用绝对地址;指向最终可访问的规范 URL,而不是再跳到别处的地址;不要形成 A 指 B、B 指 C 的链式 canonical,蜘蛛可能只跟一段就停下。
301 重定向
如果某个地址确定不再使用,301 比 canonical 更明确。蜘蛛访问旧地址时会被直接送到新地址,合并信号更强。但 301 会增加一次请求和跳转,站内链接如果能直接指向规范地址,就不必绕这一圈。
Sitemap 与内链
这两者相当于推荐名单。Sitemap 只放规范 URL,内链也统一指向规范 URL,蜘蛛在发现阶段就不容易把重复地址当成独立页面。反过来,如果 Sitemap 里混着参数版本、内链里又同时出现 http 和 https,蜘蛛会收到互相矛盾的信号。
常见配置误区
下面几种情况在实践中很常见,值得逐条核对。
- canonical 指向的地址本身返回 404、503 或又发生重定向,蜘蛛无法确认规范版本。
- 页面带参数时 canonical 指向不带参数的版本,但不带参数的版本内容并不完整,或者需要登录才能看到。
- 站内同时存在大小写混用的链接,服务器对大小写敏感,导致两个 URL 都返回 200。
- http 和 https 都能访问,且没有做 301 或 HSTS,蜘蛛可能长期分别抓取。
- 分页、筛选页的 canonical 全部指向第一页,但页面内容差异很大,可能让部分内容难以被独立发现。
canonical 是提示而不是强制指令。蜘蛛会综合多个信号判断,单靠一个标签不一定能解决所有重复问题。
把重复入口收敛到一套规范 URL
- 先确定唯一规范:选定协议、主机名、路径格式和结尾斜杠规则,写成团队内部的约定。
- 统一内链:全站导航、文章正文、面包屑、分页链接都按这套约定生成,避免同一页面出现多种写法。
- 处理旧地址:确定不再使用的地址做 301,指向规范 URL,不要指向另一个会跳转的地址。
- 整理 Sitemap:只提交规范 URL,剔除参数版本和已被重定向的地址,减少蜘蛛的无效发现。
- 检查日志:观察蜘蛛是否仍在抓取重复地址。如果某个参数版本每天被大量抓取,优先处理这个入口。
做完这些之后,重复 URL 不会立刻消失,蜘蛛的合并也需要时间。比较务实的预期是:重复抓取逐步减少,规范 URL 的抓取和更新检查更集中。定期看服务器日志和抓取统计,比一次性配置完就放着更有效。