Рассмотрим два варианта передачи IP посетителей сайта в Яндекс Метрику и Google Аналитику: через код счётчика или с помощью Google Tag Manager (GTM), а также возможные проблемы отслеживания IP.

Для определения IP посетителя, с которого он подключился к сайту, воспользуемся переменной окружения $_SERVER["REMOTE_ADDR"].

Нам необходимо добавить данную конструкцию в скрипт счётчиков.

<?php echo $_SERVER["REMOTE_ADDR"]; ?>

Как это правильно сделать, читаем далее.

Настраиваем специальный параметр в Google Аналитике

Для начала создайте специальный параметр с помощью которого вы будете отслеживать IP посетителя в Google Аналитике.

Перейдите в Google Аналитику и откройте «Администратор > Пользовательские определения > Специальные параметры». Нажмите кнопку «+Специальный параметр». Добавьте название параметра — «UserIP». Область действия — «Сеанс», поставьте галочку «Активно» и сохраните. Запомните индекс этого специального параметра.

Передаём IP посетителя через глобальный тег gtag.js
Добавление специального параметра. Как видно на скриншоте справа, индекс параметра 5 (dimension5). У вас будет своя нумерация.

Теперь переходим к настройке счётчика.

Передаём 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». Установите тип триггера «Специальное событие». Условие активации — «Все специальные события». Сохраните.

Триггер "IPevent"

Далее создайте переменную с именем «UserIP», версия 2 и сохраните.

Переменная "UserIP"

Переходим к созданию тега. Если вы используете GTM, наверняка, у вас уже настроена переменная {{Google Analytics}} и создан стандартный тег Google Analytics. Теперь создайте ещё один тег, назовите его произвольно, например «GA+UserIP».

  • Выберите «Тип тега — Google Analytics» > «Тип отслеживания — Событие» > «Категория — IP» > «Действие — Sent» > «Не взаимодействие — True» > «Настройки Google Аналитики — переменная Google Analytics».
  • Отметьте «Включить переопределение настроек в этом теге».
  • Раскройте «Специальные параметры».
  • Установите «Индекс» (dimension) специального параметра, который был присвоен в настройках Google Аналитики.
  • В поле «Значение параметра» выберите переменную UserIP.
  • Раскройте «Расширенные настройки» > «Настройки активации тега» и установите «Один раз на событие».
  • В качестве триггера активации выберите «IPevent» и сохраните.
тег Google Analytics
Дополнительный тег Google Analytics со специальным параметром UserIP

Для отслеживания 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 посетителя в Google Аналитике

Нюансы отслеживания 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 для них не подходит.

Оставьте комментарий

Комментарии, считающиеся спамом или исключительно рекламные по своему содержанию, будут удалены. Допускается включение ссылки на соответствующий контент, но текст должен иметь отношение к теме поста. Также будут удалены анонимные, оскорбительные, содержащие ненормативную лексику, вводящие в заблуждение или клеветнические комментарии.

Для публикации кода в комментариях используйте следующие шорткоды -
[php]ваш код[/php] - для PHP, [css]ваш код[/css] - для CSS, [code lang="js"]ваш код[/code] - для HTML или JS, указав соответствующий lang.

Ваш адрес email не будет опубликован. Обязательные поля помечены *