现场是这样的。旧栏目跳转到新栏目后,CDN 把这条 301 缓存了一天,蜘蛛连续几个小时拿到的都是跳转,新页面的抓取量一直上不去。

中间走过弯路,把「301 的缓存时间比页面长,跳转链越积越多」当成主因,改完现象没变。

这类报错背后常见的原因有几处,逐个排除就行。CDN 默认缓存 301,忽略源站的缓存头;跳转规则改过一次,边缘还留着旧的跳转目标;回源时 CDN 自己又生成了一次 301。

上来先确认 301 的缓存头

curl -sI https://www.example.com/old/1024 | grep -iE 'cache|age'

源站给 301 加短缓存

add_header Cache-Control "max-age=60" always;

随后清掉这条地址的边缘缓存

curl -X PURGE https://www.example.com/old/1024

末了确认跳转只有一跳

curl -sIL https://www.example.com/old/1024 | grep -E 'HTTP/|location'

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

别只看报错消失,验证要多做一步。清缓存后蜘蛛拿到一跳 301 并很快抓到新页,新页抓取量三天内回升。

补一句。301 不是永久不变,改跳转目标时要把边缘缓存一起清,否则线上还是旧目标。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189