Core Web Vitals: полное руководство 2026

Как читать LCP, INP и CLS по полевым данным, понять, какой слой отвечает за проблему, и улучшать пользовательский опыт без обещаний роста позиций.

Core Web Vitals (CWV) — это набор метрик Google, которые измеряют реальный пользовательский опыт: скорость загрузки, отзывчивость интерфейса и визуальную стабильность. С мая 2021 года они входят в Page Experience и учитываются при ранжировании.

Все три метрики оцениваются для каждого URL отдельно: хорошие показатели главной страницы не помогут карточкам товаров. Google берёт данные из Chrome UX Report — это данные реальных пользователей, а не лабораторные симуляции.

Три метрики Core Web Vitals и их зелёные пороги. Страница считается хорошей, если в зелёной зоне 75% реальных пользователей.
Google оценивает CWV по p75, то есть по 75-му перцентилю. Страница «хорошая», если у 75% реальных пользователей метрика попадает в зелёную зону. Лабораторные инструменты вроде Lighthouse показывают медианное устройство: они нужны для диагностики, но не для итоговой оценки.

Что такое Core Web Vitals

≤ 2,5 с

LCP — хорошо

Самый крупный элемент отрисован

≤ 200 мс

INP — хорошо

Интерфейс отреагировал на ввод

≤ 0,1

CLS — хорошо

Минимальный сдвиг макета

75%

Порог оценки

Доля пользователей в зелёной зоне

История: от FID к INP

Google представил Core Web Vitals в 2020 году с тремя метриками: LCP, FID (First Input Delay) и CLS. FID измерял задержку первого нажатия. Это полезно, но покрывало лишь часть интерактивности страницы.

май 2020Анонс Core Web Vitals

Google объявляет три метрики: LCP, FID, CLS. Инструменты начинают поддерживать новые сигналы.

июнь 2021Обновление Page Experience

CWV официально входят в алгоритм ранжирования. Раскатка завершается в августе 2021 года.

март 2024FID → INP

Interaction to Next Paint заменяет First Input Delay. INP учитывает все взаимодействия за сессию, а не только первое.

2025–2026INP на практике

Сайты с тяжёлым 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)
Пример приоритизации ресурса LCP:
html
<!-- 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

INP = задержка ввода + время обработки + задержка отрисовки

Input delay — ожидание в очередидо 50 мс
Processing time — обработчик JSдо 100 мс
Presentation delay — рендер и отрисовкадо 50 мс

Что ломает INP

  • Long Tasks дольше 50 мс блокируют главный поток: браузер не успевает обработать ввод
  • Тяжёлые обработчики событий: синхронный setState в React, массовые обновления DOM
  • Нет scheduler.yield() или setTimeout(0) для разбивки длинных задач
  • Сторонние скрипты (чат, реклама, аналитика) занимают главный поток
  • Анимации на JS вместо CSS transform/opacity
Пример разбивки Long Task через scheduler:
javascript
// 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 у контейнера)
Пример резервирования места, чтобы не допустить CLS:
css
/* 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: сайты в зелёной зоне имеют более низкий bounce rate и показываются в отчёте Page Experience в Google Search Console. Быстрая проверка: если конкурент с похожим контентом выше вас, посмотрите его CWV в PageSpeed Insights.

Важнее косвенный эффект: быстрые страницы снижают отказы, увеличивают глубину сессии и конверсию. Бизнес-аргумент в пользу CWV весомее SEO-аргумента. Amazon подсчитал: +100 мс к LCP = −1% выручки.

Как измерять CWV

Есть два типа данных: лабораторные (симуляция: Lighthouse, WebPageTest) и полевые (реальные пользователи: CrUX, GSC). Google ранжирует по полевым данным, а лаборатория нужна для диагностики.

ТипИнструментЧто показываетКогда использовать
ПолевыеGoogle Search ConsoleCWV по всем URL сайта (p75)Приоритизация проблемных страниц
ПолевыеCrUX Dashboard (Looker)Тренды по 28-дневному окнуОтслеживание прогресса
ЛабораторныеPageSpeed InsightsLCP/INP/CLS и рекомендацииДиагностика конкретного URL
ЛабораторныеLighthouse (DevTools)Подробный waterfall и трейсГлубокий анализ первопричин
ЛабораторныеWebPageTestВидеозапись загрузки, filmstripСравнение до и после
PageSpeed Insights показывает оба типа данных на одной странице: сверху полевые (CrUX), ниже лабораторные (Lighthouse). Полевые данные показывают статус, а лабораторные помогают найти причину.

Инструменты диагностики

ИнструментБесплатноLCPINP
Google Search ConsoleДа✓✓
PageSpeed InsightsДа✓✓
Chrome DevToolsДа✓✓
Lighthouse CIДа✓✓
WebPageTestДа (с лимитами)✓✓
SpeedCurveПлатно✓✓
Sentry (web-vitals SDK)Freemium✓✓
CLS и полевые данные для тех же инструментов:
ИнструментCLSПолевые данные
Google Search Console✓✓
PageSpeed Insights✓✓ (CrUX)
Chrome DevTools✓—
Lighthouse CI✓—
WebPageTest✓—
SpeedCurve✓✓
Sentry (web-vitals SDK)✓✓
Для мониторинга в продакшене подключите библиотеку web-vitals.js от Google: она собирает реальные CWV и отправляет их в вашу аналитику (GA4, Sentry, DataDog).
javascript
// 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);

Чеклист оптимизации

Пороговые значения Core Web Vitals для LCP, INP и CLS по версии Google.

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 сдвигают текст при загрузке
Приоритет: начните с LCP. Он чаще всего в красной зоне и имеет самый большой вес в Page Experience. Когда LCP станет зелёным, переходите к INP (важно для SPA и интерактивных страниц), затем к CLS.
Что такое Core Web Vitals и почему они важны для SEO?
Core Web Vitals измеряют скорость загрузки, интерактивность и стабильность макета. Google говорит, что системы ранжирования учитывают их как часть более широкого пользовательского опыта страницы. Но хороший показатель не гарантирует топ-позиций: релевантность и другие сигналы по-прежнему важны.
Как проверить Core Web Vitals сайта?
Используйте Google Search Console (отчёт Core Web Vitals), PageSpeed Insights (реальные данные CrUX и лабораторные), вкладку Performance в Chrome DevTools или Lighthouse. Для постоянного мониторинга подключите web-vitals.js и отправляйте данные в GA4.
LCP больше 4 секунд — насколько срочно это исправлять?
Относитесь к этому как к приоритету по пользовательскому опыту и диагностике. Найдите элемент LCP, путь его доставки и затронутую группу устройств, а затем проверьте изменения и в лабораторных, и в полевых данных. Не обещайте ранжирование или сроки результата по одному исправлению.
Пороги Core Web Vitals одинаковые для мобильных и десктопных страниц?
Пороговые значения одинаковые (LCP ≤ 2,5 с, INP ≤ 200 мс, CLS ≤ 0,1), но показатели измеряются отдельно. Мобильные почти всегда показывают хуже из-за более медленных процессоров и сетей. GSC показывает оба сегмента, поэтому начинайте с мобильного.
Что важнее для e-commerce: LCP или CLS?
LCP критичнее для конверсии: медленный главный элемент на товарной или посадочной странице напрямую снижает продажи (по данным Google, примерно −1% конверсии на каждые +0,1 с LCP). CLS критичнее для UX: сдвиг кнопки «Купить» из-под курсора — прямой источник отказов. Работайте над обоими параллельно.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it