网站图片越来越多、页面模块越来越复杂后,开发人员通常会想到一个办法:先加载用户当前看得到的内容,页面下方的图片、视频、评论和推荐模块等用户快要看到时再加载。这种方式就是懒加载,也常被称为延迟加载或Lazy Loading。

从性能角度看,懒加载能够减少首屏阶段的资源请求,降低初始传输量,让页面更快进入可用状态。但从SEO角度看,懒加载并不是加上一个loading="lazy"就结束了。加载对象、触发方式和页面结构不同,最终结果可能完全相反:合理使用可以改善页面体验,错误使用则可能让搜索引擎看不到正文、图片或后续列表。

懒加载与首屏渲染:SEO性能优化的关键取舍

懒加载到底是什么

懒加载是一种资源加载策略。页面首次打开时,不立即请求所有资源,而是优先加载当前展示所需的关键内容,把暂时不可见或非关键的资源延后处理。

常见的懒加载对象包括:

  • 首屏以下的文章配图、商品图和案例图片;

  • YouTube、地图、视频播放器等iframe内容;

  • 评论、相关推荐和用户评价模块;

  • 商品列表、文章列表和图片瀑布流;

  • 较大的JavaScript组件和非关键功能模块。

懒加载与普通缓存不是一回事。缓存解决的是资源再次访问时是否需要重新下载,懒加载解决的是资源在当前页面什么时候开始下载。两者可以同时使用,但优化目标不同。

懒加载会影响SEO吗

懒加载本身既不是正面排名因素,也不是负面排名因素。它对SEO的影响主要来自两个方面:搜索引擎能否发现内容,以及懒加载是否改善了真实用户的页面体验。

如果页面下方的图片和非关键模块能够在接近可视区域时正常加载,同时搜索引擎可以识别对应资源,那么懒加载通常不会妨碍收录,还可能减少首屏网络压力。

但如果正文、产品信息、链接或图片只有在用户点击、滑动、输入或执行其他交互后才生成,搜索引擎未必会完成这些操作。结果就是用户浏览时能够看到内容,但搜索引擎渲染页面时没有获得完整信息。

因此,判断懒加载是否符合SEO要求,不能只看浏览器里滚动后是否正常显示,还要确认搜索引擎在没有人工操作的情况下能否访问相关内容。

哪些资源适合延迟

最适合懒加载的是首屏之外、暂时不影响用户理解页面主题的资源。例如长文章中部和底部的配图、产品列表下方的商品图片、页面底部的视频播放器,以及用户未必会查看的评论模块。

页面资源是否适合懒加载判断依据
首屏主视觉图片通常不适合可能是LCP元素,延迟加载会拖慢主要内容出现时间
文章正文首图根据位置判断首屏可见时不应延迟,首屏以下可以考虑
正文下方配图适合不会阻塞用户首次阅读页面
页脚地图和视频适合资源较重,且通常不属于首屏关键内容
产品名称和价格不建议依赖交互加载属于页面核心内容,应确保抓取时能够获得
相关推荐模块可以延迟但其中的重要链接仍应保持可发现

判断标准不是资源类型,而是它在当前页面中的位置和作用。同一张图片放在页面顶部时可能是核心资源,放在长文章底部时则适合懒加载。

首屏图片不要偷懒

不少网站为了统一开发逻辑,给页面中的所有图片都加上loading="lazy"。这样写起来方便,却可能让首屏大图、文章封面或产品主图延迟请求。

如果首屏最大内容元素是一张图片,这张图片通常会参与LCP计算。浏览器需要先解析页面布局,确认图片位于可视区域,然后才开始请求懒加载资源,图片下载时间就会被推迟。

首屏关键图片更适合直接加载,并根据实际情况设置较高的请求优先级:

<img
  src="/images/product-hero.webp"
  width="1200"
  height="675"
  alt="家庭光伏储能系统安装效果"
  fetchpriority="high"
  decoding="async"
>

页面下方的图片则可以使用浏览器原生懒加载:

<img
  src="/images/installation-case.webp"
  width="800"
  height="450"
  alt="住宅屋顶光伏安装案例"
  loading="lazy"
  decoding="async"
>

这里的重点不是把lazy换成eager,而是先识别哪些图片真正属于首屏关键资源。大面积轮播图、产品主图和文章头图都需要单独判断。

图片懒加载怎么写

对于普通图片,优先考虑浏览器原生的loading="lazy"。它不需要引入额外JavaScript库,浏览器会结合图片位置、网络状态和内部策略决定何时发起请求。

一个较完整的响应式图片示例如下:

<img
  src="/images/solar-panel-800.webp"
  srcset="/images/solar-panel-480.webp 480w,
          /images/solar-panel-800.webp 800w,
          /images/solar-panel-1200.webp 1200w"
  sizes="(max-width: 768px) 100vw, 800px"
  width="800"
  height="450"
  alt="工商业屋顶光伏组件"
  loading="lazy"
  decoding="async"
>

srcsrcset应包含真实可访问的图片地址。不要只把地址放在自定义的data-src属性中,却没有可靠的JavaScript逻辑将其转换为真实图片资源。

图片还应设置明确的widthheight。这不仅方便浏览器在图片下载前预留空间,也能减少图片出现后页面内容突然移动的问题。对于懒加载图片,这一点尤其重要。

希望图片参与图片搜索时,还要保留真实的img元素、可抓取的图片URL以及符合内容含义的alt文本。不能只用CSS背景图承担页面中的核心图片内容。

不要等用户点击才加载

懒加载最常见的SEO问题,是把内容加载条件绑定在用户交互上。例如用户点击“展开全文”后才请求正文,滑动轮播图后才生成图片链接,或者点击选项卡后才向页面插入产品参数。

搜索引擎可以执行和渲染JavaScript,但不会像普通用户一样完成页面中的所有点击、输入和复杂操作。如果内容只有在这些操作发生后才存在,就可能无法稳定进入搜索引擎看到的页面版本。

比较稳妥的做法是:

  • 核心正文和产品信息直接输出在初始HTML或可正常渲染的页面中;

  • 首屏下方资源根据元素与可视区域的距离自动加载;

  • 折叠内容可以默认隐藏,但不要必须请求接口后才生成;

  • 选项卡中的重要内容要有独立页面或可抓取的页面结构;

  • 不要把SEO需要的文字和链接完全依赖点击事件。

界面上的“隐藏”与代码中的“不存在”是两个概念。内容已经存在于HTML中,只是通过样式折叠,通常比点击后才从接口请求更容易被搜索引擎理解。

JavaScript方案怎么做

浏览器原生懒加载适合图片和iframe,但一些自定义模块仍然需要JavaScript处理。当前较常用的方式是Intersection Observer,它可以检测元素是否接近可视区域。

<div class="lazy-module" data-url="/api/related-articles"></div>

<script>
const modules = document.querySelectorAll('.lazy-module');

const observer = new IntersectionObserver((entries) => {
  entries.forEach(async (entry) => {
    if (!entry.isIntersecting) return;

    const element = entry.target;
    const response = await fetch(element.dataset.url);
    element.innerHTML = await response.text();

    observer.unobserve(element);
  });
}, {
  rootMargin: '300px 0px'
});

modules.forEach((element) => observer.observe(element));
</script>

rootMargin可以让资源在进入屏幕前提前加载,减少用户滚动到模块位置后仍要等待的情况。

不过,这段代码适合推荐内容、评论或辅助模块,不适合承载页面唯一的核心正文。如果接口失败、JavaScript执行异常或搜索引擎没有触发加载,模块内容就会缺失。

iframe也可以懒加载

地图、视频和第三方小组件通常会带来额外脚本、网络连接和渲染开销。如果这些内容位于首屏以下,可以给iframe添加原生懒加载属性:

<iframe
  src="https://www.example.com/video"
  width="800"
  height="450"
  title="产品安装操作视频"
  loading="lazy"
  allowfullscreen
></iframe>

对于视频平台,还可以先显示一张轻量封面图,用户点击播放后再创建真正的iframe。这种方式能进一步减少首屏资源,但视频标题、说明和相关文字不应只存在于iframe内部,页面本身也应提供必要的文本信息。

无限滚动不是普通懒加载

无限滚动经常与懒加载一起出现,但两者并不是同一个概念。图片懒加载只是延后请求资源,无限滚动则会在用户接近列表底部时继续加载下一批文章、商品或图片。

如果后续内容只能通过滚动获得,没有独立URL和可抓取链接,搜索引擎可能只发现第一批内容。对文章列表、产品分类和图片图库来说,这会直接影响详情页的发现与抓取。

搜索友好的无限滚动应保留分页结构:

  • 每一批内容都有稳定且唯一的URL,例如?page=2

  • 分页URL可以直接访问,并返回对应批次的实际内容;

  • 页面中提供真实的<a href>上一页、下一页或页码链接;

  • 同一个分页URL每次打开时应展示相对稳定的内容;

  • 不要只使用井号地址或依赖用户滚动记录。

前端可以继续采用无限滚动改善体验,但底层仍要有搜索引擎可以访问的分页页面。视觉体验和抓取结构并不冲突。

懒加载常见错误

实际项目中,懒加载的问题通常不是功能完全失效,而是用户看起来正常,搜索引擎和性能数据却不理想。

常见错误可能产生的影响调整方向
所有图片统一使用lazy首屏大图请求变晚,LCP可能变差排除首屏和LCP候选图片
图片只有data-src脚本异常时图片地址不可见优先使用原生src和loading属性
正文点击后才请求核心内容可能无法稳定索引正文直接输出,交互只控制显示状态
图片未设置宽高加载后发生页面位移设置width和height或固定宽高比
列表只支持无限滚动后续内容和详情页不易被发现提供独立分页URL和HTML链接
模块进入屏幕后才请求用户看到空白区域后仍需等待设置合理的提前加载距离
核心图片使用CSS背景图片语义和可发现性较弱核心内容使用img并添加alt

懒加载与核心指标

懒加载经常被当作页面速度优化方法,但它不会自动改善所有核心网页指标。

对于LCP,首屏大图使用懒加载通常会产生负面影响,因为关键资源开始下载的时间被推迟。对于CLS,懒加载图片没有预留尺寸时,图片出现后会把下方文字推开。对于INP,如果懒加载逻辑执行了大量主线程任务,也可能影响页面交互响应。

因此,懒加载优化不能只看“初始请求数量减少了多少”,还要看真实用户指标是否变好。减少请求只是手段,页面更快、更稳定、更容易使用才是目标。

怎么检查搜索可见性

完成开发后,可以从用户体验、页面源代码和搜索引擎渲染三个角度检查。

  1. 打开页面后不进行任何点击,确认核心正文和首屏信息能够出现。

  2. 查看页面源代码,检查关键文字、链接和图片地址是否已经存在。

  3. 关闭JavaScript测试基础页面,判断页面是否仍能提供主要信息和导航。

  4. 使用Chrome开发者工具观察图片和接口何时开始请求。

  5. 在移动设备尺寸下测试,避免桌面端正常、移动端内容缺失。

  6. 使用Search Console网址检查工具查看Google获取的HTML和页面截图。

  7. 检查分页URL能否独立访问,并确认下一页链接是真实的HTML链接。

  8. 使用PageSpeed Insights或Lighthouse检查LCP、CLS和资源加载建议。

只看Lighthouse得分并不能判断SEO是否正常。性能工具主要评价加载表现,搜索引擎是否获得完整内容,还需要结合渲染结果、索引情况和页面结构判断。

实际优化怎么落地

一个比较稳妥的实施顺序,是先将页面资源分成关键资源和非关键资源。首屏正文、主图、标题、导航和核心产品信息优先加载;首屏以下的配图、视频、地图和辅助模块再使用懒加载。

图片优先使用浏览器原生loading="lazy",同时保留真实的src、合理的alt文本和明确宽高。需要自定义加载的模块,可以使用Intersection Observer并设置提前加载距离,但不要让核心内容依赖用户点击。

列表页使用无限滚动时,应同步建设可访问的分页URL和真实链接。大型单页应用则要确认服务器渲染、静态生成或JavaScript渲染后的内容能够被搜索引擎正常获得。

懒加载真正需要解决的不是“怎么让所有东西晚点加载”,而是“哪些资源可以晚点加载”。把非关键资源推迟,把关键内容提前,并保证页面信息始终可发现,才能同时兼顾性能、用户体验和SEO。

参考资料来源

Google懒加载内容指南

Google JavaScript SEO基础

Google图片SEO指南

Google分页与增量加载指南

web.dev浏览器原生懒加载

web.dev懒加载与LCP

MDN懒加载说明