Оптимизация скорости сайта: Core Web Vitals (LCP/INP/CLS)

Разработка
12 июля 2026
8 мин чтения

Runbook по ускорению сайта: как измерять CWV, находить причины LCP/INP/CLS, исправлять по приоритетам, план quick wins/2 дня/30–60–90 и чек‑лист релиза.

Оптимизация скорости сайта: Core Web Vitals (LCP/INP/CLS)

Для бизнеса

  • Core Web Vitals = реальный UX, который влияет на лиды/продажи через удобство, и косвенно — на SEO через качество страницы.
  • Улучшения чаще всего дают эффект в трёх местах: TTFB (сервер), самый тяжёлый элемент первого экрана (LCP), тяжёлый JS и виджеты (INP).
  • Что реально сделать быстро:
    • за 2 часа: отключить/отложить тяжёлые виджеты, оптимизировать hero‑изображение, включить сжатие/кеш.
    • за 2 дня: разгрести критический путь CSS/JS, настроить CDN/edge‑cache, привести изображения к нормальным размерам/форматам.
    • за 2 недели: код‑сплиттинг, performance budget, регресс‑контроль, стабильный релизный процесс.

Для разработчиков

  • Работайте по схеме: Field data (CrUX/Search Console) → root cause → фиксы по LCP/INP/CLS → регресс‑контроль.
  • Не оптимизируйте «скор» Lighthouse вслепую: приоритет — 75‑й перцентиль полевых данных и проблемные шаблоны страниц.
  • Почти всегда «выигрышные» направления:
    • TTFB + кеши/CDN
    • render‑blocking CSS/JS + critical CSS
    • JS‑бандл + long tasks + third‑party
    • hero‑media + приоритет загрузки

Для контент‑редакторов

  • Скорость чаще всего ломают: огромные изображения, видео/встраивания в первом экране, баннеры, которые «прыгают», тяжёлые шрифты.
  • Правило публикации:
    не ставить «оригинал 4000px» в первый экран;
    указывать размеры медиа (или использовать компоненты, которые это делают);
    не добавлять новые виджеты без проверки INP/CLS.

Правило № 1: сначала измеряем правильно

Field data vs Lab data — что это и почему нужны оба

  • Field data — реальные пользователи (CrUX/PSI/Search Console), исторические данные за период (обычно «скользящее окно» ~28 дней). Это то, что «чувствуют» люди.
  • Lab data — синтетика (Lighthouse/DevTools/WebPageTest): удобно для дебага причин, но не всегда отражает реальные устройства/сети.

Где смотреть (чек‑лист инструментов)

  • Search Console → Core Web Vitals: группирует URL по типам проблем и «плохой метрике».
  • PageSpeed Insights: показывает field + lab, 75‑й перцентиль и распределение.
  • Lighthouse (локально/CI) — диагностика критического пути.
  • Chrome DevTools Performance — long tasks, layout shifts, waterfall.
  • WebPageTest — детальный waterfall, TTFB, CDN, кеши.

Принципы, без которых вы «чините не то»

  • Мобильный приоритет: основная боль обычно там.
  • 75‑й перцентиль: CWV оценивают «плохой хвост», а не среднее.
  • Сегментация по шаблонам: лечите не «страницу /about», а тип «карточка», «каталог», «статья», «поиск», «лендинг».

Пороговые значения Core Web Vitals

Пороговые значения (Good / Needs Improvement / Poor) публикуются в официальной документации инструментов и могут обновляться — перед публикацией проверьте актуальные thresholds в документации Google/web.dev.

Ориентиры (как в PageSpeed Insights):

  • LCP: Good ≤ 2.5s; NI 2.5–4.0s; Poor > 4.0s
  • CLS: Good ≤ 0.1; NI 0.1–0.25; Poor > 0.25
  • INP: Good ≤ 200ms; NI 200–500ms; Poor > 500ms

Важные детали:

  • Field‑оценка берётся по 75‑му перцентилю.
  • Отчёты по real‑user данным обычно отражают скользящий период и не «вылечиваются мгновенно» после релиза.

Runbook: сделайте это по порядку (алгоритм 10 шагов)

  1. Соберите baseline по field data
    • Какие группы URL в Search Console «Poor/NI» и по какой метрике.
  2. Выберите 3–5 репрезентативных страниц на каждый проблемный шаблон
    • Пример: «статья», «карточка товара», «категория», «лендинг».
  3. Соберите lab‑профили
    • Lighthouse + DevTools Performance для каждой репрезентативной страницы.
  4. Определите главного «виновника»
    • LCP? INP? CLS?
    • Не лечите всё сразу — сначала самая «плохая» метрика на самых трафиковых шаблонах.
  5. Разложите причины по слоям
    • Сервер/TTFB → критический путь CSS/JS → медиа → third‑party.
  6. Сделайте quick wins (1 релиз)
    • Кеш/сжатие, hero‑изображение, отложенная загрузка виджетов.
  7. Среднесрочные изменения (2–3 релиза)
    • code splitting, устранение render‑blocking, preload/preconnect, оптимизация шрифтов.
  8. Стратегические изменения (если нужно)
    • SSR/SSG, переработка шаблонов, дизайн‑система, пересборка «тяжёлых» страниц.
  9. Перепроверка: lab + field
    • Lab покажет эффект сразу. Field обновится по мере накопления данных (и может запаздывать).
  10. Закрепите регресс‑контроль
    • Performance budget + проверка в CI + «no new third‑party without review».

Диагностика: таблицы‑справочники LCP / INP / CLS

A) LCP — «грузится долго первый экран»

Симптом Вероятная причина Как проверить Что сделать Как подтвердить
LCP > порога на мобайле высокий TTFB waterfall (WPT/DevTools), server timing CDN/edge cache, full‑page cache, оптимизация бэкенда TTFB упал, LCP стабильно ниже
LCP «зависает» до загрузки CSS render‑blocking CSS Lighthouse: «Eliminate render‑blocking resources» critical CSS, разделить CSS, preload critical LCP/TTI улучшаются, меньше blocking time
LCP ждёт JS render‑blocking JS / hydration DevTools Performance: main thread busy defer/async, splitting, SSR/partial hydration LCP наступает раньше, меньше long tasks
LCP = hero‑картинка и она тяжёлая большой размер/не тот формат network: размер/формат AVIF/WebP, правильные размеры, srcset, preload/priority hero грузится быстрее, LCP падает
LCP «плавает» кеш не работает response headers, cache‑hit/miss настроить кеши, vary/ETag, CDN LCP стабильнее, меньше variance
LCP ломают шрифты блокирующие webfonts waterfall: font blocking preload fonts, font‑display, subset меньше блокировок, быстрее first render
LCP хуже после добавления виджета third‑party блокирует отключить → сравнить delayed/conditional load, заменить виджет LCP возвращается к baseline

B) INP — «кликаю, а сайт тормозит»

Симптом Причина Проверка Фиксы Подтверждение
INP плохой на всех страницах long tasks на main thread DevTools Performance: long tasks splitting, убрать тяжёлые синхронные скрипты меньше long tasks, INP падает
INP плохой на конкретном сценарии тяжёлый обработчик события Performance + Event log debounce/throttle, оптимизация обработчика interaction latency снижается
«подвисает» при открытии меню/фильтров re‑render/layout thrashing Performance: layout recalcs мемоизация, виртуализация списков плавность, меньше layout
INP ухудшился после чата/аналитики third‑party отключить → сравнить conditional load (после consent/scroll), self‑host INP нормализуется
INP плохой в SPA тяжёлый hydration/JS bundle Coverage/Bundle analyzer code splitting, SSR/partial hydration меньше JS, быстрее интерактив
INP плохой на слабых девайсах слишком много JS CrUX/field сегменты, lab throttling performance budget, удалить лишнее улучшение у «хвоста»

C) CLS — «всё прыгает»

Симптом Причина Проверка Фиксы Подтверждение
CLS скачет при загрузке картинок нет размеров DevTools: layout shifts width/height, aspect‑ratio, placeholders CLS падает
CLS при загрузке шрифтов FOIT/FOUT waterfall, font swap font‑display: swap/optional, preload, fallback меньше shift при смене шрифта
CLS от баннеров/виджетов вставка «сверху» без места shift sources резервировать место, sticky без reflow CLS стабилен
CLS от поздних блоков выше фолда lazy‑load «не там» shift sources не lazy‑load above‑the‑fold, skeleton CLS падает
CLS при открытии модалок скроллбар/overflow воспроизведение компенсировать scrollbar, fixed layout CLS/визуальные скачки уходят

Кейс, как мы разработали и оптимизировали сайт для привлечения туристов на Урал за счёт улучшения визуальной привлекательности, удобства навигации и адаптации под мобильные устройства

Кейс, как мы разработали и оптимизировали сайт для привлечения туристов на Урал за счёт улучшения визуальной привлекательности, удобства навигации и адаптации под мобильные устройства

Реальные шаги по слоям (чек‑листы)

Сервер/инфраструктура (TTFB, кеши, CDN)

Чек‑лист:

  • Включить/проверить Brotli/Gzip, корректные cache headers.
  • Настроить CDN/edge caching для статики и (по возможности) HTML.
  • Full‑page cache / microcache для контентных страниц.
  • Уменьшить TTFB: оптимизировать бэкенд, DB‑запросы, сторонние API.
  • Проверить keep‑alive, HTTP/2/3 (где релевантно).
  • Понять cache‑hit/miss по заголовкам и логам.

Типичный эффект: улучшение LCP за счёт снижения TTFB, стабильность.

Риски: неправильный кеш может показывать не тот контент (учесть vary, персонализацию).

Фронтенд critical path (CSS/JS/рендер)

Чек‑лист:

  • Убрать render‑blocking: critical CSS, defer/async для JS.
  • Code splitting по маршрутам/компонентам; tree‑shaking.
  • preload/preconnect для критических ресурсов (fonts, hero, API).
  • Ограничить «первый экран»: меньше CSS/JS и меньше DOM.
  • Если SEO важно — рассмотреть SSR/SSG (архитектура важнее фреймворка).

Типичный эффект: LCP/INP улучшаются одновременно.

Риски: сломать порядок стилей/FOUC, нужна аккуратная регресс‑проверка.

Медиа и контент (изображения/видео)

Чек‑лист:

  • Перевести изображения в WebP/AVIF, правильные размеры.
  • Использовать srcset/sizes и не отдавать десктоп‑размер на мобайл.
  • Не делать lazy‑load для hero (LCP‑элемент). Для hero — preload/priority.
  • Видео: постер + загрузка по клику; не тащить тяжёлый плеер в 1 экране.
  • В админке/гайде редактора: ограничения по размеру и «готовые пресеты».

Типичный эффект: быстрый выигрыш по LCP и общей скорости.

Риски: «пережатие» до мыла может ухудшить конверсию — держите баланс.

Third‑party скрипты и виджеты

Чек‑лист:

  • Инвентаризация: что грузится, вес, какие события/блокировки создаёт.
  • Отложенная загрузка (после согласия, after interaction, after scroll).
  • Conditional loading: грузить только там, где реально нужно.
  • По возможности — заменить тяжёлые виджеты на лёгкие или self‑host.
  • Ввести performance budget: нельзя добавлять новый third‑party без ревью.

Типичный эффект: сильное улучшение INP, иногда CLS и LCP.

Риски: потерять часть функционала/аналитики — согласовать с маркетингом.

План внедрения

Сделать за 2 часа (quick wins)

  1. Отключить/отложить самые тяжёлые third‑party (чат/виджеты) и сравнить INP/LCP.
  2. Оптимизировать hero‑изображение (формат, размер, приоритет).
  3. Включить Brotli/Gzip и базовые cache headers.
  4. Указать размеры изображений/видео, чтобы убрать CLS на ключевых шаблонах.
  5. Убрать очевидные render‑blocking ресурсы (минимум: defer для не‑критичного JS).

Сделать за 2 дня (реальный «спринт ускорения»)

  1. Сегментировать страницы по шаблонам и выбрать топ‑2 по трафику/проблемам.
  2. Настроить CDN для статики + кеширование HTML (где возможно).
  3. Critical CSS для первого экрана; разделить CSS по страницам.
  4. Code splitting по маршрутам; убрать «всё в один бандл».
  5. Шрифты: preload + font‑display + subset.
  6. Перевести медиа на responsive (srcset) и нормальные размеры.
  7. Условная загрузка third‑party (consent/scroll) и аудит каждого.
  8. Повторить lab‑измерения и зафиксировать baseline.

План 30 / 60 / 90 дней

30 дней (стабилизация):

  • performance budget (LCP/INP/CLS + вес бандла)
  • проверки в CI (Lighthouse/скрипты)
  • регресс‑чек‑лист релиза
  • гайд для контент‑редакторов по медиа и встраиваниям

60 дней (архитектура):

  • SSR/SSG где SEO критично
  • рефакторинг тяжёлых сценариев (INP)
  • оптимизация критических страниц под мобильный UX
  • наблюдаемость: ошибки/метрики/алерты

90 дней (операционная зрелость):

  • регулярный performance‑review релизов
  • контроль third‑party как отдельный процесс
  • плановая оптимизация шаблонов и компонентов
  • поддержка и стабильность (в т.ч. SLA‑контур при необходимости)

Антипаттерны (что НЕ делать)

  1. Гнаться за «100/100 Lighthouse», игнорируя field data.
  2. Оптимизировать всё сразу без приоритизации по шаблонам и метрикам.
  3. Включать lazy‑load для hero‑элемента и ухудшать LCP.
  4. Добавлять виджеты «по просьбе» без ревью INP/CLS.
  5. Лечить CLS «на глаз», не используя layout shift debug.
  6. Убирать аналитику полностью ради скорости (нужно оптимизировать, а не отключать без плана).
  7. Оптимизировать только десктоп — а проседать на мобайле.
  8. Держать огромные изображения «на всякий случай» в первом экране.
  9. Игнорировать кеш‑инвалидацию (получить баги «показывает старое»).
  10. Делать «перф‑рефакторинг» без регресс‑контроля и отката.

Чек‑лист «готовность к релизу»

  1. Есть performance budget (LCP/INP/CLS + вес JS/CSS).
  2. Прогнаны проверки на 3–5 ключевых шаблонах страниц.
  3. Проверено, что hero‑элемент не попал под lazy‑load.
  4. Изображения/видео имеют размеры/аспект и не создают CLS.
  5. Нет новых third‑party без ревью (и есть план conditional load).
  6. Проверены кеши: cache‑hit/miss, корректные заголовки, vary.
  7. Проверена деградация на мобайле (throttling).
  8. Проверены long tasks и main thread блокировки на ключевых сценариях.
  9. Ошибки фронта (error tracking) включены и мониторятся.
  10. Есть план отката/feature flags для рисковых изменений.
  11. После релиза — повторные измерения и фиксация результата.
  12. (Если есть SEO‑риск) проверены sitemap/robots/редиректы на затронутых страницах.
  13. Контент‑команда получила правила публикации медиа/встраиваний.

Красные флаги: когда нужен профессиональный аудит

  • Высокий TTFB на всех страницах — похоже на инфраструктуру/бэкенд.
  • INP плохой из‑за тяжёлой SPA/hydration и «JS‑комбайна».
  • CLS нестабилен из‑за баннеров/рекламы/встраиваемых блоков.
  • Сайт «ускорили», но после каждого релиза скорость снова падает (нет регресс‑контроля).
  • Много легаси и непонятно, что реально грузится (нужна инвентаризация).
  • Нет событий аналитики → вы не можете измерить эффект.
  • Конверсия падает при каждой «оптимизации» → проблемы с UX/контентом/компромиссами.
  • Команда боится трогать кеши/SSR/релизы — нет безопасного процесса изменений.

Если коротко: ускорение — это не «подкрутить Lighthouse», а поставить процесс: полевые данные → причины → приоритизированные фиксы → регресс‑контроль → мониторинг.

FAQ

1. Почему PageSpeed показывает одно, а “в реальности” другое?

Потому что lab‑данные — симуляция, а field‑данные — реальные пользователи за период. Нужно смотреть оба: lab для причин, field для результата.

2. Что важнее: LCP или INP?

Зависит от типа сайта. Контент и лендинги чаще упираются в LCP/CLS, интерфейсы/кабинеты — в INP. Практически: начните с метрики, по которой вы “Poor” на трафиковых шаблонах.

3. Как быстро обновятся CWV в Search Console?

Field‑данные накапливаются и отражают скользящий период, поэтому эффект не всегда виден “завтра”. Сначала фиксируйте lab‑прирост, затем ждите подтверждение в field.

4. Можно ли улучшить CWV без переписывания сайта?

Часто — да: кеши, медиа, критический путь, third‑party, code splitting дают заметный эффект без “переписывания”.

5. Как влияет хостинг/сервер?

Через TTFB и стабильность. Если сервер отвечает медленно или кеши не работают — LCP почти всегда страдает.

6. Как не сломать SEO при оптимизации?

Не меняйте URL/структуру без плана, не блокируйте нужные ресурсы, контролируйте рендеринг (особенно при SSR/SSG), и проверяйте индексацию после релизов.

7. Как контролировать скорость постоянно?

Performance budget в CI, регулярные отчёты, контроль third‑party, алерты по ошибкам/метрикам и дисциплина релизов.

Другие статьи