抓取配额有限,陷阱会把它吃掉
搜索引擎给每个站点的抓取量是动态调整的,和站点质量、更新频率、历史响应速度都有关系。蜘蛛池里的入口页往往数量多、单页内容薄,本身拿到的抓取份额就不高。如果入口页还存在爬虫陷阱,也就是那种能让蜘蛛不断生成新 URL、却始终走不到有效内容的结构,抓取量就会被大量消耗在无意义的地址上,真正想被发现的页面反而排不上队。
入口页里最常见的几类陷阱
相对链接写错,路径无限叠加
假设页面里写了一个指向 page.html 的相对链接,而当前地址是 /a/b/c/,蜘蛛顺着走到 /a/b/c/page.html,再往下又生成 /a/b/c/page.html/page.html,如此反复。这种叠加在头两层看不出来,抓几十次之后就变成一堆噪声地址。检查方法很直接:确认目录层级和 base 标签,或者干脆把所有链接统一写成绝对路径。
参数组合爆炸
筛选、排序、分页、每页条数、session id、来源标记,这几个参数一旦同时出现在 URL 里,组合数就是乘法关系。颜色加尺寸加页码加排序,蜘蛛会挨个试过去。如果页面内容只和其中一两个参数有关,其余参数只影响展示方式,就应该在 robots 规则或规范链接上做约束,或者让这些参数根本不生成新地址。
日历、归档与猜日期
有些入口页带日期归档结构,蜘蛛会顺着月份一直往下猜,一直猜到空页面为止。空页面如果返回 200,就会被当成有效页继续抓取和扩散。要么让空归档返回 404,要么不要让蜘蛛拿到这些日期链接。
站内搜索结果页
搜索框提交后生成的 /search?q= 这类地址,如果不加限制,蜘蛛会拿各种词去试,甚至顺着页面上的相关搜索继续扩散。这类页面通常内容重复、质量偏低,应该屏蔽或至少加 noindex。
软 404
返回 200 但内容其实是“没有找到”,蜘蛛会把它当作正常页收录并继续抓。软 404 积累多了,整个站点的抓取评价都会受影响。
为什么在蜘蛛池里这个问题更明显
入口页承担的是“被发现的通道”这个功能,页面数量多、单页价值低,单个页面分到的抓取次数可能只有个位数。一旦存在陷阱,这几次抓取就全花在生成新 URL 上,等于入口页白铺了。更麻烦的是,多个入口页如果共用同一套模板,同一个陷阱会被复制很多份,日志里看到的抓取总量很好看,有效 URL 却没增加多少。所以看日志不要只盯总数,要按 URL 模式归类,看有多少抓取真正落在预期目录里。
排查顺序
- 拉一份最近的抓取日志,按 URL 路径前缀做聚类,把占比最高的几个路径列出来。
- 确认这些路径是不是你想要的。如果排在前面的都是 search、calendar、sort 这类,问题基本就确认了。
- 随机挑几个被抓取过的 URL 手动访问,核对返回码和实际内容是否匹配。
- 回头检查模板里的链接生成逻辑,重点看分页、筛选和相关推荐模块。
处理建议
- 能不用参数就不用参数,筛选和排序尽量做在前端交互里,不生成新地址。
- 必须保留的参数,用 robots.txt 做限制,注意规则写太宽会误伤正常页面。
- 空结果、空归档统一返回 404 或 410,不要用 200 加一句“暂无内容”。
- 分页设置上限,只让前几页可抓,后面的链接用 nofollow 或直接截断。
- 链接统一用绝对路径,避免路径叠加。
抓取配额不会因为你铺了更多入口页就等比例增加。把现有的抓取量集中在少数有效路径上,通常比继续加页面更划算。
一个容易忽略的检查点
处理完之后不要立刻判断有效,蜘蛛的行为有滞后。观察一两周,看日志里 search、calendar 这类路径的抓取占比是否下降,同时预期目录的抓取数量有没有上升。如果只是总量下降,说明这些地址被压住了,但蜘蛛并没有被引导到目标页,还需要检查内链是不是真的把它带了过去。