Эта часть — про проблему, которую мы нашли, измерили и пока не решили. Решение есть, но оно затрагивает отчётность по рекламе, поэтому его принимает заказчик. Когда сделаем — выйдет продолжение с результатами.
Это одиннадцатая часть цикла «Кэш страниц без MISS».
Что нашли
Проверка на рабочем сайте:
| Адрес | Статус |
|---|---|
| страница каталога | HIT |
тот же адрес с ?ysclid=… | MISS — всегда |
Записей по адресам с рекламными метками в кэше — ноль. Каждый клик по рекламе — полный рендер страницы.
Почему так
На сайте стоит модуль атрибуции заявок: при заходе с рекламы он ставит куку с источником, чтобы потом в заявке было видно, откуда пришёл человек. Кука ставится в ответе страницы — а ответ с Set-Cookie nginx не кэширует (седьмая часть). Каждый адрес с меткой уникален, каждый ответ — с кукой, значит, кэша нет.
Сколько это стоит
- на крупном каталоге — 2246 запросов в сутки;
- та же картина подтвердилась ещё на трёх сайтах;
- и это самый дорогой трафик: за каждого такого посетителя заплачено, а он получает самый медленный ответ.
Почему не лечится в nginx
- Игнорировать Set-Cookie (
fastcgi_ignore_headers Set-Cookie) нельзя: кука первого посетителя уйдёт из кэша всем, атрибуция станет ложной. - Прятать куку (
fastcgi_hide_header Set-Cookie) — значит не ставить её никому, атрибуция сломается. - Выкинуть метку из ключа недостаточно: ответ всё равно с кукой.
Как это решать
Ставить метку кампании на клиенте. Сервер отдаёт одинаковый HTML без кук, а скрипт читает параметры из адреса и сам пишет куку источника. Тогда:
- метки можно убрать из ключа кэша — страница с рекламы приходит из той же ячейки, что и без неё;
- атрибуция работает как раньше: кука ставится, только не сервером.
Почему мы ещё не сделали. Меняется то, как источник попадает в заявку, — значит, нужно сверить отчёты по рекламе до и после, и это решение заказчика, а не разработчика. Если у вас такая же связка, проверьте отчётность прежде, чем переносить метку на клиент.
Проверьте у себя
curl -s -o /dev/null -D - "https://сайт/страница/" | grep -iE 'set-cookie|x-cache-status'
curl -s -o /dev/null -D - "https://сайт/страница/?yclid=1" | grep -iE 'set-cookie|x-cache-status'
Если второй запрос всегда MISS с Set-Cookie — ваша реклама получает самый медленный сайт.
Платите за рекламу, а сайт открывается медленно?
Пришлите адрес — проверю, кэшируются ли страницы для рекламного трафика.
// загружаю комментарии…