Как передавать IP адрес в Яндекс Метрику?

В метрику можно передавать любые пользовательские параметры, например IP адрес.

Как передавать IP адрес в Яндекс Метрику?

Есть 3 (с половинкой) способа:

1.) С изменением кода метрики и добавлением PHP вставки с передачей IP адреса, определяемого вашим сервером (сработает если дружите с разработчиком сайта):

..//..//.. ym(XXXXXXXX, "init", { clickmap:true, trackLinks:true, params:{ip: "<? echo $_SERVER['REMOTE_ADDR']; ?>"}, accurateTrackBounce:true, webvisor:true }); ..//..

2.) С изменением кода метрики и определением IP адреса с помощью внешнего API, например, через l2.io

До кода метрики на сайт внедряется скрипт, который определяет IP и затем через параметр {ip: userip} передаётся в метрику:

<!-- получаем ip адрес --> <script type="text/javascript">var userip;</script> <script type="text/javascript" src="https://www.l2.io/ip.js?var=userip"></script> <!-- подключаем метрику --> ..//..//.. ym(XXXXXXXX, "init", { clickmap:true, trackLinks:true, params:{ip: userip}, accurateTrackBounce:true, webvisor:true }); ..//..//..

Этот же 2-ой вариант можно сделать напрямую в GTM, через Пользовательский тег HTML с тригером на All Pages, например так:

<!-- получаем ip адрес --> <script type="text/javascript">var userip;</script> <script type="text/javascript" src="https://www.l2.io/ip.js?var=userip"></script> <!-- передаём параметр в подгруженную метрику --> <script> setTimeout(function() { if (!sessionStorage.userip) { ym(XXXXXXXX, 'userParams', { IP: userip }); sessionStorage.userip = userip; } console.log("IP:" + userip); }, 3000); </script>

3.) Без изменения кода метрики, с помощью подключения JS скрипта через GTM или напрямую через код сайта:

Основан на API сайта ipify.org

Третий вариант наиболее простой если вы используете GTM и например сайт у вас на Тильде или нет доступа к исходникам, или разработчик сайта тот ещё засранец и забил на ваши просьбы. Способ для тех кто хочет просто вставить код через GTM с минимальными движениями и забыть.

Настройка скрипта минимальна: вставляем номер счётчика, оборачиваем тело скрипта в теги <script></script> и добавляем в GTM через Пользовательский тег HTML с тригером на All Pages.

(function () { setTimeout(function() { /** * * USER IP FOR METRIKA v1.0 * * Автор: @redshood https://t.me/redshood * Канал: @redcasket https://t.me/redcasket * E-mail: costanies@ya.ru * * Скрипт передаёт пользовательский параметр с IP адресом в метрику * Для определения IP адреса посетителя используется GET запрос на публичный API https://api.ipify.org * * */ var settings = { IDmetrika: 77777777 // ИД Счетчика Метрики }; if (!sessionStorage.deviceIP) { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { var deviceIP = xmlHttp.responseText; ym(settings.IDmetrika, 'userParams', { IP: deviceIP }); console.log("IP: " + deviceIP); sessionStorage.deviceIP = deviceIP; } } xmlHttp.open("GET", "https://api.ipify.org", true); // true for asynchronous xmlHttp.send(null); } else { console.log("SessionStorage IP: " + sessionStorage.deviceIP); } }, 3000); /* Задержка запуска 3 секунды */ }());

P.S. В вебвизоре метрики не забываем добавить колонку с Параметрами посетителя.

Задать вопросы и быстро получить ответ можно в чате канала:

44
8 комментариев

Кажется в первом способе будет неправильно определяться адрес клиента за прокси. Можно попробовать так, но тоже без 100% гарантии

public function getUserHostAddress(){
if (!empty($_SERVER['HTTP_X_REAL_IP']))
{
$ip=$_SERVER['HTTP_X_REAL_IP'];
}
elseif (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}

1
Ответить

Первый способ самый распространенный я не стал его особо описывать. Но да, вы правы, если за proxy, например если на серваке связка apache+nginx то тут без HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR не обойтись для определения реального IP адреса.

Ответить

Тоже через php вставлял, хоть и не дружу с этим языком и разработчика не дёргал, нашел образец кода в поиске и заработало. Теперь зловредов по ip режу.

Ответить

У меня не получается.

Ответить

Спасибо! Второй способ помог.

Ответить

Спасибо, третий способ отлично подошел !

Ответить

У меня работает, но определяется примерно каждый 10-й IP адрес. Почему-то большинство не определяется.
Сайт на Тиьде. Ставила через GTM по третьему способу.

Ответить