搜索抓取

大小写、末尾斜杠与参数顺序:同一页面被蜘蛛当成多个 URL 之后

同一个页面,因为大小写、末尾斜杠、参数顺序或追踪参数不同,在蜘蛛眼里会变成好几条地址,抓取预算就这样被慢慢消耗。本文讲清蜘蛛是按字符串去重的、哪些写法最容易派生重复 URL、怎么用日志确认是否真的重复抓取,以及从跳转规则和模板链接两处入手的收敛思路。

搜索抓取

大小写、末尾斜杠与参数顺序:同一页面被蜘蛛当成多个 URL 之后

很多站点在日志里会看到这样一种情况:明明只做了一个详情页,蜘蛛却抓了三四条地址,内容一模一样,只是大小写、斜杠或者参数顺序不同。这不是蜘蛛多事,而是这些 URL 在它眼里确实是不同的地址。

蜘蛛判断是不是同一个页面的依据

蜘蛛的待抓队列是按 URL 字符串去重的。它不会先抓回来看看内容再决定要不要跳过——只要字符串不同,就当成新地址排进队列。至于两个 URL 是不是同一个页面,它只能靠页面里的 canonical、站内跳转以及自身的内容比对去判断,判断错了的代价由站点承担。

最常见的几种重复形态

大小写与末尾斜杠

/Article/123 和 /article/123 在很多服务器上都能返回 200,但它们是两个字符串。/list 和 /list/ 同理。如果服务器不做统一跳转,蜘蛛会把两边各抓一遍,内容再比对一次。

参数顺序与无用参数

?a=1&b=2 与 ?b=2&a=1 指向同一份内容,对蜘蛛却是两条 URL。再加上排序、每页条数、来源渠道参数,一个列表页很容易派生出几十条地址。

编码与追踪参数

中文参数被编码成 %E4%B8%AD 还是保留原样、路径里多余的 ./ 或 //、跟踪会话用的 sid,都会衍生新地址。这类 URL 往往还能正常返回 200,进一步坐实了它是一条独立页面。

先确认有没有真的被重复抓

别急着改代码,先用日志核对:

  • 把同一路径的多种写法筛出来,看各自被抓的次数和时间分布;
  • 看这些重复抓取占了多少比例,尤其是列表页和筛选页;
  • 观察重复 URL 是否也被收录,是否在结果里互相竞争。

如果重复量很小,处理优先级可以往后放;如果列表页参数组合动辄上千条,就该动手收敛了。

收敛的思路

  1. 服务器层统一。用 301 把大小写、末尾斜杠、多余参数归到唯一形态。跳转要一步到位,别串成链。
  2. 站内链接只输出一种写法。模板、面包屑、分页、分享按钮都指向规范地址,别让不同模块各写各的。
  3. canonical 兜底。页面上明确声明规范地址,对已经散出去的旧写法也有一定补救作用。
  4. 参数做减法。无意义参数不要出现在链接里,渠道追踪参数交给前端或统计脚本处理,别写进 href。
  5. robots 与 noindex 慎用。拦截不想抓的参数组合时要小心,别连带把正常路径也挡在外面。
规范化的目标是让每条内容只有一个可以稳定抓取、稳定指向的地址,而不是把所有变体都藏起来。藏得太多,蜘蛛可能连正主都找不到。

小结

URL 规范化听起来是技术细节,实际影响的是抓取预算和收录质量。把同一份内容的地址收敛成一条,蜘蛛省下的抓取次数就会用在真正的新页面上。这件事不需要复杂方案,多数情况下从跳转规则和模板链接两处入手就能看到变化。