先把当时的情况摆出来。图片站接入新 CDN 后,Google 图片搜索流量掉了六成,日志里蜘蛛请求图片全是 206,Content-Range 只覆盖前 64KB,之后再没有后续请求。
排查方向其实有限,先把可能性排一排。CDN 对图片开启了 Range 分片,单次只回一段。也可能是源站对 Range 支持不完整,回 206 但总长度写错。
还有一种情况,图片按 UA 自适应转 WebP,同一 URL 返回不同格式。另外,防盗链校验拦掉了不带 Referer 的蜘蛛请求。
第一件事是看图片的 Range 响应
curl -sI -H 'Range: bytes=0-65535' https://img.example.com/a.jpg | head -8
接着核对长度字段是否自洽
curl -sI https://img.example.com/a.jpg | grep -Ei 'content-length|accept-ranges'
然后关掉图片路径的 Range 分片
location ~* \.(jpg|png|webp)$ { add_header Accept-Ranges none; }
等前面都确认过,再按蜘蛛 UA 验证完整下载
curl -o /tmp/a.jpg -s -A 'Googlebot-Image/1.0' https://img.example.com/a.jpg && ls -l /tmp/a.jpg
命令输出我都留了记录,免得改完记不清原来的值。
怎么算真的好了,看的是同一批现象。图片请求返回 200 且 Content-Length 与实际字节一致,蜘蛛连续抓取大图,图片搜索展现两周后回升。
206 本身不是错,错在分片总长度和文件对不上,蜘蛛拿到的图解码失败就不会再来。这类问题最好一次改到位,反复小改反而容易把原因搅混。
