蜘蛛池的入口页通常数量不少,如果蜘蛛来得太密,带宽、CPU、数据库连接都会被占用,入口页响应变慢,反而影响后续抓取。与其等服务器扛不住再处理,不如提前想清楚抓取频次该怎么控制。需要说明的是,控制频次的目标是让蜘蛛稳定地发现 URL,而不是把它挡在门外。
为什么入口页需要控制抓取频次
入口页的作用是给蜘蛛提供发现路径,页面本身不一定承载大量内容。当蜘蛛高频访问同一批入口页时,会出现几个问题:
- 服务器资源被重复请求消耗,正常用户的访问也可能变慢;
- 蜘蛛把时间花在低价值页面上,真正的目标页面反而被拖延;
- 日志被大量重复抓取记录淹没,不利于判断哪些入口页有效。
因此,控制频次不是为了让蜘蛛少来,而是让它来得有节奏、有重点。
crawl-delay 能做什么,不能做什么
crawl-delay 写在 robots.txt 中,用来建议蜘蛛两次请求之间至少间隔多少秒。它属于建议而非强制指令,不同搜索引擎的支持程度并不一致。Google 官方不把它当作标准限速方式,部分搜索引擎会参考,部分则按自己的抓取节奏来。所以不能把 crawl-delay 当成精确的流量开关。
- 可以把它当作一个温和的提醒,适合希望蜘蛛放慢速度的站点;
- 不要指望设置后立刻生效,也不要频繁修改数值;
- 如果服务器压力已经很大,仅靠 crawl-delay 往往不够。
服务器侧的并发限制更直接
相比 robots.txt 里的建议,服务器侧的限流更可控。常见做法包括限制单 IP 连接数、对同一路径做频次限制、在 Nginx 或 WAF 层面对异常高频请求做排队或延迟响应。但这里有一个前提:先分清哪些是真蜘蛛,哪些是伪装流量。如果不做校验就直接封 IP,可能误伤搜索引擎的正常抓取。
- 结合抓取日志观察真实频次,不要凭感觉设阈值;
- 对已确认的蜘蛛保留合理余量,避免正常抓取被限死;
- 临时限流可以用 503 配合 Retry-After,而不是长期返回 403;
- 如果入口页本身是静态文件,优先考虑缓存,减少重复计算。
设置 crawl-delay 的常见误区
- 以为数值越大约好。设置过长会让蜘蛛减少访问,入口页发现效率下降。
- 全站只有一个值。内容页和入口页的抓取价值不同,但在 robots.txt 中通常只能按路径或整站设置,需要结合实际取舍。
- 频繁调整。今天 5 秒、明天 20 秒,蜘蛛的抓取节奏也会不稳定,不利于观察效果。
- 用 robots.txt 屏蔽后还想让蜘蛛抓。屏蔽和限速是两回事,屏蔽会直接阻止抓取。
一个相对稳妥的调整顺序
- 先看至少一到两周的抓取日志,记录蜘蛛的访问高峰、平均间隔和状态码分布。
- 从较宽松的 crawl-delay 开始,例如 1 到 5 秒,观察服务器压力和蜘蛛访问量的变化。
- 如果压力仍然偏高,优先在服务器侧做并发控制,而不是继续加大 crawl-delay。
- 保持入口页可访问、返回码稳定,避免频繁出现超时和 5xx。
- 每隔一段时间复查日志,确认限流没有误伤正常抓取。
抓取频次控制的核心,是让入口页在被稳定发现的同时,不给服务器造成不必要的负担。限流是手段,不是目的。
小结
蜘蛛池入口页的抓取频次控制,不能只依赖 crawl-delay。更实际的做法是先用日志建立基线,再结合服务器侧并发限制和缓存策略,把抓取节奏控制在可承受范围内。过程中要持续观察真蜘蛛的访问是否正常,避免因为过度限制而影响 URL 发现。