网站图片越来越多、页面模块越来越复杂后,开发人员通常会想到一个办法:先加载用户当前看得到的内容,页面下方的图片、视频、评论和推荐模块等用户快要看到时再加载。这种方式就是懒加载,也常被称为延迟加载或Lazy Loading。
从性能角度看,懒加载能够减少首屏阶段的资源请求,降低初始传输量,让页面更快进入可用状态。但从SEO角度看,懒加载并不是加上一个loading="lazy"就结束了。加载对象、触发方式和页面结构不同,最终结果可能完全相反:合理使用可以改善页面体验,错误使用则可能让搜索引擎看不到正文、图片或后续列表。

懒加载到底是什么
懒加载是一种资源加载策略。页面首次打开时,不立即请求所有资源,而是优先加载当前展示所需的关键内容,把暂时不可见或非关键的资源延后处理。
常见的懒加载对象包括:
首屏以下的文章配图、商品图和案例图片;
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" >
src和srcset应包含真实可访问的图片地址。不要只把地址放在自定义的data-src属性中,却没有可靠的JavaScript逻辑将其转换为真实图片资源。
图片还应设置明确的width和height。这不仅方便浏览器在图片下载前预留空间,也能减少图片出现后页面内容突然移动的问题。对于懒加载图片,这一点尤其重要。
希望图片参与图片搜索时,还要保留真实的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,如果懒加载逻辑执行了大量主线程任务,也可能影响页面交互响应。
因此,懒加载优化不能只看“初始请求数量减少了多少”,还要看真实用户指标是否变好。减少请求只是手段,页面更快、更稳定、更容易使用才是目标。
怎么检查搜索可见性
完成开发后,可以从用户体验、页面源代码和搜索引擎渲染三个角度检查。
打开页面后不进行任何点击,确认核心正文和首屏信息能够出现。
查看页面源代码,检查关键文字、链接和图片地址是否已经存在。
关闭JavaScript测试基础页面,判断页面是否仍能提供主要信息和导航。
使用Chrome开发者工具观察图片和接口何时开始请求。
在移动设备尺寸下测试,避免桌面端正常、移动端内容缺失。
使用Search Console网址检查工具查看Google获取的HTML和页面截图。
检查分页URL能否独立访问,并确认下一页链接是真实的HTML链接。
使用PageSpeed Insights或Lighthouse检查LCP、CLS和资源加载建议。
只看Lighthouse得分并不能判断SEO是否正常。性能工具主要评价加载表现,搜索引擎是否获得完整内容,还需要结合渲染结果、索引情况和页面结构判断。
实际优化怎么落地
一个比较稳妥的实施顺序,是先将页面资源分成关键资源和非关键资源。首屏正文、主图、标题、导航和核心产品信息优先加载;首屏以下的配图、视频、地图和辅助模块再使用懒加载。
图片优先使用浏览器原生loading="lazy",同时保留真实的src、合理的alt文本和明确宽高。需要自定义加载的模块,可以使用Intersection Observer并设置提前加载距离,但不要让核心内容依赖用户点击。
列表页使用无限滚动时,应同步建设可访问的分页URL和真实链接。大型单页应用则要确认服务器渲染、静态生成或JavaScript渲染后的内容能够被搜索引擎正常获得。
懒加载真正需要解决的不是“怎么让所有东西晚点加载”,而是“哪些资源可以晚点加载”。把非关键资源推迟,把关键内容提前,并保证页面信息始终可发现,才能同时兼顾性能、用户体验和SEO。
poxiaoxi博客
精彩评论