
Скорость сайта напрямую влияет на позиции в поиске и конверсию: по данным Google, каждая дополнительная секунда загрузки на мобильных устройствах может снижать конверсию до 20%. Core Web Vitals — это три измеримых показателя, по которым Google оценивает пользовательский опыт, и с 2021 года они входят в алгоритм ранжирования. Если ваш сайт не проходит пороговые значения, вы теряете трафик вне зависимости от качества контента. В этой статье — пошаговый разбор: что измерять, где смотреть и что конкретно делать.
В этой статье 9
- Что такое Core Web Vitals и почему это важно для SEO
- Где смотреть данные: инструменты диагностики
- Оптимизация LCP: как ускорить отрисовку главного элемента
- Оптимизация CLS: стабильность макета без сдвигов
- Оптимизация INP: отзывчивость интерфейса
- Серверная оптимизация: TTFB и кэширование
- Оптимизация изображений и шрифтов: быстрый выигрыш
- JavaScript и CSS: устраняем блокировку рендеринга
- Технический SEO и скорость: как это связано
Что такое Core Web Vitals и почему это важно для SEO
Core Web Vitals (CWV) — набор метрик, разработанных Google для оценки реального пользовательского опыта. Они входят в группу сигналов Page Experience и учитываются при ранжировании в Google (методология описана на web.dev/vitals). Яндекс аналогичные требования не публикует, но скорость и стабильность интерфейса косвенно влияют на поведенческие факторы — а значит, и на позиции в российской выдаче. Подробнее о метриках и их роли можно прочитать в нашем глоссарии Core Web Vitals.
Три ключевых метрики CWV: LCP (Largest Contentful Paint) — время отрисовки крупнейшего видимого элемента, INP (Interaction to Next Paint) — отзывчивость на взаимодействие, CLS (Cumulative Layout Shift) — визуальная стабильность страницы. Хорошие значения: LCP ≤ 2,5 с, INP ≤ 200 мс, CLS ≤ 0,1. Выход за пороги «хорошо» — это красный флаг в Search Console.
Пороговые значения Core Web Vitals
- LCP (загрузка)
- Хорошо: ≤ 2,5 с
- Плохо: > 4,0 с
- INP (отклик)
- Хорошо: ≤ 200 мс
- Плохо: > 500 мс
- CLS (стабильность)
- Хорошо: ≤ 0,1
- Плохо: > 0,25
- TTFB (косвенно)
- Хорошо: ≤ 200 мс
- Плохо: > 800 мс
Текст схемы и все данные
Пороговые значения Core Web Vitals
- LCP (загрузка)
- Хорошо: ≤ 2,5 с
- Плохо: > 4,0 с
- INP (отклик)
- Хорошо: ≤ 200 мс
- Плохо: > 500 мс
- CLS (стабильность)
- Хорошо: ≤ 0,1
- Плохо: > 0,25
- TTFB (косвенно)
- Хорошо: ≤ 200 мс
- Плохо: > 800 мс
Где смотреть данные: инструменты диагностики
Первый шаг — получить объективные данные, а не ориентироваться на субъективное ощущение скорости. Используйте полевые данные (реальные пользователи) вместо лабораторных тестов — именно они влияют на ранжирование. Базовый набор инструментов для SEO-аудита:
- Google Search Console → отчёт «Основные интернет-показатели» (Core Web Vitals) — полевые данные по вашему сайту, сегментация по URL и типу устройства
- PageSpeed Insights — лабораторные и полевые данные, конкретные рекомендации
- Chrome UX Report (CrUX) — агрегированные полевые данные из Chrome, источник для Search Console
- WebPageTest.org — детальный waterfall-анализ, тест с реальных устройств и локаций
- Lighthouse (встроен в Chrome DevTools) — аудит только лабораторный, хорош для разработки
Важный нюанс: PageSpeed Insights и Lighthouse дают разные числа — Lighthouse запускает лабораторный тест в контролируемой среде, а PSI показывает реальные данные CrUX. Для SEO имеют значение только полевые данные. Если PSI пишет «недостаточно данных» — сайт слишком маленький по трафику, Google не имеет репрезентативной выборки, и метрики не учитываются в ранжировании.
Оптимизация LCP: как ускорить отрисовку главного элемента
LCP — чаще всего главный hero-баннер, крупное изображение или заголовок H1. Самая частая причина плохого LCP — медленная загрузка изображения или блокировка рендеринга скриптами. Для улучшения LCP действуйте в следующем порядке:
- Определите LCP-элемент в DevTools (вкладка Performance → Timeline → LCP marker) или через PSI
- Если это изображение — конвертируйте в WebP или AVIF, сожмите без потери качества (TinyPNG, Squoosh)
- Добавьте атрибут fetchpriority="high" к тегу img LCP-изображения — браузер загрузит его в первую очередь
- Убедитесь, что изображение не загружается через JavaScript — это критически замедляет LCP
- Подключите CDN для статики (Cloudflare, BunnyCDN, AWS CloudFront) — сократите TTFB до 200 мс
- Настройте preload для LCP-ресурса: <link rel="preload" as="image" href="hero.webp">
- Устраните render-blocking ресурсы: перенесите неключевые JS в defer/async, критический CSS встройте inline
Сайт имел LCP 5,8 с на мобильных устройствах. Hero-изображение весило 1,4 МБ в формате PNG, загружалось без preload и через JS-слайдер. После конвертации в WebP (190 КБ), добавления fetchpriority="high", переноса слайдера на CSS и подключения CDN — LCP снизился до 1,9 с. В таком сценарии органический трафик заметно растёт, а показатель отказов на мобильных снижается.
Собирательный пример на основе типовых проектов — не реальный клиент.
Оптимизация CLS: стабильность макета без сдвигов
CLS выше 0,1 — это прыгающие кнопки и тексты, когда пользователь уже начал читать. Основные виновники: изображения без явно указанных размеров, встраиваемые шрифты без font-display, реклама и виджеты, динамически добавляемые в поток документа. Проверить конкретные элементы можно через вкладку Performance в Chrome DevTools — раздел Layout Shifts показывает каждый сдвиг с анимацией.
- Всегда указывайте width и height для img и video — браузер заранее резервирует место
- Используйте aspect-ratio в CSS вместо padding-hack для responsive-контейнеров
- Для Google Fonts добавьте font-display: swap и preconnect к fonts.googleapis.com
- Рекламные блоки и баннеры размещайте в контейнерах с фиксированной высотой
- Избегайте вставки контента выше видимой области после загрузки — это главный источник высокого CLS
- Анимации делайте только через transform и opacity — они не вызывают layout reflow
Оптимизация INP: отзывчивость интерфейса
INP заменил FID (First Input Delay) в марте 2024 года. Если FID измерял только первое взаимодействие, INP оценивает все клики, нажатия и касания на протяжении всей сессии. Плохой INP (более 500 мс) — признак «тяжёлого» JavaScript, который блокирует основной поток. Это особенно актуально для SPA-приложений на React/Vue с большими бандлами.
- Профилируйте JavaScript в Chrome DevTools вкладка Performance → Long Tasks (>50 мс)
- Разбейте длинные задачи через scheduler.yield() или setTimeout(fn, 0) — это освобождает главный поток
- Используйте code splitting: загружайте JS только для того компонента, который нужен сейчас
- Минимизируйте сторонние скрипты (чаты, пиксели, аналитика) — они часто главная причина плохого INP
- Используйте Web Workers для вычислительно тяжёлых задач вне основного потока
- Внедрите Virtual List для длинных списков вместо рендеринга всех элементов DOM
Устраняем проблемы с INP
- Найти Long Tasks > 50 мс в DevTools
- Да
- Разбить задачи через scheduler.yield()
- Да
- Code splitting по маршрутам
- Да
- Убрать/отложить сторонние скрипты
- Требует внимания
- Web Workers для тяжёлых вычислений
- Да
- Virtual List вместо полного DOM
- Да
Текст схемы и все данные
Устраняем проблемы с INP
- Найти Long Tasks > 50 мс в DevTools
- Да
- Разбить задачи через scheduler.yield()
- Да
- Code splitting по маршрутам
- Да
- Убрать/отложить сторонние скрипты
- Требует внимания
- Web Workers для тяжёлых вычислений
- Да
- Virtual List вместо полного DOM
- Да
Серверная оптимизация: TTFB и кэширование
Time to First Byte (TTFB) не входит в Core Web Vitals напрямую, но плохой TTFB (более 800 мс) делает невозможным хороший LCP. TTFB — это время от запроса браузера до получения первого байта ответа сервера. Причины: медленный хостинг, отсутствие кэширования, тяжёлые запросы к базе данных, географически удалённый сервер. Если вы проводите технический SEO-аудит, TTFB — первая проверка после CWV.
- Переедьте на хостинг с NVMe SSD и PHP 8.x — разница с устаревшим shared-хостингом может быть 5–10x по TTFB
- Включите Full Page Cache: для WordPress — WP Rocket или LiteSpeed Cache, для кастомных CMS — Redis/Varnish
- Настройте HTTP/2 или HTTP/3 (QUIC) — сервер должен поддерживать мультиплексирование запросов
- Включите Brotli-сжатие (эффективнее gzip на 15–25% для текстовых ресурсов)
- Настройте правильные Cache-Control заголовки: статика — max-age=31536000 immutable, HTML — no-cache с ETag
- Используйте Database Query Optimization: индексы, кэш запросов, исключите N+1 проблемы
| Тип хостинга | Типичный TTFB | Оценка |
|---|---|---|
| Shared-хостинг (устаревший) | 800–3000 мс | Плохо |
| VPS без кэша (2 vCPU, 4 GB) | 300–800 мс | Требует оптимизации |
| VPS + Redis + Nginx | 80–300 мс | Хорошо |
| CDN + Edge Cache (Cloudflare) | 20–80 мс | Отлично |
| Vercel / Netlify Edge Functions | 50–150 мс | Хорошо |
Оптимизация изображений и шрифтов: быстрый выигрыш
Изображения — обычно крупнейшая статья расходов по весу страницы. Медианный вес страницы, по данным HTTP Archive, составляет порядка 2,5 МБ, и примерно половина приходится на изображения. Это самое очевидное место для экономии: правильная оптимизация изображений даёт 30–60% снижения веса страницы без видимых потерь качества.
- Конвертируйте PNG и JPEG в WebP (поддержка 96% браузеров) или AVIF (лучшее сжатие, поддержка 90%+)
- Используйте srcset и sizes для адаптивных изображений — мобильный пользователь не должен грузить 1920px
- Добавьте loading="lazy" для всех изображений ниже первого экрана
- Для иконок используйте SVG вместо PNG — они масштабируются без потерь и весят меньше
- Шрифты: загружайте только нужные начертания (не весь семейство), используйте font-display: swap
- Рассмотрите системные шрифты (-apple-system, Segoe UI) — нулевая задержка загрузки
JavaScript и CSS: устраняем блокировку рендеринга
Браузер не может отображать страницу, пока парсит и исполняет синхронный JavaScript в теге <head>. Это называется render-blocking. Каждый такой скрипт добавляет время к FCP и LCP. Аналогично работают неиспользуемые CSS: браузер должен загрузить весь файл перед рендерингом, даже если на текущей странице применяется 5% правил.
- Добавьте defer или async ко всем скриптам, не критичным для первого рендеринга
- Встройте Critical CSS inline в <head> (инструменты: Critical, Penthouse, Critters)
- Остальной CSS загружайте асинхронно через media="print" onload-трюк или через preload
- Удалите неиспользуемый CSS (PurgeCSS, UnCSS) — особенно актуально при использовании Bootstrap/Tailwind
- Разбейте JavaScript-бандл на чанки по маршрутам (webpack code splitting, Vite dynamic import)
- Проверьте сторонние скрипты: Google Tag Manager, пиксели соцсетей, чаты — загружайте их через Partytown или с задержкой
Сайт набирал низкие баллы в PSI, особенно на мобильных. Анализ показал: несколько render-blocking скриптов в head (jQuery, слайдер, форма обратного звонка, пиксель ВКонтакте, Яндекс.Метрика, онлайн-чат), большой CSS-файл с минимальным реально используемым объёмом. После переноса всех скриптов в defer, встройки критического CSS, удаления неиспользуемого CSS и отложенной загрузки чата — PSI заметно вырос, и сайт прошёл все три порога CWV в зелёную зону. В таком сценарии позиции по кластеру коммерческих запросов ощутимо растут.
Собирательный пример на основе типовых проектов — не реальный клиент.
Технический SEO и скорость: как это связано
Скорость сайта — не изолированная техническая задача, а часть комплексного технического SEO. Медленный сайт снижает crawl budget: Googlebot тратит больше времени на ожидание ответа и обходит меньше страниц за сессию. Для крупных сайтов с тысячами страниц это прямо влияет на индексацию. Хорошая скорость — базовое условие, без которого контентное продвижение и работа со ссылочным профилем работают вполсилы.
Для интернет-магазинов и новостных сайтов с большим количеством страниц особенно важно настроить серверное кэширование и CDN — это снижает нагрузку на сервер и позволяет Googlebot эффективнее обходить сайт. Если вы занимаетесь продвижением в Google, прохождение CWV в зелёную зону по всем страницам — обязательный технический минимум, с которого начинается любая серьёзная работа.
Есть ошибка, которая всплывает почти в каждом втором проекте: команда разработки смотрит на Lighthouse в DevTools и считает задачу выполненной при 90+ баллах, но в Search Console сайт продолжает висеть в «красной зоне». Причина — лабораторный тест Lighthouse не учитывает реальные условия: слабые устройства, перегруженный JavaScript из сторонних скриптов, региональные задержки CDN. Всегда ориентируйтесь на полевые данные CrUX — именно их видит Google.
Владимир БогдановОснователь и руководитель AOSA · эксперт по SEO и AEO, 12+ лет в поисковой оптимизации