一分钟结论(TL;DR)
- LCP = 从页面开始加载,到视口内最大的内容元素渲染完成的时间。
- 阈值:≤2.5s 优良 / 2.5–4s 待改进 / >4s 差(按 75 分位真实用户)。
- 优化优先级:先压 TTFB/服务端 与 LCP 图片(通常是最大元素),再清渲染阻塞资源。
- 用 Search Console / PageSpeed Insights 的 field 数据定位,用 Lighthouse/DevTools 调试。
1. LCP 是什么
LCP(Largest Contentful Paint,最大内容绘制)是谷歌 Core Web Vitals(核心网页指标)三大指标之一,属于"加载性能"。它标记的是:用户认为"页面主要内容出现了"的那个时间点。
具体定义为——从导航开始,到视口(viewport)内可见的最大图像或文本块完成渲染之间的时间。它回答的是用户最关心的问题:"我什么时候能看到这个页面的实质内容?"
- FCP(首次内容绘制):页面出现任何内容(哪怕一小段文字)的时间;LCP 是出现主要内容的时间,通常 LCP ≥ FCP。
- TTFB(首字节时间):服务器返回第一个字节的时间,是 LCP 的起点组成部分之一。
- 整页加载(load):所有资源加载完的时间,往往远晚于 LCP——LCP 达标不代表整页加载完成。
2. 哪个元素算 LCP
LCP 考察的是视口内、按面积计算最大的内容元素。会被计入 LCP 的元素类型包括:
<img>图片(含srcset选中的那张);- SVG 内的
<image>; <video>的海报图(poster);- 带有背景图的元素(
background-image); - 包含文本节点的块级元素(如
<p>、<h1>、<div>等)。
判定规则:浏览器在渲染过程中持续寻找"当前最大的候选元素",当页面首次绘制出该最大元素(或用户开始交互)时,即确定 LCP。因此,首屏里那块最大的图或那段最大的文字,往往就是你的 LCP 元素——优化它就是优化 LCP。
3. 评分标准与阈值
LCP 按真实用户(field)数据的 75 分位评估,分为三档:
| 评级 | LCP 时间 | 含义 |
|---|---|---|
| 优良 Good | ≤ 2.5 秒 | 主流内容较快出现,体验良好。 |
| 待改进 Needs improvement | 2.5 – 4.0 秒 | 已可感知延迟,需优化。 |
| 差 Poor | > 4.0 秒 | 用户可能已流失,务必处理。 |
注意:谷歌以 field 数据(真实用户)为准,实验室(lab)分数只用于调试。同一个页面,实验室 95 分但真实用户超标很常见(设备/网络差异)。
4. 时间线四阶段拆解(深度)
LCP 时间可拆成四个连续阶段。定位 LCP 慢,就是定位卡在哪个阶段:
服务端响应慢(动态渲染、DB 慢、无缓存、服务器远)会拖慢一切。
LCP 资源被 JS/CSS 阻塞、或未加优先级/预加载,导致"迟迟不开始下载"。
图片过大、格式旧、未用 CDN、网络慢,导致下载耗时。
主线程被长任务/大 JS 占满、或元素由客户端 JS 渲染,导致"下完了却不显示"。
5. 拖慢 LCP 的常见原因
- 服务端/TTFB 慢:动态页面未缓存、数据库慢、服务器远、无 CDN。
- 渲染阻塞资源:未延迟的 CSS/JS 挡住首屏渲染。
- LCP 图片过大/过重:体积大、格式旧(JPEG/PNG)、未按尺寸响应式。
- LCP 图片未设优先级:没加
fetchpriority="high"、未 preload,排在队列后面。 - 用 CSS 背景图做首屏大图:背景图不被预加载扫描器优先发现。
- 字体加载:文字型 LCP 被 Web Font 阻塞(FOIT),或字体文件大。
- 第三方脚本:统计/客服/广告脚本抢占带宽与主线程。
- 客户端渲染(CSR):首屏内容靠 JS 渲染,白屏等待 JS 执行完。
- 资源竞争:首屏同时请求过多资源,LCP 资源被排在后面。
- 移动端/弱网:真实用户多在手机上,性能和网络都更差。
6. 如何测量 LCP
| 数据类型 | 工具 | 用途 |
|---|---|---|
| Field 真实用户 | Search Console「核心网页指标」报告、PageSpeed Insights 上半部分、CrUX、RUM(web-vitals 库) | 谷歌排名依据;看真实分布(75 分位)、按移动/桌面分。 |
| Lab 实验室 | Lighthouse、PageSpeed Insights 下半部分、Chrome DevTools Performance | 调试用:看四阶段耗时、定位具体资源与阻塞。 |
7. 优化实战(分模块)
按"四阶段"对症下药,按影响从大到小排列:
7.1 服务端与 TTFB(阶段①)
- 选快速主机并启用服务端缓存(页面缓存/对象缓存);
- 上 CDN / 边缘节点,让用户就近获取;
- 启用 HTTP/2 或 HTTP/3、Keep-Alive、Brotli/Gzip 压缩;
- 动态站点点用边缘渲染/整页缓存,降低数据库与后端压力。
7.2 关键渲染路径(阶段②④)
- 移除渲染阻塞 CSS/JS:非关键 CSS 延迟加载,JS 用
defer/async; - 内联首屏关键 CSS(critical CSS),压缩并删除未使用的 CSS/JS;
- 减少第三方脚本,按需延后加载。
7.3 LCP 图片(阶段③,最常见)
- 用现代格式(WebP/AVIF)并压缩;
- 用
srcset/sizes按屏幕给合适尺寸,别用大图缩略; - 首屏大图改为真正的
<img>(而非 CSS 背景图),并加fetchpriority="high"、loading="eager"; - 对该图
<link rel="preload">;图片走 CDN; - 设置
width/height(同时利于 CLS)。
7.4 字体(文字型 LCP)
font-display: swap(或 optional)避免字体阻塞文本渲染;- preload 关键字体、做字体子集化、自托管,减少体积与请求。
7.5 JavaScript 与框架渲染
- 首屏内容尽量服务端渲染(SSR)或静态生成(SSG),避免 CSR 白屏;
- 拆分代码、按需加载,避免大包 JS 阻塞主线程;
- React/Vue 等框架注意 hydration 前的首屏可 painted 内容。
7.6 资源提示与缓存
preconnect/dns-prefetch关键第三方源;- 合理的浏览器缓存 + CDN 缓存;可用 Service Worker 加速回访。
loading="lazy" 掉首屏大图(会更快不到),也别为预加载一切而造成资源竞争。优化某一指标时,留意别把 CLS/INP 弄差。8. LCP 与 SEO 排名
LCP 属于谷歌页面体验(Page Experience)信号,与移动友好、HTTPS、无侵入式插页等共同作用。要点:
- 它是质量层/决胜因素,不是单独把页面从第 30 拉到第 1 的开关;
- 当多个页面内容质量接近时,更好的核心网页指标可能成为排序的 tie-breaker;
- 间接影响:慢/跳页会提高跳出、减少互动,长期损害排名与转化;
- 谷歌移动优先索引,移动端的 LCP 尤其关键。
9. 常见误区
- ❌ LCP = 整页加载完:不是,它只看最大主要内容出现的时间。
- ❌ 只看实验室分数:排名看真实用户(field)数据,Lab 只用于调试。
- ❌ 给首屏大图加懒加载:会直接拖慢 LCP,首屏图应 eager + 高优先级。
- ❌ 无脑预加载一切:过度 preload 会造成带宽竞争,反噬 LCP。
- ❌ 只顾 LCP:可能把 CLS(布局偏移)或 INP(响应)弄遭,要三者兼顾。
- ❌ 忽视移动端/弱网:真实用户主力在手机,务必按移动优先来测与优化。
10. 常见问题 FAQ
LCP 多少算达标?
LCP 和 FCP 有什么区别?
为什么实验室分数很高,Search Console 还报超标?
文字很多的首屏,LCP 元素是文字怎么办?
<p>/<h1> 等块。优化方向:加快 TTFB、移除渲染阻塞资源、优化 Web Font(font-display、子集化、预加载),让文本尽早绘制。优化 LCP 会不会影响其他指标?
11. LCP 优化清单
上线前逐项自查:
- 确认 LCP 元素(图片还是文字),并对其专项优化
- 压 TTFB:主机/缓存/CDN/HTTP2-3/压缩
- LCP 图片:现代格式 + 压缩 + 响应式尺寸 + CDN
- LCP 图片:
<img>+fetchpriority="high"+ eager + preload + width/height - 移除/延迟渲染阻塞的 CSS 与 JS,内联关键 CSS
- 字体:font-display、子集化、预加载、自托管
- 首屏内容 SSR/SSG,减少客户端渲染白屏
- 收敛第三方脚本,按需延后
- preconnect 关键第三方源,合理缓存
- 用 GSC field 数据 + Lighthouse/DevTools 双重验证,兼顾 CLS/INP