Как ускорить медленный сайт и пройти 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.
- Команда для MySQL:
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, и оптимизация доставки контента через их сеть серверов.
Чеклист для быстрого аудита
- [ ] TTFB: Меньше 600мс? Если нет — копаем в сторону кэширования БД и версии PHP.
- [ ] Изображения: Все в WebP/AVIF? Есть
width/height? - [ ] JS: Все скрипты с
defer? Метрика и чаты в конце очереди? - [ ] CSS: Critical CSS вынесен? Лишние библиотеки (например, FontAwesome целиком) удалены?
- [ ] Шрифты: Используется
font-display: swap;? (предотвращает невидимый текст при загрузке). - [ ] Gzip/Brotli: Включено сжатие на сервере? (Brotli эффективнее Gzip).
Частые ошибки
- Установка 10 плагинов для оптимизации. Каждый плагин — это лишний код. Лучше один раз настроить Nginx/сервер, чем ставить «комбайны» типа WP Rocket, которые сами по себе нагружают сервер.
- Оптимизация «тяжелых» скриптов. Если у вас на сайте 5 чатов, 3 пикселя соцсетей и 2 рекламных сети — никакая оптимизация не даст 90+ баллов. Удаляйте лишнее.
- Игнорирование 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
Комментарии
Отправить комментарий