Core Web Vitals 在 2025 年依然是 Google 的关键排名信号,直接影响搜索可见度和用户体验。本份全面指南涵盖三大核心指标——最大内容绘制(Largest Contentful Paint,LCP)、首次输入延迟(First Input Delay,FID)/ 下一次绘制交互(Interaction to Next Paint,INP),以及累积布局偏移(Cumulative Layout Shift,CLS)——并提供切实可行的优化策略。
理解 2025 年的 Core Web Vitals
Google 已于 2024 年 3 月用 INP(Interaction to Next Paint,下一次绘制交互) 取代了 FID,使其成为全新的响应性指标。INP 衡量的是整个页面生命周期中所有用户交互的延迟,而不仅仅是首次交互。
三大核心指标
- LCP(Largest Contentful Paint,最大内容绘制):应在 2.5 秒内完成
- INP(Interaction to Next Paint,下一次绘制交互):应低于 200 毫秒
- CLS(Cumulative Layout Shift,累积布局偏移):应低于 0.1
LCP 优化深度解析
面向 LCP 的图片优化
图片是最常见的 LCP 元素。可通过以下方式优化:
- 使用新一代格式(WebP、AVIF)并提供回退方案
- 借助
srcset实现响应式图片 - 预加载关键图片:
<link rel="preload" as="image"> - 使用 CDN 实现全球分发
- 对首屏内容考虑使用 CSS 背景图片
服务器响应时间
- 将 TTFB 控制在 800ms 以内
- 实施边缘缓存
- 在合适的场景使用服务端渲染
- 优化数据库查询
- 考虑使用静态站点生成
阻塞渲染的资源
- 内联关键 CSS
- 延迟加载非关键 JavaScript
- 为 LCP 图片使用
fetchpriority="high" - 尽量减少第三方脚本的影响
INP 优化策略
拆分长任务
- 对非关键工作使用
requestIdleCallback() - 将任务拆分为低于 50ms 的小块
- 使用
scheduler.yield()实现让步 - 将繁重的计算交给 Web Workers 处理
事件处理器优化
// Bad: Expensive operation blocking main thread
element.addEventListener("click", () => {
processLargeDataset(); // Blocks for 500ms
});
// Good: Yield to allow rendering
element.addEventListener("click", async () => {
await scheduler.yield();
processLargeDataset();
});
第三方脚本管理
- 审查所有第三方脚本
- 使用
async或defer属性 - 为嵌入内容实现外观占位(facade)
- 考虑使用 Partytown 实现脱离主线程的执行
CLS 预防技巧
图片与视频尺寸
始终设置明确的尺寸:
<img src="hero.jpg" width="1200" height="630" alt="Hero image">
<video width="1920" height="1080"></video>
字体加载策略
- 使用
font-display: optional或font-display: swap - 预加载关键字体
- 在 @font-face 中使用 size-adjust
- 对字体进行子集化以缩短加载时间
动态内容与广告
- 为动态内容预留空间
- 为容器使用 CSS
min-height - 避免在已有内容上方插入内容
- 用固定尺寸预先分配广告位
测量与监控
真实用户监控(RUM)
使用以下工具获取现场数据(field data):
- Chrome UX Report(CrUX)
- Google Search Console
- Web Vitals JavaScript 库
- 自定义 RUM 方案
实验室测试工具
- Lighthouse(可集成进 CI)
- PageSpeed Insights
- WebPageTest
- Chrome DevTools 的 Performance 面板
对 SEO 排名的影响
Core Web Vitals 通过以下方式影响排名:
- 作为直接排名信号(页面体验更新)
- 通过用户参与度指标产生间接影响
- 移动优先索引的相关考量
- 获得进入 Top Stories 轮播的资格
进阶优化技巧
- 实施推测性预渲染(speculative prerendering)
- 使用 Speculation Rules API
- 优化关键渲染路径
- 实施 Service Worker 缓存策略
- 利用 BFCache 实现即时的前进/后退导航