Рассмотрим два варианта передачи IP посетителей сайта в Яндекс Метрику и Google Аналитику: через код счётчика или с помощью Google Tag Manager (GTM), а также возможные проблемы отслеживания IP.
Для определения IP посетителя, с которого он подключился к сайту, воспользуемся переменной окружения $_SERVER["REMOTE_ADDR"].
Нам необходимо добавить данную конструкцию в скрипт счётчиков.
<?php echo $_SERVER["REMOTE_ADDR"]; ?>
Как это правильно сделать, читаем далее.
Настраиваем специальный параметр в Google Аналитике
Для начала создайте специальный параметр с помощью которого вы будете отслеживать IP посетителя в Google Аналитике.
Перейдите в Google Аналитику и откройте «Администратор > Пользовательские определения > Специальные параметры». Нажмите кнопку «+Специальный параметр». Добавьте название параметра — «UserIP». Область действия — «Сеанс», поставьте галочку «Активно» и сохраните. Запомните индекс этого специального параметра.

Теперь переходим к настройке счётчика.
Передаём IP посетителя через глобальный тег gtag.js
Отредактируем код счётчика аналитики и присвоим значение специального параметра с нужным индексом (dimension) с помощью параметра custom_map. Вместо UA-1111111-1 вставьте свой номер счётчика. Не забудьте указать свой номер dimension.
gtag('config', 'UA-1111111-1', {
'custom_map': {
'dimension5': 'UserIP'
}
});
Добавим команду event которая отправит пользовательское событие в аналитику, назовём его — «IP». А также добавим параметр события «UserIP» который и будет содержать IP посетителя.
gtag('event','IP', {'UserIP':"<?php echo $_SERVER["REMOTE_ADDR"]; ?>"});
Вот как выглядит код счётчика после редактирования:
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-1111111-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-1111111-1', {
'custom_map': {
'dimension5': 'UserIP'
}
});
gtag('event','IP', {'UserIP':"<?php echo $_SERVER["REMOTE_ADDR"]; ?>"});
</script>
Скопируйте и вставьте код счётчика на сайт обычным способом, желательно в тег head.
Передаём IP посетителя в Яндекс Метрику
Яндекс Метрика позволяет отображать в отчётах произвольный набор данных — «Параметры визита», которые нужно указать в параметре params.
В данном случае, будем передавать объект — «IP».
var yaParams = {ip_adress:"<?php echo $_SERVER["REMOTE_ADDR"]; ?>"};
ym(11111111, "init", { params:window.yaParams||{}, clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true });
Вот как выглядит код Метрики после редактирования. Вместо 11111111 укажите свой номер счётчика.
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
var yaParams = {ip_adress:"<?php echo $_SERVER["REMOTE_ADDR"]; ?>"};
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js", "ym");
ym(11111111, "init", {
params:window.yaParams||{},
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/11111111" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
Скопируйте и вставьте код на сайт обычным способом, желательно в тег head.
Передаём IP посетителя в Яндекс Метрику и Google Аналитику с помощью Google Tag Manager (GTM)
Данный способ подходит тем, кто использует Google Tag Manager для размещения счётчиков Яндекс Метрики и Google Аналитики.
После настройки специального параметра, о котором говорилось в начале статьи, разместите на сайте в теге head следующий код уровня данных (Data layer), обязательно над кодом GTM.
<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'IPevent',
'UserIP': '<?php echo $_SERVER["REMOTE_ADDR"]; ?>'
});
</script>
Data Layer позволяет отправлять определённые данные, которые GTM не может получить сам. Здесь мы создали команду event с именем «IPevent» которая отправит в Google Аналитику пользовательское событие «UserIP» с IP адресом посетителя.
Теперь перейдите в аккаунт Google Tag Manager и создайте триггер с именем «IPevent». Установите тип триггера «Специальное событие». Условие активации — «Все специальные события». Сохраните.
Далее создайте переменную с именем «UserIP», версия 2 и сохраните.
Переходим к созданию тега. Если вы используете GTM, наверняка, у вас уже настроена переменная {{Google Analytics}} и создан стандартный тег Google Analytics. Теперь создайте ещё один тег, назовите его произвольно, например «GA+UserIP».
- Выберите «Тип тега — Google Analytics» > «Тип отслеживания — Событие» > «Категория — IP» > «Действие — Sent» > «Не взаимодействие — True» > «Настройки Google Аналитики — переменная Google Analytics».
- Отметьте «Включить переопределение настроек в этом теге».
- Раскройте «Специальные параметры».
- Установите «Индекс» (dimension) специального параметра, который был присвоен в настройках Google Аналитики.
- В поле «Значение параметра» выберите переменную UserIP.
- Раскройте «Расширенные настройки» > «Настройки активации тега» и установите «Один раз на событие».
- В качестве триггера активации выберите «IPevent» и сохраните.

Для отслеживания IP через Яндекс Метрику мы будем использовать ту же переменную «UserIP», здесь триггер «IPevent» уже не нужен. IP адрес будет передаваться с сайта также с помощью кода Data Layer, т.е. ничего добавлять уже не надо, единственное, нужно отредактировать сам код счётчика Метрики.
Если у вас ещё нет тега Яндекс Метрики, то создайте новый тег, назовите его Yandex.Metrika. Выберите тип тега «Произвольный HTML». Теперь мы укажем параметры визита. Какие это параметры, мы рассмотрели в предыдущей главе этой статьи.
Но теперь в этом участке кода:
var yaParams = {ip_adress:"<?php echo $_SERVER["REMOTE_ADDR"]; ?>"};
укажем переменную UserIP:
var yaParams = {ip_adress: {{UserIP}}};
Так выглядит код Метрики после редактирования.
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
var yaParams = {ip_adress: {{UserIP}}};
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js", "ym");
ym(11111111, "init", {
params:window.yaParams||{},
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/11111111" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
В качестве триггера активации выберите «All pages Просмотр страницы». Сохраните.
Можете протестировать изменения перед публикацией или опубликовать сразу.
В каких отчётах смотреть IP адрес посетителя
После того, как вы опубликовали новую версию счётчиков с отслеживанием IP посетителей, данные в отчёты поступят через определённое время. В Google Аналитике информация отобразится практически сразу, а в Метрике она поступит с некоторой задержкой.
В Яндекс Метрике перейдите на вкладку «Вебвизор» или «Посетители и клиенты». Нажмите «Настроить столбцы». Отметьте галочкой «Параметры визитов» и сохраните. Теперь в таблице вы увидите столбец с IP адресом.
Чтобы посмотреть IP посетителя в Google Аналитике, перейдите в любой отчет и установите «Дополнительный параметр» — UserIP. После чего появится столбец с нужной информацией.
Нюансы отслеживания IP
Необходимо учесть, что при использовании кеширующего плагина на CMS, IP посетителя будет передаваться неправильно, поэтому обратитесь к инструкции или разработчикам плагина, чтобы попробовать исключить функцию определения IP из процесса кеширования.
Если посетитель вашего сайта использует VPN, то переменная будет содержать не его реальный IP адрес, а адрес прокси сервера. Определить IP за прокси практически нереально.
Если ваш сайт использует CDN, то иногда IP адреса могут определяться неправильно, если это произошло, попробуйте данную функцию определения IP.
<?php
function real_ip()
{
$ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
foreach ($matches[0] AS $xip) {
if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
$ip = $xip;
break;
}
}
} elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (isset($_SERVER['HTTP_CF_CONNECTING_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CF_CONNECTING_IP'])) {
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
} elseif (isset($_SERVER['HTTP_X_REAL_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_IP'])) {
$ip = $_SERVER['HTTP_X_REAL_IP'];
}
return $ip;
}
echo real_ip();
?>
Если вам необходимо вычислить IP посетителя чтобы отловить и заблокировать злых ботов или накрутчиков, то удобнее воспользоваться специальными сервисами позволяющими анализировать посещения, просмотр рекламы на сайте и блокировать некачественный трафик по различным источникам, типам визитов и прочим критериям. Для этих целей можем порекомендовать комплексную систему кибербезопасности Ботфактор. Получить продвинутую аналитику, проанализировать аудиторию и источники, обнаружить ботов поможет сервис Finteza. Кроме того, отследить IP посетителей позволяет счётчик посещаемости Liveinternet, особенно это удобно для AMP и турбо-страниц, т.к. описанный в статье способ передачи IP для них не подходит.



