Как узнать ip в Яндекс метрике? Есть решение

Сегодня увидел в метрике что мою рекламу в директе скликивают какие-то пи....сы...!!!! Яндекс в своей метрике закрыл ip посетителей сайта(oставил только название сети) ,поэтому увидеть ip и забанить не получается. В интернете нашел код который встраивается в счетчик,чтобы видеть ip клиента, но он не работает. Возможно его надо допилить. Может кто сталкивался с такой проблемой и знает как её решить? Помогите

Пример кода

<!— Yandex.Metrika counter —>
<script type=»text/javascript»>
var yaParams = {ip_adress: «<? echo $_SERVER[‘REMOTE_ADDR’];?>»};
//объявляем параметр ip_adress и записываем в него IP посетителя
</script>
<script type=»text/javascript»>
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounterXXXX = new Ya.Metrika({id:XXXXX,
webvisor:true,
params:window.yaParams,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true});
} catch(e) { }
});

var n = d.getElementsByTagName(«script»)[0],
s = d.createElement(«script»),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = «text/javascript»;
s.async = true;
s.src = (d.location.protocol == «https:» ? «https:» : «http:») + «//mc.yandex.ru/metrika/watch.js»;

if (w.opera == «[object Opera]») {
d.addEventListener(«DOMContentLoaded», f, false);
} else { f(); }
})(document, window, «yandex_metrika_callbacks»);
</script>
<noscript><div><img src=»//mc.yandex.ru/watch/22859041″ style=»position:absolute; left:-9999px;» alt=»» /></div></noscript>

<!— /Yandex.Metrika counter —>

6 ответов

  • 2
    Алексей Webasyst 28 ноября 2015 16:09 # Решение
    В шаблоне будет примерно так:

    var yaParams = {ip_adress: "{/literal}{$smarty.server.REMOTE_ADDR}{literal}"};

    и далее по тексту.

    • +1
      Игорь Игорь 27 марта 2016 06:59 #

      Но даже при подключенном CloudFlare в заказах все равно отображается два IP, реальный IP посетителя и проски, магазин обращается на какой то сторонний сервис чтобы узнать реальный IP? Как самому сделать так же чтобы передавать в метрику реальный IP?

    • +1
      Игорь Игорь 28 марта 2016 15:32 #

      "Спасибо" вы были так любезны что ответ нашел сам в системном коде движка.

    • +1
      admin admin 4 февраля 2017 15:08 #

      Вставил в index/html в метрику var yaParams = {ip_adress: "{/literal}{$smarty.server.REMOTE_ADDR}{literal}"}; и params:window.yaParams, не заработало, сайт накрылся. Что я сделал не так?

  • 3
    Алексей Дорошенко 29 ноября 2015 12:18 #

    сегодня целый день мониторил метрику - там почему-то показываются ip в двух диапазонах - 162.158..... и 141.101... хотя показывает что с разных городов. Может где-то ошибка в коде?

    • +1
      Игорь Игорь 27 марта 2016 06:59 #

      У вас подключен CloudFlare он работает как посредник прокси между посетителем и сервером вот и выводит ip адрес не посетителя а прокси CloudFlare.

      Но даже при подключенном CloudFlare в заказах все равно отображается два IP, реальный IP посетителя и проски, магазин обращается на какой то сторонний сервис чтобы узнать реальный IP? Как самому сделать так же чтобы передавать в метрику реальный IP?

    • +1
      Игорь Игорь 28 марта 2016 16:28 #

      Для того чтобы увидеть IP за прозрачным прокси например CloudFlare нужно создать пользовательский класс в папке: wa-apps/shop/lib/classes, имя например: shopMetrikaIP.class.php следующего содержания:

      <?php
      
      class shopMetrikaIP
      {
      
          public static function MetrikaIP($get_as_int = false) //имя метода может быть произвольным
          {
              if (getenv('HTTP_X_FORWARDED_FOR')) {
                  $ip = getenv('HTTP_X_FORWARDED_FOR');
              } else {
                  $ip = getenv('REMOTE_ADDR');
              }
              if ($get_as_int) {
                  $ip = ip2long($ip);
                  if ($ip > 2147483647) {
                      $ip -= 4294967296;
                  }
              }
              return $ip;
          } 
      
      }

      для того чтобы подключить в месте подключения прописать: var yaParams = {ip: "{/literal}{shopMetrikaIP::MetrikaIP()}{literal}"};

      И радуемся жизни!!!

      • +2
        Алексей Алексей Webasyst 28 марта 2016 16:52 #

        А если попробовать без класса var yaParams = {ip_adress: "{/literal}{$smarty.server.HTTP_X_FORWARDED_FOR|default:$smarty.server.REMOTE_ADDR}{literal}"}; ?

        • +1
          Игорь Игорь 29 марта 2016 11:52 #

          Так тоже работает, так проще и быстрей, спасибо

        • +1
          admin admin 4 февраля 2017 15:10 #

          После первого варианта "Вставил в index/html в метрику var yaParams = {ip_adress: "{/literal}{$smarty.server.REMOTE_ADDR}{literal}"}; и params:window.yaParams, не заработало, сайт накрылся."

          Вставил в index/html в метрику var yaParams = {ip_adress: "{/literal}{$smarty.server.HTTP_X_FORWARDED_FOR|default:$smarty.server.REMOTE_ADDR}{literal}"}; и params:window.yaParams, тоже не заработало, сайт опять накрылся.

          Подскажите как правильно сделать. Очень надо т.к. боты одолели.

        • +1
          Ольга Волкова Ольга Волкова 9 ноября 2017 18:04 #

          Алексей можете пример кода выложить, если не трудно с последовательностью этапов?

          "создать пользовательский класс в папке: wa-apps/shop/lib/classes, имя например: shopMetrikaIP.class.php"

          Перепробовав все вышеперечисленные варианты, ничего не работает, в итоге два дня бесполезных попыток и потеря времени.

          Заранее спасибо.

  • 2
    Александра 13 июня 2016 00:15 #

    чето ничего не помогает. php вообще работает на шопскрипте? насколько я понимаю при нажатии Ctrl+U должен показываться айпи адрес, но ничего не отрабатывается... кто поможет?

    в head добавила:

    <script>var yaParams = {his_ip: "<? echo $_SERVER['REMOTE_ADDR'];?>"};</script><script type="text/javascript">

    в код метрики добавила строчку:

    params:yaParams,


    Но не работает

  • 2
    Денис Костин 21 мая 2017 00:44 #

    Я, конечно, не профи, но самым, пожалуй, простым методом является внутренняя функция Webasyst {waRequest::getIp()} с помощью которой удалось без труда получать корректные ip пользователей и передавать их в метрику.

    Первый вариант кода


    <!-- Yandex.Metrika counter --> 
    <script src="https://mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>
    <script type="text/javascript">
    
    <!-- вставка 1 -->
    var getIp='{waRequest::getIp()}',
          yaParams = new Object({
          usrIP: window.getIp
        });
    <!-- /вставка 1 -->
    
    try { 
    var yaCounterXXXXXX = new Ya.Metrika({ 
    id:XXXXXX,
    clickmap:true, 
    trackLinks:true, 
    accurateTrackBounce:true, 
    webvisor:true 
    });
    
    <!-- вставка 2 -->
    yaCounterXXXXXX.params(window.yaParams);
    <!-- /вставка 2 -->
    
    } catch(e) { }
    </script>
    <noscript>
    <div><img src="https://mc.yandex.ru/watch/XXXXXX" style="position:absolute; left:-9999px;" alt="" /></div>
    </noscript> 
    <!-- /Yandex.Metrika counter -->

    При этом, мы создаём переменную с ip юзера, далее передаём её в объект, который корректно отправляется в метрику (инструкция API метрики).

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

    <script>
    var getIp='{waRequest::getIp()}';
    </script>
    <!DOCTYPE html>
    ............

    в самом верху документа, но не забываем изменить начало участка кода метрики на вот такой


    <!-- Yandex.Metrika counter --> 
    <script src="https://mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>
    <script type="text/javascript">
    var yaParams = new Object({
          usrIP: window.getIp
        });
    .............

    чтобы не нарушить синтаксис js в коде и избежать конфликтов, если используется сжатие скриптов на сайте.

    В конечном итоге, я получил вот что:


  • 2
    Дмитрий Романовский 19 сентября 2017 14:25 #

    Делаете в разделе Сайт Блок "Metrika.Counter" вида ниже и добавляете в head.all.html как

    {$wa->block("Metrika.Counter")}

    ну и свой Номер счетчика укажите



    <!-- IP visitor -->
    <script type="text/javascript">
        var getIp='{waRequest::getIp()|escape:'javascript'}';
    </script>
    <!-- /IP visitor -->
    
    
    
    <!-- Yandex.Metrika counter -->
    {literal}
    <script type="text/javascript">
    var yaParams = {ip_adress: getIp};
    </script>
    
    <script type="text/javascript" >
        (function (d, w, c) {
            (w[c] = w[c] || []).push(function() {
                try {
                    w.yaCounter45844686 = new Ya.Metrika({
                        id:45844686,
                        clickmap:true,
                        trackLinks:true,
                        accurateTrackBounce:true,
                        webvisor:true,
    
                        params:window.yaParams,
    
                        ecommerce:"dataLayer"
                    });
                } catch(e) { }
            });
    
            var n = d.getElementsByTagName("script")[0],
                s = d.createElement("script"),
                f = function () { n.parentNode.insertBefore(s, n); };
            s.type = "text/javascript";
            s.async = true;
            s.src = "https://mc.yandex.ru/metrika/watch.js";
    
            if (w.opera == "[object Opera]") {
                d.addEventListener("DOMContentLoaded", f, false);
            } else { f(); }
        })(document, window, "yandex_metrika_callbacks");
    </script>
    <noscript><div><img src="https://mc.yandex.ru/watch/45844686" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
    {/literal}
    <!-- /Yandex.Metrika counter -->
    • +1
      Дмитрий Романовский Дмитрий Романовский 16 ноября 2017 18:26 #
      <!-- Передача IP и Имени посетителя, если он авторизовался -->
      
      {$Auth_User = $wa->user()->getName()}
      {$is_ip = waRequest::getIp()}
      
      {literal}
      <!-- Yandex.Metrika counter -->
      <script type="text/javascript">
          var yaParams = {ip_adress: {/literal}'{$is_ip|escape:'javascript'}'{if !empty($Auth_User)}, AuthUser: '{$Auth_User|escape:'javascript'}'{/if}{literal}};
      </script>
      
      
      <script type="text/javascript" >
          (function (d, w, c) {
              (w[c] = w[c] || []).push(function() {
                  try {
                      w.yaCounter45844686 = new Ya.Metrika({
                          id:45844686,
                          clickmap:true,
                          trackLinks:true,
                          accurateTrackBounce:true,
                          webvisor:true,
      
                          params:window.yaParams,
      
                          ecommerce:"dataLayer"
                      });
                  } catch(e) { }
              });
      
              var n = d.getElementsByTagName("script")[0],
                  s = d.createElement("script"),
                  f = function () { n.parentNode.insertBefore(s, n); };
              s.type = "text/javascript";
              s.async = true;
              s.src = "https://mc.yandex.ru/metrika/watch.js";
      
              if (w.opera == "[object Opera]") {
                  d.addEventListener("DOMContentLoaded", f, false);
              } else { f(); }
          })(document, window, "yandex_metrika_callbacks");
      </script>
      {/literal}
      <noscript><div><img src="https://mc.yandex.ru/watch/45844686" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
      <!-- /Yandex.Metrika counter -->
      
  • 1
    Ольга Волкова 9 ноября 2017 16:43 #

    Дмитрий подскажите пожалуйста где искать файл head.all.html? Нет его нигде) Пробовала новый файл такой создать и в него вставить код блока {$wa->block("Metrika.Counter")}, и index, не работает( Тема дизайна «Дефолт 3.0» 3.2.7. На Вас последняя надежда) много разных вариантов пробовала, и не получается ни что((( . Заранее спасибо.

    • +1
      Дмитрий Романовский Дмитрий Романовский 16 ноября 2017 18:23 #

      У нас тема дизайна Тема дизайна «Удобная Покупка» 2.2.2

      Если смотреть в панели управления то Сайт - Дизайн - Шаблоны

      Если через файл-менеджер то wa-data/public/site/themes/comfortbuy/

      Но у вас другая тема...

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите