При входе на сайт при определенных условиях происходит редирект, из-за чего слетает исходный document.referrer на конечной странице с аналитикой, это приводит к потере данных о том, откуда пользователь пришёл на сайт.
Есть необходимость, чтобы GTM брал для аналитики не document.referrer, а то, что ему будет подсунуто. Исходный заголовок Referer запоминается сервером и подставляется в $_SERVER["HTTP_REFERER"] на конечной странице, но document.referrer свойство только для чтения и туда его подставить нельзя, чтобы это работало во всех браузерах.
В случае с Яндекс.Метрикой всё решается и хорошо работает через параметр в URL utm_referrer. В ней правильно указаны переходы с других сайтов и с поисковиков, несмотря на редирект.
Из документации:
Чтобы Яндекс.Метрика правильно определила источник перехода на сайт при JavaScript-редиректе или при переходе на ваш сайт с протоколом HTTP с сайта, доступного по протоколу HTTPS, используйте параметр utm_referrer.
В качестве значения укажите адрес сайта, с которого совершен переход. Пример:
https://example.com/?utm_referrer=example-source.com
Вопрос: есть ли что-то подобное для GTM?
Здесь указано решение:
gtag('set', {
referrer: "https://your-referrer-url.com"
})
Полный код:
var referrer = "<?=$_SERVER["HTTP_REFERER"]?>";
gtag('set', {
referrer: referrer,
});
gtag('config', 'G-XXXXXX');
// так же указывал gtag('set') после gtag('config'), всё равно не работает
Итак: есть ли способ указать GTM, какой referrer брать и можно ли как-то проверить, что он его реально взял, потому что в самой Google Аналитике эти данные отображаются с задержкой чуть ли не в сутки.
Возможно это решение и работает, но непонятно, в каком именно месте нужно указывать эту строку и в какой момент GTM отправляет данные (в консоли нет никаких AJAX-запросов, в отличие от Яндекс.Метрики).
Для ga.js в документации этот момент
обозначен, для gtag.js нет. Но я так понимаю, что ga.js уже обозначен, как устаревший API.
ga('set', 'referrer', 'http://example.com');
В исходном коде gtag.js трудно что-то понять, так как он обфусцирован.