记录一下那天晚上的排查过程。日志里 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 请求占比极低,不必专门优化,真正该关注的是它在文件里读到的规则是不是最新那份。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
