这类问题我又碰上了一次。日志里蜘蛛请求频繁出现 Range: bytes=0- 和 bytes=100000- 这类头,同一篇文章在十分钟内被抓了三次,GSC 快照只显示前半段内容。
第一反应是「压缩与分段同时生效,偏移量按压缩前的字节算」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。CDN 对大文件启用了分片回源,把整页当成可分段资源;断点续传插件对 HTML 也开了 Accept-Ranges: bytes;某层代理把 Range 头透传给了源站,源站照做。
先统计带 Range 的请求占比
awk '$0~/Range:/{c++} END{print c, NR}' access.log
复现一次分段请求看返回
curl -s -r 0-1024 -A 'Googlebot' https://www.example.com/a/1.html | head -c 200
再往下对 HTML 关掉 Range 支持
location ~ \.html$ { add_header Accept-Ranges none; }
末了让代理不再透传 Range 头
proxy_set_header Range "";
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
怎么算真的好了,看的是同一批现象。HTML 响应不再返回 206,蜘蛛抓取同一篇文章的次数回到一次,快照内容完整。
Range 是给大文件用的,正文页返回 206 会让蜘蛛只拿到片段,静态资源可以留,HTML 必须关。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
