搜索抓取

站内搜索与日历页:蜘蛛掉进 URL 陷阱后的封堵与出口设计

站内搜索、日历控件和排序参数会按组合生成大量地址,把抓取资源摊薄。本文梳理 URL 陷阱的常见成因,给出用抓取日志判断是否掉坑的方法,并整理内链收敛、参数规范、Sitemap 与 robots.txt 的配合顺序,以及调整之后的观察重点。

搜索抓取

站内搜索与日历页:蜘蛛掉进 URL 陷阱后的封堵与出口设计

很多站点的抓取问题不是出在重要页面抓不到,而是出在蜘蛛被大量无意义的地址带走。站内搜索结果页、日历页、排序与筛选参数,都能在很短时间里生成成千上万个地址。这些地址往往内容稀薄、互相重复,却和内链、Sitemap 处在同一层,蜘蛛很难自己判断哪个该放弃。

URL 陷阱是怎么形成的

常见的结构是:一个基础页加一组可选参数,参数可以任意组合,页面之间又互相链接。地址数量按组合数增长,而不是按内容量增长。几类典型情况:

  • 站内搜索结果页可以被索引,而结果页里又带分页链接,形成自我循环;
  • 日历控件每天都能生成一个新日期地址;
  • 排序参数(按价格、按时间、按销量)各自成页,且都带完整内链;
  • 会话 ID、来源追踪参数被写进链接,同一内容产生多个地址;
  • 打印页、移动版、AMP 版没有做规范收敛,各自成为一套独立路径。

这些地址本身不一定错误,问题在于数量失控后会摊薄抓取资源,也让重要栏目和详情页的抓取间隔被拉长。

先确认蜘蛛是不是真的掉进去了

不要凭感觉判断,可以从抓取日志和站点工具里找证据:

  1. 统计一段时间内被抓取地址的分布,看带参数的地址占比是否明显高于内容页;
  2. 看抓取频次最高的目录是哪一个,是否集中在站内搜索、日历或标签页;
  3. 把 Sitemap 里的规范地址与日志里实际被抓的地址对照,差集有多大;
  4. 抽查这些地址返回的状态码与内容,是否存在大量近似重复的正文。
如果抓取量在涨、但新增收录的实质内容没涨,通常说明资源被低价值地址消耗了。

封堵手段的边界要清楚

几种常用做法效果不同,需要分清:

  • robots.txt 的 Disallow:阻止抓取,但已收录或被外链指向的地址仍可能出现在结果里;
  • noindex:必须允许抓取才能生效,和 Disallow 同时用会互相抵消;
  • rel=canonical:用于合并近似页面,属于建议信号,不能替代入口收敛;
  • nofollow 或直接移除链接:减少蜘蛛发现新组合地址的机会,通常是最直接的一步。

实践顺序一般是:先减少内链出口,再处理参数规则,最后才考虑屏蔽。只做屏蔽而不动内链,蜘蛛仍会反复尝试已经知道的地址。

给蜘蛛留下有用的出口

封堵的同时,要保证主路径依然通畅。可以按下面的做法自查:

  1. 分类页、分页、详情页保持普通 HTML 链接可达,不完全依赖脚本点击;
  2. Sitemap 只提交规范地址,不把筛选组合写进去;
  3. 分页使用可抓取的链接形式,并限制最大页数;
  4. 站内搜索页设 noindex 或禁止抓取,同时从主导航和正文区域移除入口;
  5. 排序、筛选默认走参数并做规范合并,避免每个组合生成独立静态地址。

改完之后看什么

调整不会立刻见效,通常要观察几周的抓取日志:带参数地址的抓取占比是否下降、重要目录的抓取频次是否回升、Sitemap 中包含的地址被抓取的比例是否提高。如果发现抓取总量整体下滑、而内容页的抓取并没有跟上,说明封堵过紧,需要把必要路径重新放出来。抓取结构的调整更像调阀门,需要边看日志边微调,而不是一次设置完就不再管。