搜索全站
Google SEO 9 分钟阅读

图片懒加载会不会影响 Google 索引:原生 loading 与 JS 方案的差异

懒加载本身不会让 Google 抓不到图片,但实现方式的差别决定结果。本文讲清原生 loading=lazy 与 JS 懒加载在 Googlebot 渲染下的差异,并给出 WordPress 首图保留 eager 的正确写法。

U
UFO_PF 2020-09-11 · 阅读 9 分钟
图片 GOOGLE SEO
阅读提示
本文约 3,312 字,预计阅读 9 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:开了懒加载,图片搜索流量掉了一半

一个很常见的连锁反应:为了提升 PageSpeed 分数开启图片懒加载,一个月后发现 Google 图片搜索的展现量掉了 40%,于是得出结论「懒加载影响索引」。但把懒加载关掉,流量又没回来。真相通常不在懒加载本身,而在实现方式和排查方向——大部分站长同时装了缓存插件的懒加载和主题的懒加载,两份逻辑叠加后,图片的 src 被替换成占位符,真正的地址被塞进了 data-src。Googlebot 渲染页面时,如果这段 JS 依赖滚动事件触发,它就永远不会执行,因为 Googlebot 不会滚动页面。

判断这个问题需要先区分两类实现:浏览器原生的 loading="lazy",以及用 JS(通常是 IntersectionObserver 或滚动监听)实现的自定义懒加载。它们在 SEO 上的表现完全不同。

原理分析:Googlebot 渲染时会做什么

Googlebot 的渲染服务(web rendering service, WRS)加载页面时会执行 JS,但它有一个关键限制——不会模拟用户滚动。它使用一个很高的虚拟视口来渲染,这意味着:

实现方式 Googlebot 行为 索引结果
原生 loading="lazy" 浏览器原生机制,视口内的资源照常加载,与 JS 无关 图片正常被索引
IntersectionObserver 懒加载 WRS 支持 IntersectionObserver,视口内元素会触发 通常能索引,但边界条件复杂
监听 scroll 事件的懒加载 Googlebot 不滚动,事件不触发 图片地址永远不写入 src,不被索引
依赖交互(点击「加载更多」) Googlebot 不点击 完全不索引
src 放在 data-src,无 <noscript> 兜底 渲染后 HTML 里没有真实地址 不索引

还有第二个影响面:LCP。懒加载会拖慢首屏最大内容的加载时间。如果首屏 Hero 图被加上 loading="lazy",浏览器要等到布局计算完成才开始下载,LCP 可能从 1.8 秒涨到 3.2 秒。WordPress 从 5.5 起默认给正文图片加 loading="lazy",这个默认值对首图是错的。

第三个影响面是无 JS 环境下的兜底。Google 抓取有时会拿到未渲染的 HTML(尤其是第一次抓取),如果此时 src 是占位图,那么这一轮抓取看到的就只有占位图。加 <noscript> 兜底是唯一的保险。

保姆级实操

步骤 1:先确认站点当前用的是哪种懒加载。 打开页面源码搜索 data-src、data-lazy-src、lazyload 类名。如果 src 是 1×1 灰色占位图或 base64,说明是 JS 方案;如果 <img> 上有 loading="lazy" 且 src 是真实地址,说明是原生方案。

步骤 2:WordPress 里统一到原生方案,并让首图保持 eager。 用官方提供的过滤器控制:

// functions.php:正文首图立即加载,其余图片保持原生懒加载
add_filter( 'wp_img_tag_add_loading_attr', function ( $value, $image_html, $context ) {
    static $seen = 0;
    $seen++;
    // 第一张图(通常是 LCP 元素)不做懒加载
    return ( 1 === $seen ) ? 'eager' : 'lazy';
}, 10, 3 );

// 若某个模板完全不需要懒加载(如产品详情页首屏画廊),按 context 关闭
add_filter( 'wp_lazy_loading_enabled', function ( $default, $tag_name, $context ) {
    if ( 'wp_get_attachment_image' === $context && is_singular( 'product' ) ) {
        return false;
    }
    return $default;
}, 10, 3 );

步骤 3:给 LCP 图补上优先级提示。 光去掉 lazy 还不够,还要让浏览器尽早开始下载:

<img src="/wp-content/uploads/2026/01/hero-guide-cover.webp"
     width="1200" height="675"
     loading="eager" fetchpriority="high" decoding="sync"
     alt="WordPress Google SEO 完整指南封面图">

步骤 4:给 JS 方案补 <noscript> 兜底。 如果因为历史原因必须用 JS 懒加载,务必同时输出真实地址的 <noscript> 版本,这是 Google 官方文档明确推荐的做法。

步骤 5:禁用重复的懒加载实现。 缓存插件(WP Rocket、LiteSpeed Cache、Autoptimize)与主题往往各自实现一套,同时开启会互相替换 src。只保留一套,推荐保留原生 + 缓存插件的懒加载关闭。

步骤 6:用网址检查工具验证。 打开 GSC 网址检查 → 「测试实际网页」→ 「查看已抓取的页面」,在 HTML 里搜索图片文件名,确认 src 是真实地址;再看「更多详情」里的资源加载情况,图片若显示 404 或被屏蔽,说明 CDN 或防盗链有问题。

常见踩坑

  1. 首图被加上 loading="lazy",LCP 变差,PSI 分数反而下降。
  2. 两套懒加载叠加,src 被换成占位图,Googlebot 只看到占位图。
  3. 依赖 scroll 事件的自定义脚本,Googlebot 不滚动,图片永远不加载。
  4. noscript 兜底里放的是占位图,兜底形同虚设。
  5. 懒加载了 iframe(YouTube 嵌入),视频缩略图与标题不进索引,视频表现受损。
  6. 案例:某测评站用了主题自带的 data-src 懒加载,同时开启了 WP Rocket 的懒加载。两个插件都去改 src,最终输出的 src 是 1×1 的透明 GIF,真实地址在 data-original。Google 图片搜索展现量三个月内从每月 8000 跌到不足 500,关闭主题自带方案、保留原生 loading="lazy" 并在首图上去掉 lazy 后,六周恢复到每月 7000 以上。
  7. 把 loading="lazy" 加在 CSS 背景图上,属性完全无效,白改一场。
  8. 误以为关掉懒加载就能提升排名,实际上懒加载只是体验项,图片能否索引取决于 src 是否真实存在,这一点与 图片 SEO 优化 里讲的文件名和 ALT 属于不同环节。

总结

判断标准很简单:用无 JS 的方式(curl 或「查看源代码」)看页面 HTML,图片的真实地址是否直接写在 src 里——写在了,Google 就能索引;只写在 data-* 里且没有 <noscript> 兜底,就一定有问题。执行上推荐统一到浏览器原生 loading="lazy",用 wp_img_tag_add_loading_attr 让首图保持 eager 并加 fetchpriority="high",同时关闭主题与缓存插件里重复的懒加载实现。改完必须用「查看已抓取的页面」确认渲染后的 HTML。图片格式与体积的处理另行参考 WebP AVIF 图片格式。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。