搜索抓取

抓取路径里的死循环:日历、筛选与参数组合怎么把蜘蛛绕晕

日历归档、筛选排序、无限滚动这几类页面,容易让蜘蛛沿着链接走进没有终点的路径。本文拆解无限 URL 是怎么生成的、对抓取有什么实际影响,以及用分页上限、参数收敛、robots 与 noindex 把路径收回到有边界的范围。

搜索抓取

抓取路径里的死循环:日历、筛选与参数组合怎么把蜘蛛绕晕

蜘蛛顺着链接走,本身没有记忆,也不会判断这条路是否值得再走一遍。页面只要提供了带参数的链接,它就会照着走;链接再生成链接,路径就可能越铺越长。日历、筛选、排序、多条件组合这几类页面,是最容易让蜘蛛走进循环的地方——不是抓不到内容,而是抓了大量几乎一样的页面,把有限的抓取机会花在了重复路径上。

无限路径是怎么产生的

循环的起点通常很普通,就是页面上的几条普通链接。问题在于这些链接能互相指向,形成一条没有终点的链。

日历归档

日期归档往往是“上一月/下一月”两条链接。单看很少,但如果每一层日历都能指向相邻月份,蜘蛛就会沿着月份一路走下去,理论上没有尽头。站点越老,这条链越长,抓取时被消耗的请求也越多。

筛选与排序参数

列表页加上颜色、价格区间、排序方式之后,URL 组合会成倍增长。三个筛选维度各有五个选项,理论上就能生成上百个地址;如果这些筛选结果之间还能互相点击,组合数会继续膨胀。对蜘蛛来说,每一个 URL 都是一个待抓任务。

无限滚动与分页叠加

无限滚动把内容加载放在前端,如果同时又保留传统分页链接,同一批内容就会出现多套入口。滚动触发的新 URL 一旦被记录,抓取路径也会跟着一起变长。

循环对抓取的实际影响

  • 待抓队列被低价值 URL 占住,真正有更新的页面回访变慢
  • 同一批内容被反复抓取,日志里出现大量结构相似的路径
  • 服务器承担不必要的请求,在访问高峰期会更明显

这些问题不会立刻表现在收录上,但会体现在“蜘蛛来得挺勤,新内容却总慢半拍”的体感里。

先判断站内有没有循环

日志是最直接的证据。翻一段时间内的抓取记录,可以留意几个信号:

  • 单日被抓取的 URL 数量,明显高于站点实际页面总数
  • 路径中出现连续叠加的参数,例如颜色、价格、排序字段反复同时出现
  • 某个模板页面的抓取次数,远高于同目录下的内容页
  • 新发布的页面迟迟没有回访,而老筛选页却反复被抓

如果这些情况同时出现,基本可以确认抓取路径存在失控的岔口。

处理思路

  1. 收敛参数:筛选、排序类链接只保留少数有搜索价值的组合,合并同义参数,固定参数顺序,避免同一结果对应多个地址。
  2. 给翻页设上限:日历、归档、列表页只输出到合理的页数,超出部分不再生成链接,用户需要时可以通过搜索进入。
  3. 区分处理手段:完全不希望被抓的路径用 robots.txt 拦在门外;仍希望被发现、但不希望大量重复抓取的页面,用页面级 noindex 更合适。两者作用不同,别混着用。
  4. 保留一条主路径:无限滚动场景下,仍然保留一套清晰的分页 URL,作为可抓取的入口,而不是只依赖前端加载。
  5. 用 Sitemap 标注重点:把内容页、分类页这些真正的主路径放进 Sitemap,让蜘蛛有一个明确的参照,而不是全靠顺着链接摸索。

堵住路径之后,别把出口一起关掉

限制抓取路径时,最容易被顺手关掉的是新内容的入口。列表页、详情页、分类页之间的正常内链要保留;被限制的应当只是那些可组合、会无限增长的参数路径。改完之后观察一段时间日志,看抓取总量是否回落到接近站点页面规模的水平,以及新页面的首次抓取是否变快,再决定要不要继续收紧。

抓取路径不是越短越好,而是要有边界。给蜘蛛一条走得完的路,比给它无数条相似的路更有用。