先把能直接观察到的结果记下来,再逐项排除,比反复试参数省时间。 服务器日志里 Googlebot 间隔不到一秒就来一次,robots.txt 里明明写了 Crawl-delay: 10,抓取频率一点没降,带宽和 CPU 都被拖得很高。
这类问题不处理会继续放大,轻则个别请求失败,重则整批任务全部卡住。
先分清是哪一类原因
- Google 早已不支持 Crawl-delay,只认 Bing 和 Yandex 两家
- 真实抓取频率由服务器响应时间和抓取预算决定,不是这行参数
- 限流写在 robots 而不是 Nginx,蜘蛛读完这行直接忽略继续高频抓取
按顺序处理
1. 确认 robots 里的写法有没有被解析
curl -s https://www.example.com/robots.txt | grep -i crawl
2. 在 Nginx 里按 UA 做并发限制
limit_req_zone $http_user_agent zone=bot:10m rate=2r/s;
3. 统计单 IP 的请求间隔验证效果
awk '{print $4}' access.log | cut -c14-18 | sort | uniq -c
怎么确认已经恢复
同一 IP 每分钟请求数从六十次降到二十次左右,日志里不再出现连续同一秒的密集抓取,负载曲线同时回落。
容易忽略的地方
Bing 认这个参数,但站点如果已经提交 IndexNow,调它基本没有意义,Bing 会按推送即时抓取,绕开你设的间隔。 线上环境和本地环境的差异往往就在版本和默认参数上,比对一下两边的实际取值能省很多时间。