Веб-производительность

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

Диаграмма Core Web Vitals: LCP, INP, CLS

LCP, INP и CLS — три метрики Google, которые напрямую влияют на ранжирование. Как измерить, диагностировать и улучшить каждую из них.

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

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

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. Инструменты начинают поддерживать новые показатели.

Июнь 2021Page Experience Update

CWV официально входят в алгоритм ранжирования. Rollout завершается в августе 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-img
  • Hero-изображение не предзагружено (<link rel="preload">)
  • Render-blocking CSS/JS задерживает первую отрисовку
  • Изображение слишком большое: нет WebP/AVIF, нет srcset
  • LCP-элемент находится за JS-рендером (React SSR не завершён к моменту LCP)
HTML
<!-- Приоритизация LCP-изображения -->
<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 подходит только для изображений ниже fold.

INP — Interaction to Next Paint

INP измеряет задержку от любого взаимодействия пользователя (клик, нажатие клавиши, тач) до следующей визуальной отрисовки страницы. В отличие от FID, INP учитывает все взаимодействия за сессию и берёт наихудшее (с поправкой на выбросы).

Анатомия INP

INP = input delay + processing time + presentation delay

Input delay (ожидание в очереди)до 50 мс
Processing time (JS-обработчик)до 100 мс
Presentation delay (рендер + пейнт)до 50 мс

Что ломает INP

  • Long Tasks > 50 мс блокируют главный поток — браузер не успевает обработать ввод
  • Тяжёлые обработчики событий: синхронный setState в React, массовый DOM update
  • Нет scheduler.yield() или setTimeout(0) для разбивки длинных задач
  • Сторонние скрипты (чат, реклама, аналитика) занимают main thread
  • Анимации через JS вместо CSS transform/opacity
JAVASCRIPT
// Разбивка Long Task через scheduler.yield()
async function processLargeList(items) {
  for (let i = 0; i < items.length; i++) {
    processItem(items[i]);
    // Уступаем main thread каждые 50 элементов
    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
  • Ads без зарезервированного места (min-height на контейнер)
CSS
/* Резервируем место под рекламный блок */
.ad-container {
  min-height: 250px;
  width: 100%;
}

/* Анимация без CLS: только transform/opacity */
.card:hover {
  transform: translateY(-4px);
  /* Нельзя: margin-top: -4px — это сдвиг разметки */
}

Влияние на ранжирование

Google подтвердил: CWV — один из сигналов Page Experience, который участвует в ранжировании. Но это tiebreaker, а не основной фактор. Страница с отличным контентом, но плохим CWV обгонит страницу с хорошим CWV, но слабым контентом.

Реальный эффект CWV: сайты в зелёной зоне реже получают высокий bounce rate, а 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). Ориентируйтесь на полевые для оценки статуса, на лабораторные — для поиска причин.

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

ИнструментБесплатноLCPINPCLSПолевые данные
Google Search ConsoleДа
PageSpeed InsightsДа✓ (CrUX)
Chrome DevToolsДа
Lighthouse CIДа
WebPageTestДа (лимиты)
SpeedCurveПлатно
Sentry (web-vitals SDK)Freemium
Для мониторинга в production подключите web-vitals JS-библиотеку от Google — она собирает реальные CWV и отправляет в вашу аналитику (GA4, Sentry, DataDog).
JAVASCRIPT
// web-vitals v4 — сбор реальных CWV
import { onLCP, onINP, onCLS } from 'web-vitals';

function sendToAnalytics({ name, value, id }) {
  // Отправка в 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
  • Убрать render-blocking скрипты из <head> (async/defer/module)
  • Настроить Cache-Control: max-age=31536000 для статических ресурсов

INP

  • Профилировать Long Tasks в Chrome DevTools → Performance → Main Thread
  • Разбить задачи > 50 мс через scheduler.yield() или setTimeout(0)
  • Дебаунсировать обработчики input / scroll (16–100 мс)
  • Оптимизировать React: useMemo, useCallback, React.memo, виртуализация списков
  • Перенести сторонние скрипты в Web Worker или загружать после 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 — три метрики Google (LCP, INP, CLS), измеряющие скорость загрузки, интерактивность и стабильность макета. С мая 2021 они входят в Page Experience Signal и напрямую влияют на ранжирование: плохие показатели снижают позиции, хорошие — дают небольшой бонус при прочих равных.
Используйте Google Search Console (отчёт «Основные показатели»), PageSpeed Insights (реальные данные CrUX + лабораторные), Chrome DevTools (вкладка Performance) или Lighthouse. Для мониторинга в реальном времени подключите библиотеку web-vitals.js с отправкой данных в GA4.
Срочно. Значение выше 4 с попадает в категорию «Плохо» — Google понизит страницу в выдаче. Начните с анализа: чаще всего виновата неоптимизированная hero-картинка, медленный сервер или блокирующие скрипты. Снижение LCP до 2,5 с обычно даёт ощутимый рост позиций за 2–4 недели после переобхода.
Нет. Google измеряет их раздельно. Пороговые значения одинаковые (LCP ≤ 2,5 с, INP ≤ 200 мс, CLS ≤ 0,1), но мобильные показатели почти всегда хуже из-за медленных сетей и процессоров. GSC отображает оба сегмента — исправляйте в первую очередь мобильный.
Яндекс не использует CWV как прямой сигнал ранжирования, но скорость страницы учитывается в алгоритме через собственные метрики Яндекс.Метрики. Хорошие CWV косвенно улучшают поведенческие факторы (отказы, глубину просмотра), которые Яндекс учитывает активнее Google.
Исторически раз в несколько лет при существенном изменении ландшафта веба. В 2023 INP заменил FID, в 2024 порог INP был скорректирован. Google анонсирует изменения в блоге Chrome за 6–12 месяцев — подписывайтесь на web.dev/blog и Google Search Central.
LCP критичнее для конверсий: медленный главный элемент на товарной или landing-странице напрямую снижает продажи (каждые +0,1 с LCP ≈ −1% конверсии по данным Google). CLS критичнее для UX: сдвиг кнопки «Купить» из-под курсора — прямой источник отказов и жалоб. Работайте над обоими параллельно.