记录一下那天晚上的排查过程。日志里 Googlebot 对 robots.txt 的请求稳定在每小时一次,一天二十四次,有人担心这是异常抓取,想把频率压下去。

刚开始盯着「sitemap 地址写在 robots 里,蜘蛛每次读文件都在核对」,折腾了半个多小时,排掉了。

这类报错背后常见的原因有几处,逐个排除就行。robots.txt 默认有缓存期,过期后蜘蛛会重新校验一次。少数情况下是源站没有返回 Cache-Control,边缘缓存不生效。

少数情况下是站点近期的 5xx 让缓存提前失效,抓取端更频繁回来确认。

动手时先统计 robots 的请求间隔

grep 'robots.txt' access.log | awk '{print $4}' | cut -c14-16 | sort | uniq -c | head

再往下确认响应头有没有缓存指令

curl -sI https://www.example.com/robots.txt | grep -i 'cache-control\|expires'

给 robots 加一天缓存

location = /robots.txt { add_header Cache-Control "public, max-age=86400"; }

复查缓存头是否生效

curl -sI https://www.example.com/robots.txt | grep -i cache

怎么算真的好了,看的是同一批现象。robots 的请求量下降到每天几次,响应头里出现明确的缓存期,抓取统计里其它路径的配额没有受到影响。

这里还有个坑。一天二十几次 robots 请求占比极低,不必专门优化,真正该关注的是它在文件里读到的规则是不是最新那份。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189