gclid и кеш: запрос из клика по рекламе, ключ кеша страницы и замер первого байта

Уведомление о партнёрских ссылках v3.1
Уведомление о партнёрских ссылках v3.2 (мобильная версия)
Тестовая среда Семейство RHELAlmaLinux 9.8Nginx 1.28 + Apache 2.4WP Rocket 3.23.5.1Проверено 2026-10-17

Обработка gclid в кеше — это поведение, при котором параметр gclid в конце адреса перехода по рекламе игнорируется, а ответ отдаётся из файла кеша адреса без параметров. Замеры времени до первого байта по параметрам и наличию кеша на сервере WordPress с Nginx + Apache показали, что gclid добавляет 0,014–0,015 с, а задержки в несколько секунд возникали только тогда, когда кеш использовать не удавалось.

Время до первого байта, измеренное внутри того же сервера, составило 0,014–0,015 с без параметров и 0,029–0,030 с с параметрами клика по рекламе. Когда WordPress заново собирал ту же страницу без кеша, это заняло 3,639 и 3,260 с.

1️⃣ gclid и кеш: адрес перехода по рекламе и ключ кеша

При включённой автоматической пометке Google Ads к концу адреса посетителя, кликнувшего по рекламе, добавляется [?gclid=значение]. Это значение — параметр, который идентифицирует клик по рекламе, поэтому у каждого посетителя оно своё, хотя при повторном клике того же человека по той же рекламе может использоваться то же значение.

В реальных адресах перехода по рекламе gclid редко бывает один. Часто вместе с ним добавляются gad_source, gad_campaignid и gbraid, а иногда ещё и wbraid.

https://example.com/sample-page/?gad_source=1&gad_campaignid=1234567890&gbraid=EXAMPLE&gclid=EXAMPLE
https://example.com/sample-page/?gclid=EXAMPLE&gbraid=EXAMPLE&wbraid=EXAMPLE

Даже с параметром в конце адреса браузер открывает ту же страницу, но для кеша это другой адрес. Стандарт HTTP-кеширования (RFC 9111) определяет ключ кеша — основу, по которой кеш выбирает сохранённый ответ, — как состоящий как минимум из метода запроса и целевого URI, а целевой URI включает и строку запроса.

Если строка запроса попадает в ключ кеша как есть, каждый клик с другим значением gclid становится новым адресом. CDN, nginx и WP Rocket, через которые проходит ответ, обрабатывают этот параметр каждый по своим правилам.

Клик по рекламе https://example.com/sample-page/?gad_source=1&gbraid=…&gclid=…
CDN
Если исключить рекламные параметры из ключа кеша→ ответ из копии адреса без параметров
Если копии нет→ запрос к исходному серверу с теми же параметрами
nginx
Если есть хотя бы один параметр→ прямая отдача файла кеша пропускается, запрос уходит в Apache
WP Rocket
Если есть только параметры из списка игнорируемых→ ответ из файла кеша адреса без параметров
Если файла кеша нет→ WordPress заново собирает страницу

Если в CDN нет копии или его ключ кеша различает параметры, запрос уходит на исходный сервер. Дальнейшая скорость зависит от того, найдут ли nginx и WP Rocket файл кеша.

🧭 Путь запроса при клике по рекламе
WP RocketПоясняющая схема
🔗 Адрес запроса
☁️ Копия в CDN
🌐 Запрос
/sample-page/Без параметров
/sample-page/?gclid=…gad_source · gbraid · gclid
→Запрос
☁️ CDN
🔑 Рекламные параметры исключены из ключа кеша
✅ Ответ из той же копии
➡️ Запрос к исходному серверу
➡️ На исходный сервер вместе с параметрами
→Запрос к исходному серверу
🖥️ nginx
🔎 Пуста ли строка запроса
Не доходит
✅ Прямая отдача файла кеша · HIT
➡️ Есть параметры, запрос уходит в Apache
→Apache
🚀 WP Rocket
📋 Список игнорируемых параметров
Apache · PHP
Не доходит
Не доходит
✅ Рекламные параметры отбрасываются, ответ из того же файла кеша
Если в CDN есть копия, на запрос без параметров CDN сразу отвечает из неё, и nginx и WP Rocket исходного сервера не задействуются.
Если CDN исключает рекламные параметры из ключа кеша, он отвечает той же копией, что и для адреса без параметров, даже при другом значении gclid, и запрос до исходного сервера не доходит.
Если в CDN копии нет, запрос уходит на исходный сервер, а поскольку параметров нет, nginx сразу отдаёт файл кеша WP Rocket без участия PHP. Время до первого байта, измеренное внутри сервера, — 0,014–0,015 с.
Запрос с рекламными параметрами уходит на исходный сервер вместе с ними, и nginx из-за наличия параметров пропускает прямую отдачу файла кеша и передаёт запрос в Apache. Затем WP Rocket отбрасывает рекламные параметры и отвечает из того же файла кеша; время до первого байта — 0,029–0,030 с.

2️⃣ Статическая отдача nginx: запросы с параметрами уходят в Apache

Даже если файл кеша лежит на диске, nginx в связке Nginx + Apache не отдаёт его напрямую на запрос с параметрами. Дело в том, что приведённая ниже настройка, позволяющая nginx читать файлы кеша WP Rocket напрямую, строит путь к файлу только при пустой строке запроса.

# nginx.conf — блок http: условия пропуска файла кеша
map $http_cookie $rocket_cookie {
    default                   0;
    '~*wordpress_logged_in'   1;
    '~*wp-postpass'           1;
    '~*comment_author'        1;
    '~*woocommerce_items'     1;
}
map $request_method $rocket_method {
    default  1;
    GET      0;
    HEAD     0;
}
map $query_string $rocket_query {
    default  1;
    ''       0;      # 0 только при пустой строке запроса
}

# блок server
set $rocket_bypass '';
if ($rocket_cookie = 1) { set $rocket_bypass '1'; }
if ($rocket_method = 1) { set $rocket_bypass '1'; }
if ($rocket_query  = 1) { set $rocket_bypass '1'; }
set $rocket_file '/wp-content/cache/wp-rocket/example.com${request_uri}index-https.html';
if ($rocket_bypass = '1') { set $rocket_file ''; }

location / {
    try_files $rocket_file @apache;                       # в Apache, если путь пуст или файла нет
    add_header X-Rocket-Nginx-Serving-File 'HIT' always;  # отметка о том, что nginx отдал ответ прямо из файла кеша
}

[$rocket_query] проверяет только, пуста ли вся строка запроса, поэтому gclid, который WP Rocket игнорирует, обрабатывается так же, как любой другой параметр. Если мобильные копии хранятся отдельно, добавляется ещё одна проверка, которая дописывает [-mobile] к имени файла.

В правилах [.htaccess], которые WP Rocket создаёт для Apache, тоже есть условие пустой строки запроса. Этап прямой отдачи файла кеша без PHP — и в nginx, и в Apache — применяется только к запросам без параметров.

У запросов без параметров был заголовок [X-Rocket-Nginx-Serving-File: HIT], а у шести запросов с gclid и рекламными параметрами его не было. Время до первого байта у запросов с параметрами выросло на 0,014–0,015 с, потому что добавился этап, на котором Apache и PHP читают файл кеша и отдают ответ.

curl -so /dev/null -H 'Accept-Encoding: gzip' -w '%{time_starttransfer}\n' \
  'https://example.com/sample-page/'
0.015127
curl -so /dev/null -H 'Accept-Encoding: gzip' -w '%{time_starttransfer}\n' \
  'https://example.com/sample-page/?gclid=test123'
0.029525
curl -sI 'https://example.com/sample-page/' | grep -i x-rocket-nginx-serving-file
x-rocket-nginx-serving-file: HIT

[time_starttransfer] — это время от запроса до получения первого байта. Чтобы измерить внутри сервера без CDN, добавьте также [--resolve example.com:443:127.0.0.1].

3️⃣ Список игнорируемых параметров WP Rocket: ответ из того же файла кеша

Не кешировать адреса с параметрами — поведение WP Rocket по умолчанию, но параметры кликов по рекламе — исключение. WP Rocket до проверки отбрасывает параметры из списка игнорируемых и, если параметров не осталось, отвечает из файла кеша адреса без параметров.

// wp-rocket/inc/classes/Buffer/class-tests.php (3.23.5.1)
public function get_query_params() {
    // …
    $params = array_diff_key(                                  // сначала отбросить игнорируемые параметры
        self::$get,
        $this->config->get_config( 'cache_ignored_parameters' )
    );
    // …
}

public function can_process_query_string() {
    // …
    $params = $this->get_query_params();

    if ( ! $params ) {                                         // если параметров не осталось, обработать через кеш
        return self::memoize( __FUNCTION__, [], true );
    }
    // проходят только lang · s · permalink_name · lp-variation-id и параметры, добавленные в [Cache Query String(s)]
    // …
}

Если после удаления игнорируемых параметров результат [get_query_params] пуст, путь к файлу кеша тоже определяется по адресу без параметров. Запрос с gclid прошёл через Apache и PHP, но комментарий кеша в конце HTML совпал с запросом без параметров, а размер ответа был таким же, как у файла кеша (gzip), — 350 668 байт.

Список игнорируемых параметров — это список по умолчанию, который WP Rocket раз в неделю загружает со своих серверов и сохраняет в [wp-content/wp-rocket-config/dynamic-lists.json]. По состоянию на 17 октября 2026 года в нём есть gclid, gbraid, wbraid, gad_source и gad_campaignid.

Если примешан хотя бы один параметр не из списка, WP Rocket кеш не использует: та же страница с произвольным параметром не из списка была заново собрана WordPress без комментария кеша. Если к рекламным адресам добавлены ваши собственные параметры отслеживания, такие клики каждый раз идут этим путём.

Чтобы изменить список, используйте вспомогательный плагин, который рекомендует WP Rocket. Плагин добавляет или убирает параметры через фильтр [rocket_cache_ignored_parameters] и заново создаёт файл конфигурации WP Rocket при включении и отключении.

// из WP Rocket | Ignore Query Strings 1.1.1 (вспомогательный плагин команды поддержки WP Rocket)
function define_ignored_parameters( array $params ) {
    $params['new_query_string'] = 1;      // добавить в игнорируемые параметры
    //unset ( $params['utm_source'] );    // убрать из игнорируемых параметров
    return $params;
}
add_filter( 'rocket_cache_ignored_parameters', __NAMESPACE__ . '\define_ignored_parameters', 999 );

register_activation_hook( __FILE__, __NAMESPACE__ . '\flush_wp_rocket' );   // при включении выполняет rocket_generate_config_file()

WP Rocket записывает этот список в файл конфигурации с именем домена внутри [wp-content/wp-rocket-config/] и читает этот файл при каждом запросе, поэтому, если только добавить фильтр и не пересоздать файл конфигурации, новый список не начнёт действовать. Параметры из списка при любом значении используют один файл кеша базового адреса, поэтому не добавляйте параметры, значение которых меняет содержимое страницы.

После того как в вспомогательный плагин был добавлен [uk_test], которого не было в списке, и плагин был включён, файл конфигурации был создан заново, а этот параметр добавился в конец списка. Затем по очереди были запрошены адрес без параметров и два адреса с разными значениями [uk_test].

curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/'
curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/?uk_test=abc'
curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/?uk_test=xyz'
21390 0.025720
21390 0.025507
21390 0.027929

Все три запроса вернули одинаковые 21 390 байт менее чем за 0,03 с, а конец HTML запроса с [uk_test] был открыт для проверки времени кеша.

curl -s --compressed 'https://example.com/sample-page/?uk_test=abc' | tail -c 200
ck=lazyLoadYoutubeIframe;}});</script></body>
</html>

<!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1792248839 -->

Время кеша в завершающем комментарии совпало с файлом кеша адреса без параметров. До включения вспомогательного плагина тот же запрос заново собирался за 0,36–0,38 с без комментария кеша.

И после включения запрос, к которому был добавлен ещё и [foo], которого нет в списке, не использовал файл кеша и собирался заново.

В течение 1 минуты сразу после пересоздания файла конфигурации запросы [uk_test] тоже собирались заново. В этой конфигурации PHP OPcache перепроверяет изменённые файлы каждые 60 секунд (revalidate_freq), поэтому ответы из файла кеша пошли только через минуту.

Даже после отключения и удаления вспомогательного плагина строка [uk_test] осталась в файле конфигурации. Код, который выполняется при отключении, пытается снять фильтр, добавленный с приоритетом 999, с приоритетом по умолчанию, поэтому файл конфигурации пересоздаётся с оставшимся фильтром. Параметр исчезает из списка, только если после удаления плагина пересоздать файл конфигурации ещё раз.

4️⃣ Ключ кеша CDN: исключение рекламных параметров и запросы к исходному серверу

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

Если так исключить рекламные параметры, CDN отвечает той же копией, что и для адреса без параметров, даже при другом значении gclid, и только при отсутствии копии отправляет запрос с параметрами на исходный сервер.

# Статус кеша CDN для двух запросов с разными значениями gclid (имена заголовков у разных CDN различаются)
curl -sI 'https://example.com/sample-page/?gclid=test1' | grep -i -E 'cache|age'
curl -sI 'https://example.com/sample-page/?gclid=test2' | grep -i -E 'cache|age'

Если оба запроса с разными значениями дают HIT и время сохранения копии совпадает с адресом без параметров, этот CDN исключает gclid из ключа кеша. Первое посещение в точке, где копии ещё нет, по-прежнему проходит через обработку nginx и WP Rocket на исходном сервере, даже если CDN исключает рекламные параметры из ключа.

5️⃣ Почему клик по рекламе открывается медленно: пустой кеш страницы

Если первая страница после перехода по рекламе открывается медленно, легко решить, что gclid обходит кеш, но при наличии файла кеша ответ отдаётся из того же файла даже с параметрами. Время до первого байта увеличивают на несколько секунд случаи, когда файл кеша пуст и WordPress заново собирает страницу.

📊Время до первого байта с кешем и без негоЗамер внутри сервера · секунды
Ответ из файла кешаWordPress собирает заново
Когда файл кеша есть
Время до первого байта для той же страницы, запрошенной без параметров и с параметрами клика по рекламе. С параметрами запрос проходит через Apache и PHP, но ответ всё равно отдаётся из того же файла кеша.
0.0000.0070.0150.0220.030
Без параметров0,014–0,015 сПрямая отдача nginx
gclid0,029–0,030 сЧерез Apache · PHP
С файлом кеша и без него
Время до первого байта для запроса с параметрами клика по рекламе и для запросов, при которых WordPress заново собирал страницу без файла кеша.
0.00.91.82.73.6
gclid0,029–0,030 сФайл кеша есть
Сборка заново3,639 с1-й раз
Сборка заново3,260 с2-й раз
Цифры — время до первого байта, измеренное запросом той же страницы внутри сервера WordPress с Nginx + Apache (17 октября 2026 года).

Файлы кеша удаляются по истечении срока, заданного параметром Время жизни кэша (по умолчанию в WP Rocket — 10 часов). При сохранении записи или настроек связанный кеш тоже удаляется, а когда список, который WP Rocket загружает раз в неделю, заменяется новой версией и сохраняется, очищается и весь кеш сайта.

Если предзагрузка включена, WP Rocket снова открывает очищенные адреса и заполняет кеш, а посетители, пришедшие раньше, ждут, пока страница соберётся заново. Запрос только с рекламными параметрами тоже создаёт файл кеша по адресу без параметров, поэтому первый клик по рекламе, попавший на пустой кеш, заполняет его для следующего посетителя.

Сразу после очистки кеша первый запрос, открытый с рекламными параметрами, не нашёл файла кеша и был заново собран за 0,341–0,369 с, а файл кеша адреса без параметров появился в ту же секунду.

curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/?gclid=EXAMPLE1'
ls -l --time-style='+%F %T' wp-content/cache/wp-rocket/example.com/sample-page/
curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/'
21361 0.366881
Итого 116
-rw-r--r-- 1 example nobody 90908 2026-10-17 23:56:38 index-https.html
-rw-r--r-- 1 example nobody 21385 2026-10-17 23:56:38 index-https.html_gzip
21385 0.025379

Все три раза порядок был одинаковым, а запрос без параметров, открытый следом, получил ответ из нового файла кеша за 0,023–0,025 с. Запрос был не с мобильного устройства, поэтому появились только два файла для ПК.

Для адресов, на которые ведёт реклама, сами проверьте, есть ли файл кеша и когда он создан, а если мобильные копии создаются отдельно, проверяйте файлы для ПК и мобильных устройств вместе.

ls -l --time-style='+%F %T' wp-content/cache/wp-rocket/example.com/sample-page/
Итого 3520
-rw-r--r-- 1 example nobody 1445922 2026-10-17 14:07:44 index-https.html
-rw-r--r-- 1 example nobody  350668 2026-10-17 14:07:44 index-https.html_gzip
-rw-r--r-- 1 example nobody 1446862 2026-10-17 14:07:47 index-mobile-https.html
-rw-r--r-- 1 example nobody  351042 2026-10-17 14:07:47 index-mobile-https.html_gzip
curl -s --compressed 'https://example.com/sample-page/?gclid=test123' | tail -c 200
n/1/wp-content/uploads/example-plugin/style.css' media='all' /></noscript></body>
</html>
<!-- Cached for great performance - Debug: cached@1792213663 -->

В ответе из файла кеша в комментарии в конце HTML после [Debug: cached@] указано время создания файла кеша в формате Unix. Если этой отметки нет, ответ был заново собран WordPress.

🔢 FAQ & рекомендуемые материалы

По состоянию на 17 октября 2026 года в списке WP Rocket по умолчанию есть также параметры utm вроде utm_source, fbclid от Facebook, msclkid от Microsoft Advertising и srsltid от Google Покупок, поэтому они используют тот же файл кеша. Параметры не из списка не используют кеш, пока вы не добавите их вспомогательным плагином, поэтому сначала проверьте, есть ли имена параметров вашей рекламной платформы в [dynamic-lists.json].

Нет. WP Rocket сначала отбрасывает игнорируемые параметры и только потом проверяет список [Cache Query String(s)], поэтому даже если добавить gclid в это поле, используется файл кеша базового адреса (по коду 3.23.5.1). Чтобы хранить отдельный файл кеша для каждого значения, следуйте официальной инструкции: уберите параметр из списка игнорируемых вспомогательным плагином, а затем добавьте его в это поле.

В формате журнала доступа nginx и Apache по умолчанию нет времени обработки, поэтому судить приходится по размеру ответа. Когда одна и та же страница дважды запрашивалась сжатой, ответы из файла кеша оба раза были одного размера, а заново собранные различались на 2 байта. Для будущих запросов добавьте [$request_time] в формат журнала nginx — тогда время обработки будет записываться для каждого запроса.

🧭 Статьи о WP Rocket Статьи: 16 · Инструменты: 3
📋 Настройка WP Rocket 📄 WP Rocket MCP Server 📄 WP Rocket и URL на корейском 📄 nginx njs 📄 Многоязычный кеш WP Rocket 📄 gclid и кеш
📄 Тест скорости WP Rocket 📝 Плагины кеширования и оптимизации 📝 Пример ускорения сайта
📋 Кеш: определение и все области применения 📄 Кеш сайта & внутренний кеш сервера
📋 Лучший хостинг: TOP 7 📄 Быстрый хостинг 2026
🛠️ Определение WordPress 🛠️ WHOIS-проверка домена 🛠️ Мой IP
Что такое WP Rocket: пять утверждений из статьи с рекомендацией FlyingPress в сравнении с официальными экранами и замерами на сервере
WordPress · WP Rocket
Что такое WP Rocket: основные функции, плюсы и минусы универсального плагина кеширования
Как WP Rocket отдаёт страницы из файлов кеша и сколько он стоит.
Читать →Текущая статья
Настройка WP Rocket: базовые параметры каждого меню и промокод на 20%
WordPress · WP Rocket
Настройка WP Rocket: базовые параметры каждого меню и промокод на 20%
Базовые настройки WP Rocket по каждому меню и цены.
Читать →Текущая статья
WP Rocket MCP Server: управление кешем и настройками через ИИ-инструменты
WordPress · MCP
WP Rocket MCP Server: управление кешем и настройками через ИИ-инструменты
Как управлять кешем и настройками WP Rocket из ИИ-инструментов.
Читать →Текущая статья
Схема прохождения запросов с корейскими URL в WP Rocket
WordPress · WP Rocket
WP Rocket и URL на корейском
Почему nginx не находит файл кеша из-за регистра букв в кодировке запросов с корейскими адресами и как исправить это с помощью njs.
Читать →Текущая статья
Схема переменных nginx njs и путей к файлам кеша
Server · nginx
nginx njs: установка модуля, настройка js_set и применение через reload для создания переменных JavaScript
Как установить модуль njs, который создаёт переменные с помощью функций JavaScript внутри конфигурации nginx, и применить переменные js_set через reload.
Читать →Текущая статья
Схема сохранения записи при многоязычном кеше WP Rocket
WordPress · WP Rocket
Многоязычный кеш WP Rocket
Почему при сохранении черновика кеш переводов удаляется вместе со всей папкой языка, и код, который это предотвращает.
Читать →Текущая статья
Как запрос с рекламным параметром при отсутствии копии в CDN уходит на исходный сервер, проходит из nginx в Apache, а WP Rocket отбрасывает рекламный параметр и отвечает тем же файлом кеша
Server · кеш
gclid и кеш: запрос из клика по рекламе, ключ кеша страницы и замер первого байта
Замер по времени до первого байта: как запрос gclid в конце адреса из клика по рекламе игнорируется и ответ отдаётся из файла кеша адреса без запроса.
Читать →Текущая статья

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 10   +   5   =