搜索抓取

抓取陷阱:URL 无限展开时蜘蛛会怎么走

站点在分页、筛选、会话参数上稍有不慎,就会生成可以无限展开的 URL,让蜘蛛顺着链接一路爬下去。本文拆解几类常见的抓取陷阱,说明它们如何挤占抓取容量,并给出从日志识别、参数收口到 robots 与 canonical 配合的处理思路。

搜索抓取

抓取陷阱:URL 无限展开时蜘蛛会怎么走

如果一个站点的 URL 是有限的,蜘蛛迟早会爬完;但如果 URL 能无限生成,蜘蛛就会一直爬下去。抓取陷阱指的就是后者——站点在无意中提供了一条可以自我繁殖的抓取路径,蜘蛛顺着走下去,越走越远,却始终碰不到真正的尽头。

常见的几种无限展开

  • 日历分页:日期归档里给每一天都生成「下一天」的链接,可以一直点到很久以前或未来。
  • 参数组合:筛选、排序、视图切换、每页条数叠加在一起,同一批商品能拼出成百上千个 URL。
  • 会话与追踪参数:地址上挂着 sessionid、from、ref 之类的值,同一个页面每次访问看起来都像新地址。
  • 站内搜索结果页:搜索框可被任意关键词触发,蜘蛛顺着链接就能穷举出无数个结果页。
  • 多版本页面:打印版、移动版、分享短链各自成 URL,内容却几乎一样。

为什么蜘蛛会一直爬下去

蜘蛛没有「这个站我爬够了」的判断,它靠的是链接和信号。只要一个 URL 返回 200,并且页面上还有其他没见过的链接,它就会被放进待抓队列。URL 生成的成本越低,队列就越长,而站点的抓取容量是有限的——被这些低价值地址占掉的份额,正是深层内容拿不到的那部分。

另一个容易被忽略的点是重复内容。同一套内容分散在几十个 URL 上,搜索引擎需要在它们之间做选择,权重被摊薄,页面之间也很难形成清晰的主版本。

从日志里认出来

看几组数字就够了:蜘蛛访问的 URL 里,带参数的比例有多高;同一路径下不同参数组合被访问的次数,是否远高于正文页;单个会话里蜘蛛连续访问的地址,是否呈现明显的排列组合特征。如果某类 URL 的抓取量占比很高、但带来流量的比例很低,基本可以确认是陷阱。

处理思路

  1. 先判断价值:有搜索需求、有转化价值的参数组合留着,纯排列组合的砍掉。
  2. 用参数规范收口:站内链接统一只保留必要的参数,视图、排序类参数尽量用前端方式处理,不写进 href。
  3. 加上抓取约束:对无价值路径用 robots.txt 的 Disallow 拦住,但要清楚它只是不让抓,并不等于 URL 不会被索引,必要时配合 noindex,而 noindex 需要页面能被抓取才生效,两者的作用范围要分开处理。
  4. 管住会话与追踪参数:内部链接里不要带 sessionid、utm 等值,让蜘蛛看到的地址是干净的。
  5. 明确主版本:多版本内容用 canonical 指向主页面,让重复的地址有统一出口。
  6. 给蜘蛛留出目录:用 Sitemap 主动提交真正需要被发现的 URL,让蜘蛛不必自己去穷举。

改完之后怎么验证

调整后不要指望隔天见效,抓取结构的重建需要一段时间。可以持续观察蜘蛛对各目录的访问占比是否变化,正文页的抓取频次有没有回升。也可以用站内日志对比调整前后同一批 URL 的访问次数,看排列组合类的地址是否明显减少。

抓取陷阱很少是有人故意造的,多数是分页、筛选、追踪参数在日常迭代里一点点堆出来的。定期翻一次日志,比事后花几个月清理要省力得多。