同一个页面,如果服务器对它的大小写写法、带不带末尾斜杠、参数顺序不同的几种形式都返回 200,那在搜索蜘蛛眼里它们就是几个不同的 URL,会分别排队、分别抓取。这不是内容问题,而是地址管理问题,但它会实实在在影响抓取效率。
URL 里差一个字符就是另一个地址
判断两个地址是不是同一个页面,蜘蛛看的是字符串,不会替你做业务层面的联想。只要协议、主机名、路径、参数有一处不同,就被视为新的 URL 送进抓取队列。如果这些地址都能正常打开,蜘蛛没有理由自己排除掉其中任何一个。
常见的几种重复形态
- 大小写不同:/Page 和 /page 在不少服务器上是两条路径,内容却完全一样。
- 末尾斜杠:/topic 与 /topic/ 都返回 200,就会变成两条 URL。
- 协议与主机名:http 与 https、带 www 与不带 www、带默认端口,都是不同地址。
- 查询参数:参数顺序调换(?a=1&b=2 与 ?b=2&a=1)、会话 ID、来源跟踪参数,都会派生出新地址。
- 页面变体:移动版、打印版、AMP 版,以及排序、筛选之后的列表页。
蜘蛛遇到这些地址会怎么做
它会各自建立一条记录,分别抓取、分别判断。结果是抓取资源被摊薄到同一批内容上,日志里同一篇文章出现十几条路径也很常见。指向这个页面的外链权重会被分散到不同地址上,蜘蛛也会在其中挑一个作为规范版本,但这个选择权并不在站长手里,它综合内链、Sitemap、canonical 和历史信号判断,挑中的未必是你想要的那个。
可以按这个顺序处理
- 站内先统一。导航、列表页、分页、面包屑、分享按钮里输出的链接,全部写成规范形式。很多重复地址是站内自己生成的,先断掉这个源头。
- 服务器层做 301,把变体指向唯一地址,并且只跳一跳,不要 A 跳 B、B 再跳 C。
- 用 canonical 补充说明,但要清楚它是提示信号,不能替代前两步,也不该用它掩盖可以 301 的重复。
- Sitemap 只提交规范地址,不要把几种写法都塞进去,否则等于主动告诉蜘蛛这些地址都值得抓。
- 不要用 robots.txt 屏蔽代替归一化。屏蔽只影响抓取,地址仍可能被索引,问题会变得更难解释。
参数类地址要单独管
筛选、排序、跟踪参数是重复地址的主要来源。能读参数但内容几乎不变的组合页,最好在站内就不生成链接;必须存在的组合页,则应明确哪些值得留下、哪些可以收敛。放任站内到处带参数,等于持续给蜘蛛提供新的抓取入口。
多出来的跳转本身也在消耗时间
归一化没做好的站点,往往同时存在一长串重定向。每一跳都要重新建立请求、等待响应,蜘蛛花在跳转上的时间是拿不回来的。如果前面还有 CDN 或负载均衡把不同主机名解析到不同节点,同一页面的响应表现可能不一致,抓取节奏也会被拖慢。
怎么验证是否生效
- 按路径去重统计抓取日志,看同一篇内容对应几条 URL,是否有变体仍在被抓。
- 抽查 301 链长度,超过一跳的整理成直接跳转。
- 核对内链输出、canonical、Sitemap 三处写的地址是否完全一致。
- 观察站内工具里的重复页面报告,数量是否在下降。
归一化解决的是减少重复、把抓取资源腾出来给真正不同的页面,它本身并不保证页面被收录或获得排名。