Когда клиент жалуется на медленный сайт, первое, что ему советуют на форумах, — «поставь плагин кэширования». Совет правильный, но неполный. Кэш действительно способен сократить время ответа сервера в разы, однако неверно настроенный он приводит к странным эффектам: покупатель видит чужую корзину, формы не отправляются, изменения на страницах не появляются часами. Разберём, как устроено кэширование в WordPress, на каких уровнях оно работает и как настроить его так, чтобы ускорение не обернулось новыми проблемами.
Почему WordPress без кэша работает медленно
WordPress — динамическая система. Каждый раз, когда посетитель открывает страницу, сервер запускает PHP, загружает ядро, все активные плагины и тему, делает десятки, а иногда сотни запросов к базе данных, собирает HTML и только потом отдаёт его браузеру. Для одного посетителя это незаметно, но при сотне одновременных пользователей сервер начинает «задыхаться».
При этом подавляющее большинство страниц у всех посетителей выглядит одинаково: статья в блоге, страница услуги, карточка товара для неавторизованного пользователя. Нет смысла каждый раз собирать их заново. Кэширование решает именно эту задачу: результат тяжёлой работы сохраняется и выдаётся повторно, пока не появится причина его обновить.
Уровни кэширования: от сервера до браузера
Слово «кэш» в контексте сайта означает несколько разных механизмов. Они не заменяют, а дополняют друг друга.
Страничный кэш
Самый эффективный уровень. Готовая HTML-страница сохраняется в файл или в память, и следующие посетители получают её без запуска PHP и обращения к базе. Реализуется плагином или на уровне веб-сервера. Именно он даёт главный прирост скорости ответа.
Объектный кэш
Сохраняет результаты запросов к базе данных и вычислений внутри WordPress. По умолчанию такой кэш живёт только в пределах одного запроса. Чтобы он сохранялся между запросами, нужно постоянное хранилище в оперативной памяти — его обычно предоставляет хостинг. Объектный кэш особенно полезен там, где страничный неприменим: в админке, в личном кабинете, в корзине магазина.
Кэш опкода PHP
PHP перед выполнением компилирует скрипты в промежуточный код. Расширение кэширования опкода хранит результат компиляции в памяти, и файлы не разбираются при каждом запросе. На большинстве современных хостингов оно уже включено, но проверить стоит.
Браузерный кэш
Заголовки, которые сервер отправляет вместе с картинками, стилями и скриптами, подсказывают браузеру хранить эти файлы локально. Повторный визит на сайт происходит заметно быстрее, потому что браузер ничего не скачивает заново.
CDN
Сеть доставки контента хранит копии статических файлов, а иногда и целых страниц, на серверах в разных городах. Для сайтов с аудиторией по всей стране это сокращает задержку, а заодно снимает нагрузку с основного хостинга.
С чего начать: порядок действий
Мы рекомендуем внедрять кэширование последовательно, проверяя результат после каждого шага, а не включать все галочки разом.
- Замерьте исходные показатели. Время ответа сервера, полная загрузка ключевых страниц, оценки сервисов проверки скорости. Без замера невозможно понять, что дало эффект.
- Узнайте, что предлагает хостинг. Многие хостинги имеют собственный серверный кэш и рекомендуют совместимый плагин. Два страничных кэша одновременно — частый источник конфликтов.
- Включите страничный кэш с базовыми настройками и проверьте сайт в режиме инкогнито: страницы, формы, поиск, корзину.
- Настройте браузерное кэширование статических файлов с долгим сроком хранения.
- Подключите объектный кэш, если хостинг это поддерживает, — особенно для магазинов и сайтов с личными кабинетами.
- Только потом переходите к объединению и минификации CSS и JavaScript, отложенной загрузке скриптов. Эти функции дают меньший эффект и чаще всего ломают вёрстку.
Что нельзя кэшировать
Главное правило: в страничный кэш не должно попадать ничего персонального. Если страница содержит данные конкретного пользователя, кэшированная копия покажет их всем остальным. Вот что обязательно исключается:
- корзина, оформление заказа и страница «Мой аккаунт» в WooCommerce;
- страницы для авторизованных пользователей — им кэш обычно отключают полностью;
- страницы с результатами поиска и фильтрации, если их слишком много вариантов;
- служебные адреса: обработчики форм, платёжные уведомления, программный интерфейс;
- страницы, где выводятся данные из cookie: выбранный город, валюта, недавно просмотренные товары.
Популярные плагины кэширования знают о WooCommerce и автоматически исключают его служебные страницы. Но если магазин использует нестандартные адреса или сторонние плагины для личного кабинета, исключения придётся добавлять вручную.
Совет от студии: после настройки кэша оформите тестовый заказ из двух разных браузеров одновременно. Если во втором браузере корзина оказалась не пустой или появилось имя первого покупателя — исключения настроены неверно, и сайт нельзя оставлять в таком состоянии ни часа.
Одноразовые ключи и формы: скрытая ловушка
Отдельная проблема — защитные токены. WordPress и многие плагины форм вставляют в страницу одноразовый ключ, который подтверждает, что запрос отправлен с вашего сайта. У такого ключа есть срок жизни. Если страница хранится в кэше дольше этого срока, посетитель получает устаревший ключ, и форма отказывается отправляться с невнятной ошибкой.
Решений несколько: ограничить время жизни кэша, использовать формы, которые получают ключ отдельным запросом после загрузки страницы, или исключить страницы с важными формами из кэша. Похожим образом ведут себя капчи, счётчики просмотров и блоки «Сейчас на сайте».
Очистка кэша: когда и как
Кэш полезен, пока содержит актуальные данные. Хорошие плагины автоматически сбрасывают копию страницы при её редактировании, а также связанные страницы: главную, архивы рубрик, ленту. Проблемы начинаются, когда содержимое меняется в обход редактора:
- изменение остатков и цен через импорт или синхронизацию с учётной системой;
- правки в виджетах и меню, которые выводятся на всех страницах сразу;
- изменения в настройках темы и стилях.
В таких случаях нужна полная очистка или настройка правил, которые сбрасывают кэш после импорта. Для магазинов с частыми изменениями цен мы обычно ставим короткий срок жизни кэша для каталога и автоматическую очистку после синхронизации.
Если используется CDN, помните, что у него свой кэш. Очистка в плагине на сайте не всегда затрагивает копии на серверах сети доставки — это настраивается отдельно.
Чего кэш не исправит
Кэширование маскирует медлительность, но не устраняет её причины. Первый посетитель после очистки всё равно ждёт полной генерации страницы, админка продолжает тормозить, а корзина и оформление заказа, которые не кэшируются, работают со скоростью «голого» сайта. Если без кэша страница собирается несколько секунд, стоит искать корень проблемы:
| Симптом | Возможная причина |
|---|---|
| Медленно всё, включая админку | Слабый тариф хостинга, устаревшая версия PHP |
| Тормозит после установки плагина | Тяжёлый плагин с лишними запросами к базе |
| Страница долго «дорисовывается» | Огромные изображения, внешние шрифты и скрипты |
| База растёт, запросы замедляются | Тысячи ревизий, мусор в таблице настроек, логи плагинов |
Комплексная оптимизация обычно включает переход на актуальную версию PHP, чистку базы, ревизию плагинов, сжатие изображений и только затем — тонкую настройку кэша. Такой подход даёт стабильный результат, который не зависит от того, попал ли посетитель в кэш.
Вывод
Кэширование в WordPress — многоуровневая система: страничный кэш снимает основную нагрузку, объектный ускоряет динамические разделы, браузерный и CDN сокращают время повторной загрузки. Включайте уровни постепенно, замеряйте результат и обязательно проверяйте персональные страницы, формы и корзину. И помните: кэш — это ускоритель, а не лекарство. Если сайт медленный по своей природе, нужно разбираться с хостингом, плагинами и базой. Наши специалисты по администрированию проведут аудит производительности, настроят кэширование под ваш хостинг и проверят, что ускорение не сломало ни одной функции сайта.