Заявка
Mobile · CWV

Critical CSS

Критический CSS · стили первого экрана

Critical CSS (критический CSS) — это минимальный набор стилей, нужный для отрисовки первого экрана. Его встраивают inline в HTML, чтобы страница показывалась быстрее и улучшался показатель LCP.

Critical CSS — это выделенный кусок стилей, который отвечает только за то, что пользователь видит без прокрутки, и подгружается вместе с HTML, а не отдельным файлом. Что это значит на практике: браузер получает всё нужное для первой отрисовки сразу, без ожидания загрузки внешнего styles.css.

Остальные стили при таком подходе грузятся асинхронно и не блокируют рендеринг. Критические стили встраивают прямо в <head> тегом <style>, а полный файл подключают через rel=preload с переключением на rel=stylesheet. Основной эффект замеряется через LCP в PageSpeed Insights: порог зоны Хорошо — LCP ≤ 2.5 с.

§ 01Зачем нужен

Внешний файл стилей блокирует отрисовку: браузер не покажет ни строки, пока не скачает и не разберёт весь CSS. Инлайн-стили для первого экрана убирают этот барьер — разметка первого экрана появляется до загрузки основного файла. Для чего нужно: сократить время до первой отрисовки контента и разгрузить критическую цепочку рендеринга. Эффект виден на метрике LCP, которая входит в Core Web Vitals и учитывает самый крупный видимый элемент первого экрана.

§ 02Как настраивается

Набор стилей первого экрана формируют автоматически: инструменты вроде Critical, Penthouse или critical-CSS-модуля в сборщике анализируют viewport и вырезают правила для видимой части. Порядок шагов: сгенерировать критические правила, вставить их в <head> тегом <style>, отложить полный файл через <link rel=preload as=style onload='this.rel=stylesheet'>. Ширину viewport задают отдельно для мобайла и десктопа, иначе above-the-fold CSS соберётся под неверный экран.

Кейс e-commerce

LCP 4.1 → 2.0 c — Интернет-магазин косметики на Shopify вынес критические стили первого экрана inline через Critical и отложил остальной CSS. LCP упал с 4.1 до 2.0 с за 5 недель. Замер через PSI и CrUX-75th, отказы снизились на 11%.

Кейс медиа

LCP 3.6 → 1.9 c — Новостной портал на WordPress сгенерировал Critical CSS для шаблонов статей плагином Penthouse и убрал render-blocking запросы. LCP улучшился с 3.6 до 1.9 с за 4 недели. Динамика по GA4 и Search Console, глубина просмотра выросла на 8%.

§ 03Где смотреть результат

PageSpeed Insights показывает, устранена ли блокировка рендеринга: пункт про render-blocking resources исчезает из списка проблем, если критические стили встроены верно. Реальные данные пользователей собирает CrUX и раздел Core Web Vitals в Search Console — там виден LCP по 75-му перцентилю. Лабораторный замер даёт вкладка Performance в DevTools: по флейм-графику видно, ждёт ли первая отрисовка внешний CSS.

§ 04Подводные камни

Раздутый inline CSS вредит: если в <head> попадают стили не первого экрана, HTML тяжелеет и теряется смысл оптимизации. Держи объём встроенных правил в пределах нескольких килобайт. Второй риск — рассинхрон: критические стили генерируются один раз, а вёрстка меняется, и первый экран ломается. Чем это отличается от обычного подключения CSS: инлайн-набор нужно перегенерировать при каждом изменении шаблона, иначе он устаревает и отдаёт неверную отрисовку.

Частые ошибки
01
Инлайн всех стилей страницы в head. Вместо стилей первого экрана в HTML вшивают весь CSS-бандл. Документ раздувается на сотни килобайт, теряется кеширование между страницами, а LCP не улучшается — рендер откладывается до парсинга огромного head. Как правильно: Извлекайте только above-the-fold правила. Остальной CSS грузите асинхронно через rel='preload' с onload-переключением на stylesheet.
02
Генерация critical CSS один раз на все шаблоны. Критический CSS собирают для главной и копируют на карточки, категории и блог. У шаблонов разный первый экран, поэтому часть блоков рисуется без стилей — виден FOUC, скачет вёрстка и растёт CLS вместе с LCP. Как правильно: Настройте генерацию по типам страниц через Critical или Penthouse в пайплайне сборки. Свяжите каждый шаблон со своим набором правил.
03
Оценка эффекта по одному прогону в PSI. Улучшение проверяют разовым лабораторным замером PageSpeed Insights и рапортуют клиенту об ускорении. Реальные пользователи на 4G этого не видят — Google ранжирует по CrUX за 28 дней, где сдвига ещё нет. Как правильно: Сравнивайте field data в отчёте CrUX и Search Console до и через 28 дней после релиза. Лабораторный балл используйте лишь для дебага.
Часто спрашивают

Critical CSS — частые вопросы

Critical CSS простыми словами — что это и зачем нужно?

+

Critical CSS — это минимальный набор стилей, необходимый для отрисовки контента первого экрана. Правила встраивают прямо в <head> страницы, поэтому браузер рисует видимую часть без ожидания загрузки внешних файлов. Остальную таблицу стилей подгружают асинхронно уже после первой отрисовки.

Инструмент анализирует, какие правила задействованы в области выше линии сгиба при заданном разрешении (например, 1300×900), и вырезает только их. Этот минимальный CSS для отрисовки вставляется inline в HTML, а полный файл грузится через rel=preload. Так убирается один блокирующий запрос из цепочки рендеринга.

Встроенный набор правил живёт прямо в HTML и применяется мгновенно, тогда как внешний файл требует отдельного запроса и блокирует рендеринг до загрузки. Разница в объёме: above-the-fold CSS обычно занимает 5–15 КБ, а общая таблица стилей — сотни килобайт. Inline-подход убирает render-blocking ресурс из первого экрана.

Обычно используют библиотеки critical, penthouse или плагины для сборщиков вроде webpack. Они запускают headless-браузер, определяют видимую зону и отдают готовый фрагмент для вставки в шаблон. В CMS (WordPress) задачу решают плагины типа Autoptimize за 10–20 минут без ручного кода.

Да, приём напрямую улучшает LCP и метрику First Contentful Paint, убирая задержку на блокирующие стили. Core Web Vitals — подтверждённый фактор ранжирования Google с 2021 года, поэтому ускорение первого экрана косвенно помогает позициям. По практике экономия достигает 200–500 мс на первую отрисовку.

Не нашли ответ?

Спросите Андрея Гусарова — отвечаю в течение 1-2 рабочих дней.

Нажимая, вы соглашаетесь с обработкой данных.