这类问题我又碰上了一次。接入 CDN 后日志里图片请求占比涨到六成,正文页每天只被抓三百次,图片本身也没进图片索引,等于两头都没拿到。
第一反应是「图片响应没有缓存头,每次抓取都回源」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。图片地址被参数和尺寸裂变,单页就产生几十个请求;列表页直接输出原图,蜘蛛每张都要完整下载;正文页的抓取入口被图片请求挤到队列后面。
上来先按扩展名统计请求占比
awk '{print $7}' access.log | grep -E '\.(jpg|png|webp)' | wc -l
随后看图片响应的缓存状态
curl -sI https://www.example.com/uploads/a.jpg | grep -iE 'cache-control|age'
接着列表页改用固定尺寸并加长缓存
add_filter('wp_get_attachment_image_attributes', 'force_list_size');
给图片加 Cache-Control 后复测
location ~* \.(jpg|png|webp)$ { expires 30d; }
改完先别撤,确认这几项。图片请求占比降到三成以下,正文页的日抓取量回到八百次左右,图片索引里的条目也开始增加。
提醒一点。图片和正文抢的是同一份抓取预算,控制图片数量和缓存命中率,等于间接给正文扩容。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
