Core Web Vitals

Минифицировать CSS и JavaScript

Важно

Зачем минифицировать CSS и JavaScript

Минификация — это удаление из кода всего, что нужно разработчику, но не нужно браузеру: пробелы, переносы строк, комментарии, длинные имена переменных. Файл весом 120 КБ после минификации может сжаться до 80-90 КБ, а после Gzip/Brotli — до 20-25 КБ. Умножьте это на 5-10 файлов стилей и скриптов — экономия ощутима.

Для Core Web Vitals минификация влияет на несколько метрик. LCP (Largest Contentful Paint) зависит от скорости загрузки CSS, потому что браузер не рендерит страницу, пока не скачает и не распарсит все стили из head. FCP (First Contentful Paint) тоже блокируется ненужным CSS. А тяжёлый JavaScript замедляет INP, потому что занимает основной поток парсингом и компиляцией.

Но минификация — только часть задачи. Гораздо больше даёт удаление неиспользуемого CSS и JavaScript, а также правильная стратегия загрузки скриптов. На типичном WordPress-сайте 60-70% CSS-кода не используется на конкретной странице, потому что один файл style.css обслуживает все шаблоны.

Пошаговая инструкция

Шаг 1. Измерьте текущий объём CSS и JS

Откройте DevTools (F12), вкладка Network. Перезагрузите страницу с очищенным кешем (Ctrl+Shift+R). Отфильтруйте по типу CSS и JS. Посмотрите колонку Size — это размер после сжатия (transfer size). Колонка «Размер ресурса» показывает реальный размер файла. Запишите общий объём CSS и JS — это отправная точка.

Дополнительно откройте вкладку Coverage (Ctrl+Shift+P, наберите «Coverage»). Нажмите Record, перезагрузите страницу, прокрутите до конца, кликните по основным элементам. Красным показан неиспользуемый код. Если 70% CSS подсвечено красным — есть серьёзный потенциал для оптимизации.

Шаг 2. Минифицируйте CSS

Для WordPress самый простой путь — плагины:

  • Autoptimize (бесплатный) — минифицирует и объединяет CSS-файлы. Включите опцию «Optimize CSS Code» в настройках. Autoptimize также умеет инлайнить критический CSS, но эту функцию лучше настраивать отдельно.
  • WP Rocket (платный) — раздел «Оптимизация файлов». Включает минификацию CSS одной галочкой. Работает стабильнее Autoptimize, потому что не объединяет файлы по умолчанию — только минифицирует.
  • Asset CleanUp (Perfmatters) — позволяет отключать конкретные CSS-файлы на определённых страницах. Если плагин Contact Form 7 подключает свой CSS на всех страницах, но форма только на странице контактов — отключите его стили везде, кроме этой страницы.

Для сборки без WordPress: используйте cssnano (PostCSS-плагин), clean-css или встроенную минификацию в Vite/Webpack.

Шаг 3. Удалите неиспользуемый CSS

Это даёт в разы больший эффект, чем простая минификация. Инструменты:

  • PurgeCSS — анализирует HTML и оставляет только используемые селекторы. Интегрируется в Webpack, PostCSS, как CLI-утилита. Осторожно с динамическими классами (слайдеры, модальные окна) — добавляйте их в safelist.
  • WP Rocket — функция «Remove Unused CSS» (появилась в версии 3.11). Работает через облачный сервис: анализирует каждую страницу и генерирует индивидуальный CSS. Требует проверки — иногда удаляет нужные стили.
  • Perfmatters — аналогичная функция удаления неиспользуемого CSS с локальной генерацией.

После удаления неиспользуемого CSS обязательно проверьте сайт визуально: пройдитесь по всем типам страниц, откройте мобильную версию, проверьте интерактивные элементы (выпадающие меню, аккордеоны, слайдеры).

Шаг 4. Минифицируйте и оптимизируйте JavaScript

Минификация JS — это не только удаление пробелов. Минификаторы (Terser, UglifyJS) сокращают имена переменных, удаляют мёртвый код (dead code elimination), упрощают выражения. Файл может уменьшиться на 30-50%.

В WordPress:

  • Autoptimize — опция «Optimize JavaScript Code». Можно объединять файлы, но я не рекомендую: объединение ломает порядок загрузки и часто вызывает ошибки. Минификации без объединения достаточно.
  • WP Rocket — минификация JS + опция «Delay JavaScript execution», которая откладывает загрузку скриптов до первого пользовательского взаимодействия. Это радикально ускоряет начальную загрузку.

Шаг 5. Настройте defer и async для скриптов

По умолчанию тег <script> блокирует парсинг HTML: браузер останавливается, скачивает скрипт, выполняет его и только потом продолжает рендерить страницу. Атрибуты defer и async решают эту проблему:

  • defer — скрипт скачивается параллельно с парсингом HTML, но выполняется только после полного парсинга документа. Порядок выполнения сохраняется. Используйте для большинства скриптов.
  • async — скрипт скачивается параллельно и выполняется сразу после загрузки, не дожидаясь парсинга HTML. Порядок не гарантирован. Подходит для независимых скриптов: аналитика, виджеты чатов.

В WordPress добавить defer/async можно через фильтр script_loader_tag в functions.php или через плагины WP Rocket, Perfmatters, Async JavaScript.

Шаг 6. Выделите и инлайните критический CSS

Critical CSS — это минимальный набор стилей, необходимый для рендеринга видимой части страницы (above the fold). Идея: инлайнить критический CSS прямо в <head>, а остальные стили загружать асинхронно. Это ускоряет FCP и LCP.

Инструменты для генерации Critical CSS:

  • Critical (npm-пакет от Addy Osmani) — генерирует критический CSS автоматически
  • WP Rocket — встроенная генерация Critical CSS для каждого типа страницы
  • Autoptimize + отдельный сервис — через API criticalcss.com

Остальной CSS загружайте через <link rel="preload" as="style" onload="this.rel='stylesheet'"> — это обеспечивает асинхронную загрузку без блокировки рендеринга.

Шаг 7. Проверьте результат

После всех оптимизаций снова откройте DevTools → Network. Сравните общий объём CSS и JS с начальными значениями. Проверьте Coverage — процент неиспользуемого кода должен снизиться. Запустите PageSpeed Insights и убедитесь, что рекомендации «Minify CSS», «Minify JavaScript», «Reduce unused CSS», «Reduce unused JavaScript» исчезли или показывают минимальный потенциал экономии.

Типичные ошибки

  • Объединять все JS-файлы в один. Это было актуально в эпоху HTTP/1.1, когда каждый файл требовал отдельного соединения. С HTTP/2 и HTTP/3 множественные мелкие файлы загружаются параллельно. Объединение часто ломает порядок зависимостей и создаёт один огромный файл, который нельзя кешировать частями.
  • Минифицировать без тестирования. Агрессивная минификация может сломать JavaScript: удалить «ненужные» переменные, которые используются динамически, нарушить порядок выполнения. Всегда проверяйте сайт после минификации — формы, слайдеры, модальные окна, меню.
  • Добавлять async на скрипты с зависимостями. Если скрипт зависит от jQuery, а jQuery загружается с async — порядок выполнения не гарантирован, и скрипт упадёт с ошибкой «jQuery is not defined». Для зависимых скриптов используйте defer.
  • Удалять неиспользуемый CSS без safelist. PurgeCSS не видит классы, добавляемые JavaScript динамически: .active, .open, .is-visible. Если не добавить их в safelist — стили выпадающих меню, аккордеонов и модальных окон будут удалены.
  • Инлайнить слишком много Critical CSS. Если критический CSS занимает 50 КБ — вы замедляете загрузку HTML вместо ускорения. Оптимальный размер инлайн-CSS — до 15-20 КБ.

Что проверить в итоге

  • Все CSS-файлы минифицированы (нет пробелов и комментариев в production-версиях).
  • Все JS-файлы минифицированы и имеют атрибут defer или async.
  • Неиспользуемый CSS удалён или составляет менее 20% от общего объёма (проверить через Coverage в DevTools).
  • Critical CSS инлайнен в head для основных типов страниц.
  • Общий объём CSS на странице не превышает 100 КБ (transfer size), JS — не более 300 КБ.
  • PageSpeed Insights не показывает рекомендации Minify CSS, Minify JavaScript, Reduce unused CSS.
  • Визуальная проверка пройдена: все страницы отображаются корректно, интерактивные элементы работают.
  • Нет ошибок в консоли DevTools (особенно «is not defined», «cannot read property of null»).

Нужна помощь с внедрением?

Проведу аудит вашего сайта и внедрю рекомендации. Результат — чистая техническая база и план роста.

Обсудить проект

Кто ведёт проект

Александр Тригуб — частный SEO-специалист. В поисковом маркетинге с 2010 года, предприниматель с 2001-го. В SEO пришёл из собственного бизнеса — знаю, как устроены продажи не из учебников, а из собственной выручки и расходов.

  • Специализация: медицина, B2B, e-commerce и локальные услуги — ниши, где каждый лид стоит дорого.
  • Подтверждённый опыт: 500+ видео-аудитов в разных тематиках, 1092 заказа (рейтинг 4.9 / 5). Отзывы · Видео-аудиты.
  • Профили с отзывами: 728 отзывов на Kwork (4.9★) · Profi.ru (5.0★) · ORCID 0009-0009-0106-6136.
  • Формат: работаю напрямую, один специалист на проект — без менеджеров и субподрядных цепочек.
  • Отчётность: KPI по лидам и деньгам. Ежемесячный план/факт, а не PDF на 50 страниц.
15+лет в маркетинге
500+видео-аудитов
1092заказов
4.9★728 отзывов