搜索抓取

筛选参数、日历与分页叠加:蜘蛛走进无限抓取路径时怎么收口

蜘蛛顺着链接走,一旦筛选、排序、日历和分页互相叠加,URL 数量就会成倍膨胀,抓取预算被消耗在大量近似页面上。本文梳理这类路径的常见生成方式,以及从链接、参数到 Sitemap 的收口思路,并给出日志层面的判断方法。

搜索抓取

筛选参数、日历与分页叠加:蜘蛛走进无限抓取路径时怎么收口

蜘蛛在站点里是靠链接走的。链接越规整,路径越短;链接一旦出现排列组合,同一个页面就会被拆成成百上千个地址。筛选参数、排序参数、日历归档和分页这几类结构叠加在一起时,最容易出现所谓的“无限抓取路径”——蜘蛛每次都能发现新 URL,于是不断往下走,抓取次数上去了,真正有内容的页面却没多几个。

无限路径是怎么长出来的

单个参数通常不致命,问题出在叠加。下面这些元素单独看都合理,组合之后 URL 空间是乘法增长的。

  • 筛选条件支持多选,颜色、尺寸、品牌、价格区间任意搭配;
  • 排序参数(价格、时间、销量、好评)再与筛选自由组合;
  • 日历按年、月、日逐级展开,每一层都是可点击链接;
  • 分页用参数控制,页码又和筛选、排序拼在同一个地址里;
  • 会话 ID、来源追踪参数附着在每条站内链接上。

三类常见结构

筛选与排序的排列组合

类似 /list?color=red&size=40&sort=price&page=2 这样的地址,颜色、尺寸、排序、页码任意组合都能得到一个能正常打开的页面,而内容与主列表差别很小。蜘蛛无法判断哪一条才是主地址,只能一条条抓过去。

日历式归档

日期归档在内容站很常见,年、月、日三层嵌套,再叠加分页,路径会越走越深。多数日期页内容稀疏,甚至只有一条记录,却同样占用一次抓取。

分页与参数混用

同一份列表既可以用路径形式的分页访问,也可以用带 page 参数的地址访问,两条路径通向相同内容。蜘蛛会当作两个入口分别抓取,路径数量随之翻倍。

怎么判断已经踩进去了

这类问题在收录面板上不一定明显,但在访问日志里很容易看出来。可以按 URL 模板归类,逐个观察数量变化:

  • 大量 URL 只有参数顺序或取值不同,页面标题模板完全一致;
  • 抓取次数持续上升,索引量和有效流量没有同步变化;
  • 某个模板的 URL 数量在几天内不断增长,看不到上限;
  • 蜘蛛停留的目录层级越来越深,新增内容页却很少。

从几处收口

收口的原则是让蜘蛛只看到一类稳定地址,其余组合尽量不让它顺着链接走到。可以按下面的顺序处理:

  • 用 robots.txt 有选择地屏蔽参数,注意只屏蔽确实不需要被搜到的组合;
  • 列表入口固定成一条干净路径,分页尽量用路径形式而不是参数;
  • 用 canonical 指向规范地址,避免同一份内容被当成多个页面处理;
  • 站内链接只提供有限组合,例如只给单选筛选做链接,多选组合交由用户表单提交;
  • Sitemap 只放内容页和稳定的列表页,不要把参数组合写进去;
  • nofollow 和 robots 屏蔽都有效果,但都会影响链接权重的传递,用之前想清楚。
收口不等于一刀切屏蔽所有参数。真正有搜索需求、能当作落地页的筛选结果,值得保留并给出规范地址;需要挡住的是剩下那批大批量的近似组合。

服务器与抓取预算的连带影响

参数组合爆炸不只浪费抓取预算,也会给服务器带来压力。蜘蛛并发上来后,如果每个请求都要实时查询数据库,响应变慢,整体抓取节奏会被拖下来,重要页面反而抓得更少。给列表页加缓存、限制无意义的深翻页,往往比调整服务器配置更直接。

定期把日志按 URL 模板归类看一眼,比等到索引出问题再处理省事得多。发现某个模板的 URL 数量在持续增长,基本就是该收口的信号。