Crawl-delay 与 robots.txt 的区别
Crawl-delay 不是独立协议,是 robots.txt 里的一条限速指令:声明同一爬虫两次请求之间的间隔秒数。它与同文件的 Disallow/Allow 管的是两件事——许可规则管“能不能来”,Crawl-delay 管“来了多快”。混淆的代价在于支持面:Google 的 robots 规范只支持 user-agent、allow、disallow、sitemap 四个字段,明确不支持 Crawl-delay,写给 Googlebot 的限速行纯属无效。
对照表
| 维度 | Disallow/Allow | Crawl-delay |
|---|---|---|
| 管什么 | 抓取许可 | 抓取频率(请求间隔秒数) |
| 支持 | 明确不支持,限速走官方 reduce-crawl-rate 通道 | |
| Anthropic(ClaudeBot) | 遵守 | 尊重——少数官方支持的大厂爬虫 |
| Applebot | 遵守 | 不遵守 |
| 各家支持面 | RFC 9309 语义,相对统一 | 无系统清单,逐家核对官方文档 |
| 协议效力 | 君子协定,user-triggered 类不在约束内 | 同左,且支持面更碎 |
常见混淆
一是以为 robots.txt 能限速:Google 侧写 Crawl-delay 无效,想给 Googlebot 降速只能用官方 reduce-crawl-rate 通道。二是以为 robots.txt 本身能“上锁”:4xx(429 除外)状态码等于无任何限制,用 401/403 挡 robots.txt 既挡不了抓取也不能限速。三是把限速期待全寄托在协议层:Bytespider 这类无官方合规承诺的爬虫,社区多方报告不遵守 robots.txt,可靠拦截要到 IP/WAF 层——协议表达偏好,边缘层执行决策。
选用建议
决策顺序:想挡,用逐条具名组的 Disallow(注意具名组不继承 * 组,每条爬虫单独写);想限速,先查该爬虫厂商文档是否支持 Crawl-delay——Anthropic 尊重、Applebot 不理、Google 无效,各家口径不一;Google 用官方通道,Perplexity 建议 UA 加 IP 双重校验并定时刷新。协议管不到的部分(user-triggered 爬虫、无视者),闸门在 WAF 与边缘层。语法与配置矩阵见robots.txt AI 配置矩阵,逐条爬虫的支持口径见AI 爬虫全景档案表与爬虫访问控制实战档案,协议语义见robots.txt(AI 语境)。