
Содержание
- Почему скорость — это фактор ранжирования
- Что такое Core Web Vitals: LCP, CLS, INP
- Как измерять: инструменты и метрики
- LCP: как ускорить загрузку главного контента
- CLS: как убрать сдвиги макета
- INP: как ускорить отклик страницы
- Изображения: главный источник тормозов
- JavaScript: как не убить скорость фреймворками
- Сервер и хостинг: что настроить
- Кейс 1: ускорение интернет-магазина — LCP с 6.2 до 1.8 с
- Кейс 2: лендинг на Tilda — LCP с 4.5 до 2.1 с
- Автотесты для скорости: что добавить в CI/CD
- Чек-лист по скорости
- Заключение
Почему скорость — это фактор ранжирования

Скорость сайта — это не про «пользователям приятно». Это про ранжирование. Яндекс и Google напрямую учитывают скорость при формировании выдачи. Медленный сайт ранжируется ниже, даже если контент лучше.
Почему так: поисковик хочет показать пользователю лучший результат. Если две страницы одинаково релевантны, но одна грузится за 1.5 секунды, а другая за 5 — поисковик выберет первую. Потому что пользователь не ждёт.
Кроме того, скорость влияет на краулинг. Медленный сайт робот сканирует медленнее — меньше страниц попадает в индекс. Это особенно критично для больших сайтов: интернет-магазинов, порталов, агрегаторов.
Я видел сайты, где после ускорения с 5 до 2 секунд трафик вырастал на 20–30% без каких-либо других изменений. Только скорость. Это не магия — это алгоритм.
Что такое Core Web Vitals: LCP, CLS, INP
Core Web Vitals — это три ключевые метрики, по которым Google и Яндекс оценивают скорость и стабильность страницы. Их три:
LCP (Largest Contentful Paint)
Время до отрисовки самого большого элемента на экране. Обычно это изображение, баннер или заголовок. Показывает, через сколько секунд пользователь видит основной контент. Норма: до 2.5 секунд. Плохо: больше 4.
CLS (Cumulative Layout Shift)
Сумма сдвигов элементов макета за время загрузки. Когда страница «прыгает» — кнопка уезжает, текст сдвигается вниз — это CLS. Норма: до 0.1. Плохо: больше 0.25. Высокий CLS раздражает пользователей: они кликают не туда, перечитывают текст.
INP (Interaction to Next Paint)
Время от взаимодействия пользователя (клик, тап, ввод) до отрисовки результата. Заменил FID в 2024 году. Показывает, насколько быстро страница реагирует на действия. Норма: до 200 мс. Плохо: больше 500 мс.
Эти три метрики — основа. Если все три в зелёной зоне — страница считается быстрой. Если хотя бы одна в красной — сайт в группе риска.
Как измерять: инструменты и метрики
Инструменты, которыми я пользуюсь:
- PageSpeed Insights — основной инструмент от Google. Показывает LCP, CLS, INP и даёт рекомендации. Проверяю и мобильную, и десктопную версию. URL: pagespeed.web.dev.
- Lighthouse (в DevTools) — встроен в Chrome. Показывает те же метрики плюс диаграммы водопада. Удобно для дебага.
- Яндекс.Вебмастер → «Эксплуатация» → «Скорость загрузки». Показывает время ответа сервера и загрузки страниц по данным Яндекса.
- WebPageTest — детальный анализ: водопад, кадры загрузки, разбивка по типам ресурсов. URL: webpagetest.org.
- Chrome UX Report (CrUX) — реальные данные скорости от пользователей Chrome. Доступны через PageSpeed Insights.
Важно: лабораторные данные (Lighthouse) и реальные данные (CrUX) могут отличаться. Lighthouse симулирует загрузку на эталонном устройстве. CrUX показывает, как реально грузится страница у пользователей. Если Lighthouse показывает зелёный, а CrUX — красный, значит, у реальных пользователей устройство слабее или сеть хуже. Нужно оптимизировать именно под реальный профиль.
LCP: как ускорить загрузку главного контента
LCP — самая важная метрика. Если она красная — позиции страдают. Что чаще всего тормозит LCP:
1. Большое изображение
Если LCP-элемент — картинка (баннер, hero-image, фото товара), и она весит 2 МБ — это проблема. Решения:
- Сжимайте изображения. WebP вместо PNG/JPEG — на 25–35% меньше.
- Указывайте ширину и высоту в атрибутах
<img>. Это позволяет браузеру зарезервировать место и не ждать layout.
- Используйте
fetchpriority="high" для LCP-изображения. Браузер загрузит его первым.
- Используйте CDN для изображений. Cloudflare, imgix, Cloudinary — отдают оптимизированные картинки с ближайшего сервера.
3. Медленный ответ сервера (TTFB)
TTFB (Time to First Byte) — время до первого байта. Если сервер отвечает 1.5 секунды — LCP не будет меньше 1.5. Решения:
- Кэширование на сервере (Redis, Memcached для динамических страниц).
- CDN для статики (Cloudflare, Selectel).
- Обновление хостинга. Shared-хостинг за 200 ₽/мес не потянет интернет-магазин. VPS — минимум.
- Оптимизация запросов к базе данных. Медленные SQL-запросы — частая причина высокого TTFB.
3. Рендеринг блокируется CSS и JS
Если в <head> подключены 5 CSS-файлов и 10 JS — браузер ждёт их загрузки, прежде чем отрисовать страницу. Решения:
- Inline критического CSS. Маленький кусок стилей, нужных для первого экрана — прямо в HTML.
- Отложите некритичный JS через
defer или async.
- Удалите неиспользуемый CSS и JS. Анализ через Coverage в DevTools.
- Разделите CSS: критический — в
<head>, остальное — перед </body>.
4. Шрифты блокируют рендер
Если шрифт грузится 2 секунды, а текст ждёт шрифт — пользователь видит пустую страницу. Решения:
font-display: swap — браузер показывает текст системным шрифтом, потом меняет на ваш.
- Preload шрифтов:
<link rel="preload" as="font">.
- Subset шрифтов — загружайте только те символы, которые используются (кириллица, цифры, знаки).
- Self-host шрифтов — не с Google Fonts, а со своего сервера. Меньше DNS-запросов.
CLS: как убрать сдвиги макета
CLS — метрика, которую проще всего исправить, но которую чаще всего игнорируют. Причины сдвигов:
1. Изображения без размеров
Если у <img> нет атрибутов width и height, браузер не знает, сколько места reserves. Картинка грузится — контент сдвигается. Решение: указывайте размеры для всех изображений.
2. Реклама и виджеты без зарезервированного места
Если рекламный блок вставляется после загрузки — контент сдвигается. Решение: резервируйте место через CSS (min-height для контейнера).
3. Динамический контент
Cookie-баннеры, чат-виджеты, всплывающие формы — появляются после загрузки и сдвигают контент. Решение: фиксируйте их позицию (position: fixed) или резервируйте место заранее.
4. Шрифты с разной шириной
Системный шрифт узкий, ваш — широкий. При замене — контент сдвигается. Решение: font-display: swap и подбор fallback-шрифта с похожей шириной.
INP: как ускорить отклик страницы
INP заменил FID в 2024 году. Он измеряет задержку между действием пользователя и отрисовкой результата. Высокий INP — страница «тормозит» при кликах, скролле, вводе. Причины:
- Тяжёлый JS на главном потоке. Большие скрипты блокируют интерактив. Решение: code splitting, lazy loading скриптов.
- Сторонние виджеты. Чат, аналитика, реклама — каждый добавляет JS. Решение: загружайте через
requestIdleCallback или с задержкой.
- Дорогостоящие обработчики событий. Если на scroll или click висит тяжёлый handler — страница тормозит. Решение: debounce/throttle, web workers для тяжёлых вычислений.
- Реактивные фреймворки без оптимизации. React/Vue/Angular могут создавать лишние re-render. Решение: memoization, virtual scrolling, оптимизация рендера.
Изображения: главный источник тормозов
В 80% случаев, которые я аудитаю, изображения — главная причина медленной загрузки. Что делаю:
- Формат WebP/AVIF. Конвертирую все изображения в WebP (поддержка 97% браузеров) или AVIF (если нужна максимальная компрессия). Экономия 25–40% по сравнению с JPEG/PNG.
- Lazy loading. Все изображения ниже первого экрана — через
loading="lazy". Браузер не грузит их, пока не доскроллит. Экономия 50–70% трафика при первой загрузке.
- Правильные размеры. Не грузить изображение 4000×3000, если на экране оно 400×300. Генерируйте несколько размеров (srcset) и отдавайте нужный.
- Атрибуты width и height. На каждом
<img> — это устраняет сдвиги (CLS) и ускоряет рендер.
- CDN для изображений. Если сайт на одном сервере в Москве, пользователь из Твери получает картинки с задержкой. CDN решает — отдаёт с ближайшего узла.
- Background-images — заменить на
<img> с lazy load. CSS background не поддерживает lazy loading. Если hero-изображение в CSS — оно блокирует рендер.
JavaScript: как не убить скорость фреймворками
React, Vue, Angular — отличные фреймворки, но они добавляют вес. Бандл React + ReactDOM — 40 КБ gzipped. Плюс библиотеки — 100–200 КБ. Это замедляет первую загрузку. Что делаю:
- SSR (Server-Side Rendering). Рендеринг на сервере — пользователь видит HTML сразу, без ожидания JS. Next.js, Nuxt.js — из коробки. Если чистый SPA — используйте prerendering.
- Code splitting. Не грузите весь бандл сразу. Разделите на чанки: главная страница — один чанк, страница товара — другой. React.lazy, dynamic import.
- Tree shaking. Удалите неиспользуемые экспорты. Webpack/Vite делают это автоматически, но проверьте: Coverage в DevTools показывает, сколько JS не используется.
- Откладывайте сторонние скрипты. Google Analytics, Яндекс.Метрика, чат-виджеты — загружайте через 2–3 секунды после загрузки страницы или через
requestIdleCallback.
- Минификация и сжатие. Babel/terser для минификации. Brotli/gzip для сжатия на сервере. Сжатый бандл в 3–5 раз меньше.
Сервер и хостинг: что настроить
- HTTP/2 или HTTP/3. Мультиплексирование — несколько запросов в одном соединении. Быстрее, чем HTTP/1.1.
- Brotli или gzip. Сжатие текстовых ресурсов. Brotli эффективнее gzip на 15–20%.
- Кэширование. Кэш-контроль headers:
Cache-Control: public, max-age=31536000 для статики.
- CDN. Cloudflare (бесплатный тариф), Selectel, AWS CloudFront. Отдаёт статику с ближайшего сервера.
- VPS вместо shared. Shared-хостинг — общие ресурсы. VPS — выделенные. Для интернет-магазина — минимум.
- PHP-FPM + OPcache. Если сайт на PHP — включите OPcache. Кэширует байткод, ускоряет на 30–50%.
- Оптимизация базы данных. Индексы на часто запрашиваемых полях. Медленные запросы — в логи.
Кейс 1: ускорение интернет-магазина — LCP с 6.2 до 1.8 с
Сайт: интернет-магазин стройматериалов, 3 200 товаров.
Проблема: LCP 6.2 с, CLS 0.18, INP 480 мс. Трафик стагнировал, конверсия 0.8%.
Что сделано:
- Изображения: конвертированы в WebP, добавлен lazy load, указаны размеры. Экономия 60% веса.
- CSS: инлайн критического, остальное — async. Удалено 40% неиспользуемого CSS.
- JS: code splitting, отложена загрузка Метрики и чат-виджета. Бандл уменьшен с 380 КБ до 120 КБ.
- Сервер: включён OPcache, настроен Brotli, подключён Cloudflare CDN. TTFB с 1.4 до 0.3 с.
- Шрифты: font-display: swap, preload, subset только кириллицы.
- Реклама: зарезервировано место через min-height. CLS снижен.
Результат:
- LCP: 6.2 → 1.8 с
- CLS: 0.18 → 0.04
- INP: 480 → 120 мс
- Трафик: рост на 22% за 2 месяца (без других SEO-работ)
- Конверсия: 0.8% → 1.4%
Кейс 2: лендинг на Tilda — LCP с 4.5 до 2.1 с
Сайт: лендинг на Tilda, 10 экранов, много анимаций.
Проблема: LCP 4.5 с, CLS 0.15. Tilda по умолчанию грузит все скрипты и картинки сразу.
Что сделано:
- Изображения: сжаты до 100 КБ каждое, WebP через Tilda-настройки.
- Анимации: отключены на мобильном, оставлены только на десктопе. Анимации — главный тормоз на Tilda.
- Шрифты: заменены с Google Fonts на системные (Tilda поддерживает). Экономия 300 мс на DNS-запросах.
- Виджеты: отложен чат-виджет, убраны лишние аналитические скрипты (оставили только Метрику).
- Меню: упрощено с анимированного на статическое. Меньше JS — быстрее рендер.
Результат:
- LCP: 4.5 → 2.1 с
- CLS: 0.15 → 0.02
- Трафик: рост на 15% за 6 недель
- Конверсия: 1.2% → 2.1%
Tilda можно ускорить, если убрать лишнее. Но есть предел: Tilda — конструктор, и её ядро нельзя оптимизировать полностью. Если нужна максимальная скорость — нужен кастомный сайт.
Автотесты для скорости: что добавить в CI/CD
Как разработчик, я автоматизирую проверку скорости, чтобы ловить регрессии до релиза:
- Lighthouse CI. Запуск Lighthouse в CI при каждом PR. Пороги: LCP < 2.5, CLS < 0.1, INP < 200. Если метрика ухудшается — билд падает.
- Bundle size check. Если бандл вырос на 20% — предупреждение. Лишний вес = медленнее.
- Image size check. Если загружено изображение больше 500 КБ без WebP — предупреждение.
- TTFB monitoring. Регулярная проверка TTFB на стейджинге. Если > 600 мс — алерт.
Пример конфигурации Lighthouse CI:
js // lighthouserc.js module.exports = { ci: { collect: {
url: ['https://staging.example.com/'], numberOfRuns: 3,
},
assert: { assertions: { 'largest-contentful-paint': ['error', { max: 2500 }],
'cumulative-layout-shift': ['error', { max: 0.1 }],
'interaction-to-next-paint': ['warn', { max: 200 }],
}, }, },
};
Такой конфиг гоняется в CI и блокирует релиз, если скорость просела. Подробнее про автоматизацию SEO-проверок — в статье автоматизация SEO-тестов.
Чек-лист по скорости
LCP:
- [ ] LCP < 2.5 с (мобильный)
- [ ] LCP-элемент — сжатое изображение (WebP)
- [ ]
fetchpriority="high" на LCP-изображении
- [ ] Критический CSS — инлайн
- [ ] Некритичный JS —
defer
- [ ] TTFB < 600 мс
- [ ] Шрифты —
font-display: swap, preload
CLS:
- [ ] CLS < 0.1
- [ ]
width и height на всех <img>
- [ ] Место под рекламу и виджеты зарезервировано
- [ ] Cookie-баннер и чат — position: fixed
INP:
- [ ] INP < 200 мс
- [ ] Сторонние скрипты — отложены
- [ ] Тяжёлые обработчики — debounce/throttle
- [ ] Бандл — минифицирован и разделён
Сервер:
- [ ] HTTP/2+
- [ ] Brotli/gzip включён
- [ ] Cache-Control настроен для статики
- [ ] CDN подключён
- [ ] VPS, не shared
Изображения:
- [ ] WebP/AVIF для всех изображений
- [ ]
loading="lazy" для ниже первого экрана
- [ ] srcset для адаптивных размеров
- [ ] Каждое изображение < 300 КБ
Заключение
Скорость — это не «приятный бонус», а технический фактор ранжирования. Медленный сайт теряет позиции, трафик и конверсии. Но ускорение — это не магия, а набор конкретных шагов: сжать изображения, отложить JS, настроить кэш, подключить CDN. Каждый шаг даёт 10–30% улучшения. В сумме — LCP с 6 до 2 секунд, рост трафика на 20% и конверсии на 50%.
Хотите проверить скорость своего сайта и понять, что тормозит? Пришлите URL — бесплатно прогоню через PageSpeed Insights и Lighthouse, покажу, что именно замедляет и как это исправить.
Аудит скорости сайта
Пришлите URL — бесплатно проверю LCP, CLS, INP и покажу, что замедляет сайт. С конкретными рекомендациями по исправлению.
Получить аудит
```
Нужна помощь в продвижении вашей организации?
Пишите мне в Телеграмм или MAX
и мы обсудим все детали.
Последние статьи:
-
Полное руководство по скорости сайта и Core Web Vitals: что такое LCP, CLS, INP, как измерять, как ускорить. Чек-листы, кейсы, инструменты. От практика с 10+ годами опыта.
Читать полностью
-
Практическое руководство по региональному SEO: как продвигать сайт в небольшом городе. Семантика, локальная выдача, Яндекс Бизнес, отзывы, кейсы. От практика с 10+ годами опыта в Москве.
Читать полностью
-
Практическое руководство по SEO для B2B-сайтов: семантика, контент, техническая база, лидогенерация. Разбор отличий B2B от B2C, кейсы, чек-листы. От практика с 10+ годами опыта.
Читать полностью