Core Web Vitals: полное руководство 2026
Как читать LCP, INP и CLS по полевым данным, понять, какой слой отвечает за проблему, и улучшать пользовательский опыт без обещаний роста позиций.
Core Web Vitals (CWV) — это набор метрик Google, которые измеряют реальный пользовательский опыт: скорость загрузки, отзывчивость интерфейса и визуальную стабильность. С мая 2021 года они входят в Page Experience и учитываются при ранжировании.
Все три метрики оцениваются для каждого URL отдельно: хорошие показатели главной страницы не помогут карточкам товаров. Google берёт данные из Chrome UX Report — это данные реальных пользователей, а не лабораторные симуляции.
Что такое Core Web Vitals
LCP — хорошо
Самый крупный элемент отрисован
INP — хорошо
Интерфейс отреагировал на ввод
CLS — хорошо
Минимальный сдвиг макета
Порог оценки
Доля пользователей в зелёной зоне
История: от FID к INP
Google представил Core Web Vitals в 2020 году с тремя метриками: LCP, FID (First Input Delay) и CLS. FID измерял задержку первого нажатия. Это полезно, но покрывало лишь часть интерактивности страницы.
Google объявляет три метрики: LCP, FID, CLS. Инструменты начинают поддерживать новые сигналы.
CWV официально входят в алгоритм ранжирования. Раскатка завершается в августе 2021 года.
Interaction to Next Paint заменяет First Input Delay. INP учитывает все взаимодействия за сессию, а не только первое.
Сайты с тяжёлым JS (SPA, e-commerce, фильтры) ощущают давление INP. Оптимизация Long Tasks становится приоритетом.
LCP — Largest Contentful Paint
LCP фиксирует момент, когда самый крупный видимый блок контента на странице полностью отрисован. Обычно это hero-изображение, обложка статьи или крупный заголовок H1.
| Значение LCP | Оценка | Действие |
|---|---|---|
| ≤ 2,5 с | Хорошо | Поддерживайте, следите в GSC |
| 2,5 – 4,0 с | Нужно улучшить | Оптимизируйте изображения, снижайте TTFB |
| > 4,0 с | Плохо | Критичный приоритет, аудит сразу |
Частые причины медленного LCP
- Медленный TTFB (сервер, CDN, нет кеширования): до 40% времени LCP
- Изображение не приоритизировано: нет
fetchpriority="high" - Hero-изображение не предзагружено (
<link rel="preload">) - CSS и JS, блокирующие рендеринг, задерживают первую отрисовку
- Изображения слишком большие: нет WebP/AVIF, нет
srcset - Элемент LCP рендерится через JS (React SSR не завершён к моменту LCP)
<!-- Prioritise the LCP image -->
<link rel="preload" as="image" href="/hero.webp" fetchpriority="high" />
<img
src="/hero.webp"
alt="Hero"
fetchpriority="high"
loading="eager"
decoding="async"
width="1280"
height="720"
/>loading="lazy" на hero-изображение: браузер отложит его загрузку, и LCP вырастет. Атрибут lazy подходит только для изображений ниже первого экрана.INP — Interaction to Next Paint
INP измеряет задержку от любого взаимодействия пользователя (клика, нажатия клавиши, тапа) до следующей визуальной отрисовки страницы. В отличие от FID, INP учитывает все взаимодействия за сессию и берёт худший случай (с отсечением выбросов).
Что ломает INP
- Long Tasks дольше 50 мс блокируют главный поток: браузер не успевает обработать ввод
- Тяжёлые обработчики событий: синхронный setState в React, массовые обновления DOM
- Нет
scheduler.yield()илиsetTimeout(0)для разбивки длинных задач - Сторонние скрипты (чат, реклама, аналитика) занимают главный поток
- Анимации на JS вместо CSS
transform/opacity
// Breaking up a Long Task with scheduler.yield()
async function processLargeList(items) {
for (let i = 0; i < items.length; i++) {
processItem(items[i]);
// Yield to the main thread every 50 items
if (i % 50 === 0) {
await scheduler.yield();
}
}
}scheduler.yield() — современная альтернатива setTimeout(0). Браузер возвращает управление, обрабатывает ввод пользователя и продолжает задачу. Работает в Chrome 115+; в остальных браузерах используйте полифил на базе setTimeout.CLS — Cumulative Layout Shift
CLS — безразмерная метрика, которая описывает суммарный неожиданный сдвиг элементов страницы. Формула: impact fraction × distance fraction. Сдвиг элемента после нажатия не учитывается: считается только то, что сместилось без действия пользователя.
| Значение CLS | Оценка | Типичная причина |
|---|---|---|
| ≤ 0,1 | Хорошо | Место зарезервировано под все элементы |
| 0,1 – 0,25 | Нужно улучшить | Шрифты без font-display: swap, баннеры |
| > 0,25 | Плохо | Изображения без размеров, динамические вставки |
Частые источники CLS
- Изображения без атрибутов
widthиheight: браузер не знает размер до загрузки - Веб-шрифты без
font-display: optionalилиswap: FOUT сдвигает текст - Динамически вставляемые баннеры и cookie-уведомления вверху страницы
- CSS-анимации, которые меняют
top/left/marginвместоtransform - Реклама без зарезервированного места (
min-heightу контейнера)
/* Reserve space for an ad slot */
.ad-container {
min-height: 250px;
width: 100%;
}
/* Animation without CLS: transform and opacity only */
.card:hover {
transform: translateY(-4px);
/* Wrong: margin-top: -4px — this shifts layout */
}Влияние на ранжирование
Google подтвердил: CWV — один из сигналов Page Experience, который участвует в ранжировании. Но это тай-брейкер, а не главный фактор. Страница с отличным контентом и плохим CWV обгонит страницу с хорошим CWV и слабым контентом.
Важнее косвенный эффект: быстрые страницы снижают отказы, увеличивают глубину сессии и конверсию. Бизнес-аргумент в пользу CWV весомее SEO-аргумента. Amazon подсчитал: +100 мс к LCP = −1% выручки.
Как измерять CWV
Есть два типа данных: лабораторные (симуляция: Lighthouse, WebPageTest) и полевые (реальные пользователи: CrUX, GSC). Google ранжирует по полевым данным, а лаборатория нужна для диагностики.
| Тип | Инструмент | Что показывает | Когда использовать |
|---|---|---|---|
| Полевые | Google Search Console | CWV по всем URL сайта (p75) | Приоритизация проблемных страниц |
| Полевые | CrUX Dashboard (Looker) | Тренды по 28-дневному окну | Отслеживание прогресса |
| Лабораторные | PageSpeed Insights | LCP/INP/CLS и рекомендации | Диагностика конкретного URL |
| Лабораторные | Lighthouse (DevTools) | Подробный waterfall и трейс | Глубокий анализ первопричин |
| Лабораторные | WebPageTest | Видеозапись загрузки, filmstrip | Сравнение до и после |
Инструменты диагностики
| Инструмент | Бесплатно | LCP | INP |
|---|---|---|---|
| Google Search Console | Да | ✓ | ✓ |
| PageSpeed Insights | Да | ✓ | ✓ |
| Chrome DevTools | Да | ✓ | ✓ |
| Lighthouse CI | Да | ✓ | ✓ |
| WebPageTest | Да (с лимитами) | ✓ | ✓ |
| SpeedCurve | Платно | ✓ | ✓ |
| Sentry (web-vitals SDK) | Freemium | ✓ | ✓ |
| Инструмент | CLS | Полевые данные |
|---|---|---|
| Google Search Console | ✓ | ✓ |
| PageSpeed Insights | ✓ | ✓ (CrUX) |
| Chrome DevTools | ✓ | — |
| Lighthouse CI | ✓ | — |
| WebPageTest | ✓ | — |
| SpeedCurve | ✓ | ✓ |
| Sentry (web-vitals SDK) | ✓ | ✓ |
// web-vitals v4 — collect real CWV
import { onLCP, onINP, onCLS } from 'web-vitals';
function sendToAnalytics({ name, value, id }) {
// Send to GA4
gtag('event', name, {
value: Math.round(name === 'CLS' ? value * 1000 : value),
metric_id: id,
metric_delta: value,
});
}
onLCP(sendToAnalytics);
onINP(sendToAnalytics);
onCLS(sendToAnalytics);Чеклист оптимизации
LCP
- Добавьте
fetchpriority="high"и уберитеloading="lazy"у hero-изображения - Добавьте
<link rel="preload" as="image">для hero в<head> - Конвертируйте изображения в WebP или AVIF и настройте
srcset - Снизьте TTFB до ≤ 800 мс: CDN, кеширование, Edge SSR
- Уберите скрипты, блокирующие рендер, из
<head>(async/defer/module) - Задайте
Cache-Control: max-age=31536000для статических ресурсов
INP
- Профилируйте Long Tasks в Chrome DevTools → Performance → Main Thread
- Разбивайте задачи дольше 50 мс через
scheduler.yield()илиsetTimeout(0) - Добавьте debounce на обработчики
inputиscroll(16–100 мс) - Оптимизируйте React:
useMemo,useCallback,React.memo, виртуализация списков - Переносите сторонние скрипты в Web Workers или загружайте их после LCP
- Делайте CSS-анимации только через
transformиopacity
CLS
- Задайте
widthиheightвсем<img>: браузер зарезервирует место - Используйте
aspect-ratioдля контейнеров с неизвестными размерами - Настройте
font-display: optionalдля критичных шрифтов - Резервируйте
min-heightпод рекламные блоки и динамический контент - Размещайте уведомления (cookie, баннеры) внизу, а не вверху страницы
- Проверьте FOUT: шрифты без fallback сдвигают текст при загрузке
Что такое Core Web Vitals и почему они важны для SEO?
Как проверить Core Web Vitals сайта?
LCP больше 4 секунд — насколько срочно это исправлять?
Пороги Core Web Vitals одинаковые для мобильных и десктопных страниц?
Что важнее для e-commerce: LCP или CLS?
Check it with SpiderHead
Free and local: run the audit on your own machine.



