Как ускорить медленный сайт и пройти Core Web Vitals

Пошаговое руководство по ускорению сайта: от замеров до продакшена

Скорость загрузки — это не про «зеленые цифры» в PageSpeed Insights, а про конверсию и SEO. Если ваш сайт грузится дольше 2.5 секунд, вы теряете до 40% трафика. Ниже — мой рабочий алгоритм, который я применяю на проектах.


1. Замеры: где болит?

Нельзя оптимизировать то, что нельзя измерить. Забудьте про субъективное «вроде быстрее стало».

  • Инструменты: PageSpeed Insights (для лабораторных данных), Lighthouse (в консоли разработчика), WebPageTest (для waterfall-диаграмм).
  • Что смотрим:
    • LCP (Largest Contentful Paint): Время отрисовки самого большого элемента (цель < 2.5с).
    • CLS (Cumulative Layout Shift): Сдвиги макета (цель < 0.1).
    • INP (Interaction to Next Paint): Отклик на действия пользователя (цель < 200мс).
    • TTFB (Time to First Byte): Время ответа сервера (цель < 0.6с).

Ошибка: Оптимизировать сайт только под мобильные или только под десктоп. Всегда смотрите на «медленные» 3G-сети в настройках Lighthouse.


2. Снижение TTFB: работа с сервером

Если TTFB высокий, все остальные оптимизации бесполезны.

  • Кэширование на стороне сервера: Если у вас WordPress, используйте Redis или Memcached.
  • PHP: Переход на PHP 8.2+ дает прирост производительности на 15-20% по сравнению с 7.4.
  • База данных: Очистка от «мусора» (ревизии постов, транзитные данные).
    • Команда для MySQL: DELETE FROM wp_options WHERE option_name LIKE '_transient_%';
    • Индексы: Проверьте медленные запросы через slow_query_log. Часто не хватает простого индекса в таблице wp_postmeta.

3. Оптимизация изображений: AVIF и WebP

Картинки — это 70% веса страницы.

  • Формат: Переходите на AVIF. Он сжимает на 30% лучше, чем WebP, и в 2 раза лучше, чем JPEG.
  • Автоматизация: Если используете Nginx, настройте конвертацию на лету через модуль ngx_pagespeed или используйте сервис Cloudinary/Imgix.
  • Lazy Loading: Всегда добавляйте loading="lazy" для изображений вне первого экрана.
  • Размеры: Используйте атрибуты width и height в теге <img>, чтобы браузер заранее резервировал место (это убивает CLS).

4. Critical CSS и JS: убираем блокировку рендеринга

Браузер не покажет страницу, пока не скачает и не распарсит все CSS и JS.

  • Critical CSS: Вынесите стили для «первого экрана» (header, hero section) прямо в <head> страницы в тег <style>. Остальной CSS подгружайте асинхронно.
  • JS:
    • Добавляйте defer или async ко всем скриптам.
    • defer — для скриптов, зависящих от DOM.
    • async — для аналитики, чатов, пикселей (они не должны блокировать отрисовку).

Пример до/после: * До: <script src="main.js"></script> (блокирует парсинг HTML). * После: <script src="main.js" defer></script> (загружается параллельно, выполняется после парсинга).


5. Кэширование и CDN

  • Browser Caching: Настройте заголовки Cache-Control в .htaccess или конфиге Nginx. nginx location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public, no-transform"; }
  • CDN: Используйте Cloudflare. Это не только кэширование статики, но и защита от DDoS, и оптимизация доставки контента через их сеть серверов.

Чеклист для быстрого аудита

  1. [ ] TTFB: Меньше 600мс? Если нет — копаем в сторону кэширования БД и версии PHP.
  2. [ ] Изображения: Все в WebP/AVIF? Есть width/height?
  3. [ ] JS: Все скрипты с defer? Метрика и чаты в конце очереди?
  4. [ ] CSS: Critical CSS вынесен? Лишние библиотеки (например, FontAwesome целиком) удалены?
  5. [ ] Шрифты: Используется font-display: swap;? (предотвращает невидимый текст при загрузке).
  6. [ ] Gzip/Brotli: Включено сжатие на сервере? (Brotli эффективнее Gzip).

Частые ошибки

  1. Установка 10 плагинов для оптимизации. Каждый плагин — это лишний код. Лучше один раз настроить Nginx/сервер, чем ставить «комбайны» типа WP Rocket, которые сами по себе нагружают сервер.
  2. Оптимизация «тяжелых» скриптов. Если у вас на сайте 5 чатов, 3 пикселя соцсетей и 2 рекламных сети — никакая оптимизация не даст 90+ баллов. Удаляйте лишнее.
  3. Игнорирование CLS. Часто CLS возникает из-за рекламных баннеров, которые подгружаются позже контента. Решение: задавайте фиксированную высоту контейнеру для рекламы.

Реальные результаты (пример из практики)

  • Клиент: Интернет-магазин на WooCommerce.
  • До: LCP 5.2с, CLS 0.45, TTFB 1.8с.
  • Что сделал:
    • Перевел сервер на PHP 8.2 + OPcache.
    • Настроил Redis для кэширования запросов БД.
    • Внедрил WebP через плагин с автоматической перегенерацией.
    • Вынес Critical CSS и добавил defer для всех JS.
    • Подключил Cloudflare.
  • После: LCP 1.8с, CLS 0.05, TTFB 0.3с.
  • Итог: Конверсия выросла на 12% за первый месяц.

Нужно сделать под ключ?

Оптимизация скорости — это техническая работа, требующая понимания серверной части и архитектуры сайта. Если не хотите рисковать «сломанной версткой» или некорректной настройкой кэша — делегируйте это мне.

Закажите у меня на Freelancehunt: https://freelancehunt.com/freelancer/sspoisk

Originally posted at https://guardlabs.online/care/

Комментарии

Популярные сообщения из этого блога

Regime Detection: Why Your Strategy Fails and How to Spot the Shift

Beyond the Sandbox: Why Paper Trading Lies and What to Actually Validate