这个坑值得记一笔。日志里七成以上请求返回 304,看着像省流量,但页面更新后蜘蛛仍拿不到新内容,收录里的摘要一直是旧的。
这类报错背后常见的原因有几处,逐个排除就行。ETag 或 Last-Modified 生成逻辑有误,一直返回未修改;CDN 缓存了旧的校验头,回源时对不上;动态页面被当成静态资源缓存,更新不触发失效。
先统计 304 的占比
awk '$9==304' access.log | wc -l
随后对比页面修改时间与响应头
curl -sI https://www.example.com/a/ | grep -i last-modified
给动态页面关闭强缓存校验
add_header Cache-Control 'no-cache';
同一份数据我导出了两份,一份留底,一份拿来试。
这类问题以前遇到过,但这次的触发条件和上次不一样。
改完先别撤,确认这几项。更新文章后响应头时间同步变化,蜘蛛能抓到新版本,304 占比回落到合理区间。
容易忽略的是,304 本身不是问题,问题在于内容已经变了还回 304,这会让蜘蛛长期停留在旧版本上,很难察觉。这类问题最好一次改到位,反复小改反而容易把原因搅混。