文章迁到 HTTPS 后正文里的图片地址还是 http,浏览器控制台报警告,页面返回码是 200,蜘蛛抓到的图片却一直是空图。
把日志和配置对完,能解释这个现象的基本就这几处。img 属于被动混合内容,浏览器只警告不拦截,容易被忽略;编辑器把图片地址存成了绝对路径,迁移时没有替换;CDN 对 http 图片做了 301,蜘蛛跟过去后拿到的是占位图;图片域名没有证书,https 版本直接握手失败。
先统计正文里残留的 http 资源
curl -s https://www.example.com/post/1 | grep -o 'src="http://[^"]*' | wc -l
接着在数据库里批量替换图片域名
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://img.example.com', 'https://img.example.com');
然后确认图片域名的证书可用
curl -sI https://img.example.com/a.jpg | head -1
给站点加一条 CSP 上报观察残留
Content-Security-Policy-Report-Only: img-src https: data:;
改完先别撤,确认这几项。替换完成后控制台的混合内容警告清零,图片抓取量在一周内恢复到迁移前的水平。
补一句。被动混合内容不会阻断渲染,但对蜘蛛来说是实打实的抓取失败,比脚本报错更容易被忽视。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
