Многие сталкиваются с проблемой, когда UTM-метки не передаются полностью через $_GET
или $_SERVER
. Почему это происходит? Проблема кроется в особенностях парсинга URL.
«Не могу получить все UTM-метки из адреса. utm_source и utm_medium обрезаются.»
Решения
- Проверьте URL. Убедитесь, что все параметры правильно закодированы.
- Используйте
parse_str
. Эта функция поможет корректно разобрать строку запроса. - Проверьте сервер. Некоторые настройки могут ограничивать длину или формат URL.
// Получаем текущий url в php
$url = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$parts = parse_url($url); // делаем из строки массив
parse_str($parts['query'], $query); // из массива получаем запрос
// выводим utm метки полученные из адресной строки через php
echo $query['utm_source'];
echo $query['utm_medium'];
echo $query['utm_campaign'];
echo $query['utm_content'];
Второе решение основано на $_SERVER
$qStr = $_SERVER['QUERY_STRING'];
parse_str($qStr, $query);
echo $query['utm_source'];
echo $query['utm_medium'];
echo $query['utm_campaign'];
echo $query['utm_content'];
Этот код корректно извлекает все UTM-метки из строки.
P.S. Если решение не помогает, проверьте серверные настройки.