搜索抓取

蜘蛛陷阱与无限 URL 空间:抓取路径陷入循环的识别与收敛

站点结构如果生成近乎无限的 URL 空间,蜘蛛就会沿着链接一直走下去,把抓取次数消耗在低价值页面上。本文整理日历、分页、筛选参数、会话标识等常见成因,给出从日志识别循环迹象、逐步收敛抓取路径以及验证调整效果的实操思路。

搜索抓取

蜘蛛陷阱与无限 URL 空间:抓取路径陷入循环的识别与收敛

蜘蛛陷阱是什么

蜘蛛陷阱不是某个具体漏洞,而是站点结构上制造出的“看起来永远有新页面”的 URL 空间。蜘蛛沿着链接一层层走,每走一步都能发现新链接,却始终走不到尽头。结果是抓取次数被大量消耗在低价值 URL 上,真正需要被发现的页面反而排在后面。

常见的无限 URL 空间来源

日历与日期归档

“上一年 / 下一年”“前一天 / 后一天”这类链接如果没有任何边界,蜘蛛可以从当前日期一路翻到很久以前,每一天都生成一个可访问的归档页。

分页无限延伸

部分列表页在超出实际数据范围后仍然返回 200 并展示空列表,同时保留“下一页”链接,形成一条没有终点的分页链。

筛选与排序参数组合

颜色、价格、品牌、排序方式自由组合,参数越多组合越呈指数增长,而且每个组合都能生成一个可访问的 URL。

会话标识与追踪参数

URL 中携带 session、ref、utm 等参数,同一份内容被复制成大量变体,蜘蛛会把它当作不同入口反复抓取。

动态目录层级

某些程序会把不存在的目录路径也渲染成页面,返回 200 并填充相似内容,让路径可以无限拼接下去。

从日志中识别循环迹象

  • 同一路径前缀下的 URL 数量在几天内持续增长,而且长度越来越长;
  • 抓取总量保持稳定,但有效内容页的抓取数量没有变化;
  • 大量 URL 只在日志里出现,却始终没有进入索引;
  • 参数组合类 URL 的抓取占比明显高于栏目页与内容页;
  • 抓取时段服务器负载抬升,但并不对应真实的访问需求。

把日志按路径前缀聚合,观察抓取次数的分布,比逐条翻日志更容易看出问题。

收敛抓取路径的几种做法

  1. 给分页设上限,超出范围返回 404,或不再输出“下一页”链接;
  2. 筛选参数只在确有搜索需求时保留,其余组合统一通过 robots.txt 或 canonical 处理;
  3. 清理 URL 中的会话与追踪参数,保持同一内容只有一个规范地址;
  4. 日历类页面只保留有内容的时间段,空归档直接下架;
  5. 对确实无价值的入口使用 nofollow,减少蜘蛛沿链接向外扩散。

这些调整不必一次做完,可以先处理抓取占比最高的那一类,再逐步收紧其他入口。

确认收敛是否生效

调整后继续观察日志中的抓取分布:如果同一前缀下的 URL 数量停止增长,参数类 URL 的抓取占比下降,而内容页与栏目页的抓取次数保持或上升,说明路径正在收敛。反之,如果只是总数下降、有效页面也没被抓到,需要检查是不是把正常入口一起挡掉了。

判断标准不是抓取次数的多少,而是这些抓取次数有没有落在你希望被发现的 URL 上。