为了把 LCP 压到 2 秒以内,给所有 img 统一加了 loading=lazy,包括文章首图。图片搜索里主图消失了,收录的只有正文中间的小图,页面源码里首图只有一个 data-src。
真正麻烦的地方在于,几个原因的现象几乎一样。首图也被懒加载 蜘蛛拿不到真实 src;懒加载依赖 IntersectionObserver 蜘蛛不执行脚本;图片 sitemap 指向的是占位图地址;noscript 里的回退图没有被解析成主图。
上来先看首图在源码里的属性
curl -s https://www.example.com/p/1 | grep -o '<img[^>]*>' | head -3
首图去掉懒加载并提高优先级
<img src="/img/1.jpg" fetchpriority="high" alt="nginx 反向代理配置">
正文图保留懒加载和异步解码
loading="lazy" decoding="async"
剩下的就是重新提交图片 sitemap
curl -s https://www.example.com/image-sitemap.xml | head -3
这类改动我都写进变更记录,过两周再出问题时能对上号。
恢复的判定其实很直接。源码里首图有真实 src,抓取诊断能看到图片请求,两周后主图重新出现在图片搜索里。
懒加载只适合首屏之外的图,首图必须直接输出 src,否则图片收录和 LCP 一起受损。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
