很多站点为了多做出一些入口页,会顺手上线分页、日历、筛选、排序这类功能。对用户来说这是方便,但对蜘蛛来说,如果缺少边界控制,它们会变成一条条走不完的路径——这就是常说的爬虫陷阱。蜘蛛池入口页本身数量就多,一旦再叠加上无边界路径,抓取资源会被大量消耗在重复、低价值的组合上。
爬虫陷阱的典型表现
爬虫陷阱不是什么攻击,而是页面结构与链接规则共同造成的“走不完”。常见表现是:日志里蜘蛛抓取量看着不低,但落在核心入口页上的次数反而变少;同一组参数被反复组合抓取;索引中出现大量内容雷同的页面。
入口页常见的三类陷阱
1. 分页没有终点
列表页的“下一页”如果永远存在,即使后面已经没有数据,也仍然返回 200 并带着下一页链接,蜘蛛就会一直跟下去。比较稳妥的做法是最后一页不再输出下一页链接,或者对超出范围的页码返回 404、410。
2. 日历与时间筛选
日期选择器生成的 URL 往往是无限组合:任意年月、任意区间都能拼出一个可访问页面,内容却是空的或高度重复。这类 URL 建议不要放进可抓取的链接里,或者限制只开放有限的日期范围。
3. 多条件筛选与排序
筛选条件相乘后会产生指数级的 URL 组合。蜘蛛并不需要遍历所有组合,只保留有内容、有实际需求的少数组合即可,其余可以靠 robots、canonical,或者干脆不在页面上输出链接来控制。
为什么蜘蛛池场景要格外注意
蜘蛛池入口页通常走的是批量生成、批量维护的路子,域名与页面数量本身已经摊薄了抓取资源。这时候再让陷阱路径分走一部分抓取,核心入口页被发现和回访的概率就会下降。换句话说,陷阱吃掉的不只是带宽,还有入口页的更新机会。
排查思路
- 拉一段时间的访问日志,按 URL 模式聚合,看哪些参数组合被高频抓取。
- 检查列表页与筛选页,确认是否存在“没有数据也返回 200 并带下一页链接”的情况。
- 站内抽样或看索引状态,判断是否有大量内容雷同的页面被收录。
- 对比陷阱路径与核心入口页的抓取占比,估一下影响程度。
处理建议
- 给分页设置明确上限,超出的页码返回 404 或 410,不要用 200 兜底。
- 筛选、排序、日历参数尽量不要出现在可抓取的 a 标签 里,改用表单或 JS 触发。
- 对确实想保留的组合页,补上唯一的 title、正文与 canonical,避免和主列表页重复。
- 在 robots 里屏蔽纯参数路径时注意粒度,屏蔽过宽会连带挡掉有价值的页面。
- 改动上线后观察一段时间的抓取分布,确认核心入口页的抓取次数是否回升。
爬虫陷阱的关键不是“蜘蛛来了”,而是“蜘蛛走不掉”。把路径边界画清楚,通常比单纯堆入口页数量更划算。
最后提醒一句:抓取分配是动态的,任何调整都需要时间观察,很难改完第二天就见效。把结构理顺、把边界定清楚,长期看更省心。