Главная / База знаний / Скорость и Core Web Vitals / CSS блокирует рендер страницы
База знаний

CSS блокирует рендер страницы

Большой CSS-файл задерживает First Contentful Paint. Critical CSS, defer, разделение.

Скорость и Core Web Vitals · 3 мин чтения

Симптом

Причина

Большой CSS‑файл блокирует рендер, потому что браузер не может отрисовать страницу, пока не загрузит и не проанализирует все стили. Это происходит из‑за: 1. Синхронной загрузки <link rel="stylesheet"> в <head>. Браузер ставит загрузку в очередь и не продолжает рендер до её завершения. 2. Отсутствия критического CSS (critical CSS). Если стили, необходимые для верхней части страницы, находятся в конце файла, браузер ждёт, пока загрузится весь файл. 3. Отсутствия атрибута rel="preload" или rel="prefetch" для предварительной загрузки. 4. Отсутствия атрибута media="print" для стилей, которые не нужны сразу.

Как проверить

  1. Performance‑панель DevTools
    - Открой DevTools → Performance → Record.
    - Сохрани запись, пока страница загружается.
    - Посмотри, сколько времени занимает «Stylesheet» и «Layout».
  2. Network‑панель
    - Убедись, что CSS‑файл загружается синхронно (blocking в колонке Status).
    - Посмотри размер файла и время загрузки.
  3. Проверка критического CSS
    - В Chrome DevTools → Coverage → Start instrumenting coverage.
    - Сохрани страницу и посмотри, какие стили используются в видимой части.
    - Если большая часть стилей не используется, это сигнал к разделению.
  4. Проверка атрибутов
    - В исходном коде ищи <link rel="stylesheet" href="...">.
    - Если нет rel="preload" или media="print", это может быть причиной блокировки.

Решение

1. Разделить CSS на критический и не‑критический

<head>
  <!-- Критический CSS вlined -->
  <style>
    /* critical.css */
    body { margin:0; font-family:Arial, sans-serif; }
    .header { background:#333; color:#fff; padding:10px; }
    /* ... остальные стили, которые нужны сразу */
  </style>

  <!-- Остальной CSS загружается асинхронно -->
  <link rel="preload" href="/css/main.css" as="style" onload="this.rel='stylesheet'">
  <noscript><link rel="stylesheet" href="/css/main.css"></noscript>
</head>

2. Использовать media="print" для стилей, которые нужны только после рендера

<link rel="stylesheet" href="/css/print.css" media="print">

3. Минимизировать размер CSS

4. Установить async/defer для JavaScript, который загружает стили

Если стили генерируются динамически, используйте async:

<script async src="/js/dynamic-styles.js"></script>

5. Проверить результаты

Связанные

SEO КП · нужна помощь?

Не хотите разбираться сами?

Запустите технический аудит сайта за 5 минут — получите PDF-отчёт с разбором всех 64 параметров и конкретными точками роста. Или закажите комплексное SEO-продвижение сайта — починим всё это и возьмём на себя дальнейшую оптимизацию.

Запустить аудит за 199 ₽ Узнать про продвижение →