В современных проектах на WordPress часто встречается ситуация, когда страницы сайта имеют динамический контент, зависящий от GET-параметров в URL. Например, фильтры товаров, параметры сортировки или пользовательские настройки отображения. Стандартные кэш-плагины, включая WP Super Cache, по умолчанию кэшируют страницу без учета этих параметров, что может привести к показу некорректного контента пользователям.
Почему важно учитывать GET-параметры при кэшировании
Если кэш сделать одинаковым для всех URL с одинаковым базовым адресом, но разными GET-параметрами, то пользователи, заходящие на разные варианты страницы, будут видеть одинаковый контент. Это может привести к потере функциональности сайта и ухудшению пользовательского опыта.
Например, на странице каталога товаров URL site.ru/catalog?color=red и site.ru/catalog?color=blue должны показывать разные товары. Если кэш не учитывает параметр color, пользователи увидят одно и то же содержимое.
Поэтому задача — настроить кэширование так, чтобы кэш создавался для каждой уникальной комбинации GET-параметров либо, при необходимости, исключить из кэширования определённые параметры.
Особенности работы WP Super Cache с GET-параметрами
WP Super Cache по умолчанию не кэширует страницы с GET-параметрами. Это сделано для предотвращения показа некорректного контента. Однако такой подход сильно снижает эффективность кэширования, если многие параметры не влияют на контент.
В настройках WP Super Cache есть возможность разрешить кэширование страниц с параметрами, но это требует аккуратной настройки и понимания, какие параметры можно учитывать, а какие — нет.
Настройка WP Super Cache для кэширования URL с параметрами
Для начала необходимо перейти в настройки плагина и в разделе Advanced найти опцию Cache URLs with GET parameters (Кэшировать URL с GET параметрами). Включите её.
Далее нужно определить, какие параметры влияют на контент, а какие можно игнорировать. Например, если у вас есть параметр utm_source, который не меняет содержимое страницы, его можно исключить из формирования ключа кэша.
Это настраивается через фильтр wpsupercache_cache_key. Пример кода для удаления из ключа кэша параметров UTM:
function wpsupercache_custom_cache_key($key) {
$url_parts = parse_url($key);
if (!empty($url_parts['query'])) {
parse_str($url_parts['query'], $query_params);
// Удаляем UTM-параметры
foreach (['utm_source', 'utm_medium', 'utm_campaign'] as $param) {
if (isset($query_params[$param])) {
unset($query_params[$param]);
}
}
// Формируем новый ключ
$new_query = http_build_query($query_params);
$new_url = $url_parts['path'] . ($new_query ? '?' . $new_query : '');
return $new_url;
}
return $key;
}
add_filter('wpsupercache_cache_key', 'wpsupercache_custom_cache_key');Этот код позволяет игнорировать UTM-параметры и уменьшает количество создаваемых кэшей, сохраняя корректность содержимого.
Кэширование с учетом определённых GET-параметров
Если же вам нужно кэшировать разные версии страницы для разных значений параметров, например, фильтра товаров, то нужно явно указывать, какие параметры учитывать при формировании ключа кэша.
Рассмотрим пример, когда параметр color должен влиять на кэш:
function wpsupercache_custom_cache_key_with_color($key) {
$url_parts = parse_url($key);
if (!empty($url_parts['query'])) {
parse_str($url_parts['query'], $query_params);
$allowed_params = ['color'];
$filtered_params = [];
foreach ($allowed_params as $param) {
if (isset($query_params[$param])) {
$filtered_params[$param] = $query_params[$param];
}
}
$new_query = http_build_query($filtered_params);
$new_url = $url_parts['path'] . ($new_query ? '?' . $new_query : '');
return $new_url;
}
return $key;
}
add_filter('wpsupercache_cache_key', 'wpsupercache_custom_cache_key_with_color');Таким образом, для каждой уникальной комбинации параметра color будет свой кэш.
Рекомендации по выбору параметров для кэширования
- Учитывайте только те параметры, которые влияют на отображаемый контент.
- Избегайте кэширования страниц с параметрами, которые часто меняются и не влияют на контент (например, метки UTM, сессии).
- Оптимизируйте количество учитываемых параметров, чтобы избежать взрывного роста числа кэшированных страниц.
Альтернативные решения и плагины для гибкого кэширования с параметрами
WP Super Cache отлично подходит для базового кэширования, но в сложных случаях с множеством параметров можно рассмотреть другие плагины, например:
- Cache Enabler — поддерживает кэширование с учетом GET-параметров с возможностью настройки.
- Swift Performance — имеет расширенные настройки кэширования, в том числе для динамического контента.
- LiteSpeed Cache — если ваш сервер поддерживает LiteSpeed, этот плагин позволяет гибко управлять кэшом с параметрами.
Также можно использовать серверное кэширование на уровне Nginx или Varnish с индивидуальными правилами обработки параметров.
Практический пример: кэширование страниц с параметром filter в WP Super Cache
Допустим, у вас есть страница каталога с параметром filter, который меняет вывод товаров. Чтобы обеспечить кэш для каждой версии, добавьте следующий код в functions.php темы или в отдельный плагин:
function wpsupercache_cache_key_filter($key) {
$url_parts = parse_url($key);
if (!empty($url_parts['query'])) {
parse_str($url_parts['query'], $query_params);
$allowed_params = ['filter'];
$filtered_params = [];
foreach ($allowed_params as $param) {
if (isset($query_params[$param])) {
$filtered_params[$param] = $query_params[$param];
}
}
$new_query = http_build_query($filtered_params);
$new_url = $url_parts['path'] . ($new_query ? '?' . $new_query : '');
return $new_url;
}
return $key;
}
add_filter('wpsupercache_cache_key', 'wpsupercache_cache_key_filter');После этого WP Super Cache будет создавать отдельный кэш для каждого значения параметра filter, что улучшит производительность и корректность отображения.
Учет пользовательских сессий и куков при кэшировании с параметрами
В некоторых случаях контент зависит не только от GET-параметров, но и от пользовательских сессий или cookies. WP Super Cache позволяет исключать из кэша пользователей с определёнными ролями или куками.
Если же необходимо кэшировать страницы с разным содержимым в зависимости от cookie, можно расширить формирование ключа кэша, добавив значение cookie:
function wpsupercache_cache_key_with_cookie($key) {
$cookie_value = isset($_COOKIE['my_custom_cookie']) ? sanitize_text_field($_COOKIE['my_custom_cookie']) : '';
return $key . '_cookie_' . $cookie_value;
}
add_filter('wpsupercache_cache_key', 'wpsupercache_cache_key_with_cookie');Это позволит создавать отдельный кэш для разных значений cookie, но увеличит количество кэшируемых страниц, поэтому используйте с осторожностью.
Выводы и рекомендации
Кэширование страниц с пользовательскими GET-параметрами — важная и непростая задача при оптимизации WordPress-сайтов. Правильная настройка позволяет сохранять высокую производительность без потери функциональности.
Обязательно:
- Понимайте какие параметры влияют на содержимое страницы.
- Используйте фильтры WP Super Cache для управления ключами кэша.
- Тестируйте результат на тестовом окружении перед применением на боевом сайте.
- При необходимости используйте альтернативные плагины или серверные решения.
Для детальной настройки и дополнительных возможностей рекомендуем ознакомиться с плагином WP Super Cache на WPSHOP.ru, где представлены расширенные инструкции и поддержка.