Расширенный код Google Analytics для расшифровки _openstat

Расширенный код Google Analytics для расшифровки _openstat

При размещении контекстной рекламы в Яндекс.Директ зачастую возникает проблема невозможности использования автоматической пометки кампаний через _openstat. В результате приходится помечать кампании вручную, используя UTM-метки. Данная модификация скрипта позволяет использовать автоматическую пометку кампаний в Яндекс.Директ совместно с отслеживанием Google Analytics.

Алгоритм работы скрипта

  1. Берётся значение метки _openstat.
  2. Происходит декодирование.
  3. В код Google Analytics подставляется строка со значениями UTM.

Варианты внедрения

  1. Модификация кода Google Analytics.
  2. Модификация кода Universal Analytics.
  3. Через Google Tag Manager (GTM).

Инструкции по внедрению

Google Analytics

  1. Возьмите представленный ниже фрагмент кода:
  2. Показать

    <!-- Google Analytics openstat code by Netpeak start -->
    <script type="text/javascript">
        var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-XXXXXX-X']);
        var OpenStatParser = {
            _params: {},
            _parsed: false,
            _decode64: function(data) {
                if (typeof window['atob'] === 'function') {
                    return atob(data);
                }
    
                var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
                var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
                    ac = 0,
                    dec = "",
                    tmp_arr = [];
    
                if (!data) {
                    return data;
                }
    
                data += '';
    
                do {
                    h1 = b64.indexOf(data.charAt(i++));
                    h2 = b64.indexOf(data.charAt(i++));
                    h3 = b64.indexOf(data.charAt(i++));
                    h4 = b64.indexOf(data.charAt(i++));
    
                    bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
    
                    o1 = bits >> 16 & 0xff;
                    o2 = bits >> 8 & 0xff;
                    o3 = bits & 0xff;
    
                    if (h3 == 64) {
                        tmp_arr[ac++] = String.fromCharCode(o1);
                    } else if (h4 == 64) {
                        tmp_arr[ac++] = String.fromCharCode(o1, o2);
                    } else {
                        tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
                    }
                } while (i < data.length);
    
                dec = tmp_arr.join('');
    
                return dec;
            },
            _parse: function() {
                var prmstr = window.location.search.substr(1);
                var prmarr = prmstr.split('&');
                this._params = {};
    
                for (var i = 0; i < prmarr.length; i++) {
                    var tmparr = prmarr[i].split('=');
                    this._params[tmparr[0]] = tmparr[1];
                }
    
                this._parsed = true;
            },
            hasMarker: function() {
                if (!this._parsed) {
                    this._parse();
                }
                return (typeof this._params['_openstat'] !== 'undefined') ? true : false;
            },
            buildCampaignParams: function() {
                if (!this.hasMarker()) {
                    return false;
                }
                var openstat = this._decode64(this._params['_openstat']);
                var statarr = openstat.split(';');
                return 'utm_campaign=' + statarr[1] + '&utm_source=' + statarr[0] + '&utm_medium=cpc&utm_content=' + statarr[2];
            }
        }
        if (OpenStatParser.hasMarker()) {
            var campaignParams = OpenStatParser.buildCampaignParams();
            if (campaignParams !== false) {
                _gaq.push(['_set', 'campaignParams', campaignParams]);
            }
        }
        _gaq.push(['_addOrganic', 'images.yandex.ru', 'text']);
        _gaq.push(['_addOrganic', 'blogs.yandex.ru', 'text']);
        _gaq.push(['_addOrganic', 'video.yandex.ru', 'text']);
        _gaq.push(['_addOrganic', 'yandex.ru', 'text']);
        _gaq.push(['_addOrganic', 'yandex.ru', 'query']);
        _gaq.push(['_addOrganic', 'images.yandex.ua', 'text']);
        _gaq.push(['_addOrganic', 'blogs.yandex.ua', 'text']);
        _gaq.push(['_addOrganic', 'video.yandex.ua', 'text']);
        _gaq.push(['_addOrganic', 'yandex.ua', 'text']);
        _gaq.push(['_addOrganic', 'yandex.ua', 'query']);
        _gaq.push(['_addOrganic', 'images.yandex', 'text']);
        _gaq.push(['_addOrganic', 'blogs.yandex', 'text']);
        _gaq.push(['_addOrganic', 'video.yandex', 'text']);
        _gaq.push(['_addOrganic', 'yandex', 'text']);
        _gaq.push(['_addOrganic', 'yandex', 'query']);
        _gaq.push(['_addOrganic', 'go.mail.ru', 'q']);
        _gaq.push(['_addOrganic', 'mail.ru', 'q']);
        _gaq.push(['_addOrganic', 'images.google.ru', 'q']);
        _gaq.push(['_addOrganic', 'maps.google.ru', 'q']);
        _gaq.push(['_addOrganic', 'google.com.ua', 'q']);
        _gaq.push(['_addOrganic', 'rambler.ru', 'words']);
        _gaq.push(['_addOrganic', 'nova.rambler.ru', 'query']);
        _gaq.push(['_addOrganic', 'nova.rambler.ru', 'words']);
        _gaq.push(['_addOrganic', 'gogo.ru', 'q']);
        _gaq.push(['_addOrganic', 'nigma.ru', 's']);
        _gaq.push(['_addOrganic', 'search.qip.ru', 'query']);
        _gaq.push(['_addOrganic', 'webalta.ru', 'q']);
        _gaq.push(['_addOrganic', 'sm.aport.ru', 'r']);
        _gaq.push(['_addOrganic', 'meta.ua', 'q']);
        _gaq.push(['_addOrganic', 'search.bigmir.net', 'z']);
        _gaq.push(['_addOrganic', 'search.i.ua', 'q']);
        _gaq.push(['_addOrganic', 'index.online.ua', 'q']);
        _gaq.push(['_addOrganic', 'web20.a.ua', 'query']);
        _gaq.push(['_addOrganic', 'search.ukr.net', 'q']);
        _gaq.push(['_addOrganic', 'search.ukr.net', 'search_query']);
        _gaq.push(['_addOrganic', 'search.com.ua', 'q']);
        _gaq.push(['_addOrganic', 'search.ua', 'q']);
        _gaq.push(['_addOrganic', 'poisk.ru', 'text']);
        _gaq.push(['_addOrganic', 'go.km.ru', 'sq']);
        _gaq.push(['_addOrganic', 'liveinternet.ru', 'ask']);
        _gaq.push(['_addOrganic', 'gde.ru', 'keywords']);
        _gaq.push(['_addOrganic', 'affiliates.quintura.com', 'request']);
        _gaq.push(['_addOrganic', 'akavita.by', 'z']);
        _gaq.push(['_addOrganic', 'search.tut.by', 'query']);
        _gaq.push(['_addOrganic', 'all.by', 'query']);
        _gaq.push(['_trackPageview']);
    
        (function() {
            var ga = document.createElement('script');
            ga.type = 'text/javascript';
            ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(ga, s);
        })();
        window.onload = function() {
            if(_gaq.I==undefined){
                _gaq.push(['_trackEvent', 'tracking_script', 'loaded', 'ga.js', ,true]);
                ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
                ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
                s = document.getElementsByTagName('script')[0];
                gaScript = s.parentNode.insertBefore(ga, s);
            } else {
                _gaq.push(['_trackEvent', 'tracking_script', 'loaded', 'dc.js', ,true]);
            }
        };
    </script>
    <!-- Google Analytics openstat code by Netpeak end -->
  3. Измените UA-XXXXX-X на соответствующий вашему сайту идентификатор.
  4. Замените текущий код Google Analytics на вашем сайте тем, который вы сформировали выше.
  5. Не забудьте, что код Google Analytics должен располагаться непосредственно перед закрывающим тегом head.

Universal Analytics

  1. Возьмите представленный ниже фрагмент кода:
  2. Показать

    <!-- Google Universal Analytics openstat code by Netpeak start -->
    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    
        ga('create', 'UA-XXXXXX-X');
        var OpenStatParser = {
            _params: {},
            _parsed: false,
            _decode64: function(data) {
                if (typeof window['atob'] === 'function') {
                    return atob(data);
                }
    
                var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
                var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
                    ac = 0,
                    dec = "",
                    tmp_arr = [];
    
                if (!data) {
                    return data;
                }
    
                data += '';
    
                do {
                    h1 = b64.indexOf(data.charAt(i++));
                    h2 = b64.indexOf(data.charAt(i++));
                    h3 = b64.indexOf(data.charAt(i++));
                    h4 = b64.indexOf(data.charAt(i++));
    
                    bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
    
                    o1 = bits >> 16 & 0xff;
                    o2 = bits >> 8 & 0xff;
                    o3 = bits & 0xff;
    
                    if (h3 == 64) {
                        tmp_arr[ac++] = String.fromCharCode(o1);
                    } else if (h4 == 64) {
                        tmp_arr[ac++] = String.fromCharCode(o1, o2);
                    } else {
                        tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
                    }
                } while (i < data.length);
    
                dec = tmp_arr.join('');
    
                return dec;
            },
            _parse: function() {
                var prmstr = window.location.search.substr(1);
                var prmarr = prmstr.split('&');
                this._params = {};
    
                for (var i = 0; i < prmarr.length; i++) {
                    var tmparr = prmarr[i].split('=');
                    this._params[tmparr[0]] = tmparr[1];
                }
    
                this._parsed = true;
            },
            hasMarker: function() {
                if (!this._parsed) {
                    this._parse();
                }
                return (typeof this._params['_openstat'] !== 'undefined') ? true : false;
            },
            buildCampaignParams: function() {
                if (!this.hasMarker()) {
                    return false;
                }
                var openstat = this._decode64(this._params['_openstat']);
                var statarr = openstat.split(';');
                utmcampaign = statarr[1];
                utmsource = statarr[0];
                utmcontent = statarr[2];
            }
        }
        if (OpenStatParser.hasMarker()) {
            var campaignParams = OpenStatParser.buildCampaignParams();
            if (campaignParams !== false) {
                ga('set', {'campaignName': utmcampaign, 'campaignSource': utmsource, 'campaignMedium': 'cpc', 'campaignContent': utmcontent});
            }
        }
        ga('send', 'pageview');
    </script>
    <!-- Google Universal Analytics openstat code by Netpeak end -->
  3. Измените UA-XXXXX-X на соответствующий вашему сайту идентификатор.
  4. Замените текущий код Google Universal Analytics на вашем сайте тем, который вы сформировали выше.
  5. Не забудьте, что код Google Analytics должен располагаться непосредственно перед закрывающим тегом head.

Google Tag Manager (GTM)

  1. В стандартном теге Universal Analytics добавьте exception для страниц, в URL которых содержится _openstat:
  2. Шаг 1 по установке расширенного кода Google Universal Analytics для расшифровки _openstat через Google Tag Manager (GTM)
  3. Создайте тег Custom HTML со следующим содержимым (правило активации тега — наш триггер о наличии _openstat в URL):
  4. Показать

    <!-- Google Universal Analytics openstat code via GTM by Netpeak start -->
    <script type="text/javascript">
    var OpenStatParser = {
      _params: {},
      _parsed: false,
      _decode64: function (data) {
        if (typeof window['atob'] === 'function') {
          return atob(data);
        }
    
        var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
          ac = 0,
          dec = "",
          tmp_arr = [];
    
        if (!data) {
          return data;
        }
    
        data += '';
    
        do {
          h1 = b64.indexOf(data.charAt(i++));
          h2 = b64.indexOf(data.charAt(i++));
          h3 = b64.indexOf(data.charAt(i++));
          h4 = b64.indexOf(data.charAt(i++));
    
          bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
    
          o1 = bits >> 16 & 0xff;
          o2 = bits >> 8 & 0xff;
          o3 = bits & 0xff;
    
          if (h3 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1);
          } else if (h4 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1, o2);
          } else {
            tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
          }
        } while (i < data.length);
    
        dec = tmp_arr.join('');
    
        return dec;
      },
      _parse: function () {
        var prmstr = window.location.search.substr(1);
        var prmarr = prmstr.split('&');
        this._params = {};
    
        for (var i = 0; i < prmarr.length; i++) {
          var tmparr = prmarr[i].split('=');
          this._params[tmparr[0]] = tmparr[1];
        }
    
        this._parsed = true;
      },
      hasMarker: function () {
        if (!this._parsed) {
          this._parse();
        }
        return (typeof this._params['_openstat'] !== 'undefined') ? true : false;
      },
      buildCampaignParams: function () {
        if (!this.hasMarker()) {
          return false;
        }
        var openstat = this._decode64(this._params['_openstat']);
        var statarr = openstat.split(';');
        utmcampaign = statarr[1];
        utmsource = statarr[0];
        utmcontent = statarr[2];
      }
    }
    if (OpenStatParser.hasMarker()) {
      var campaignParams = OpenStatParser.buildCampaignParams();
      if (campaignParams !== false) {
        dataLayer.push({'campaignName': utmcampaign, 'campaignSource': utmsource, 'campaignMedium': 'cpc', 'campaignContent': utmcontent, 'event': 'openStatParsed'});
      }
    }
    </script>
    <!-- Google Universal Analytics openstat code via GTM by Netpeak -->
  5. Создайте 3 переменные — campaignContent, campaignName и campaignSource:
  6. Создайте триггер openStatParsed:
  7. Шаг 5 по установке расширенного кода Google Universal Analytics для расшифровки _openstat через Google Tag Manager (GTM)
  8. Создайте тег Universal Analytics на просмотр страницы (триггер активации — openStatParsed).
  9. В настройках задайте fields to set:

    Шаг 6 по установке расширенного кода Google Universal Analytics для расшифровки _openstat через Google Tag Manager (GTM)
  10. Сохраните, создайте и опубликуйте версию. Все остальные настройки выбирайте по желанию и необходимости: к примеру, можете указать настройку «Enable Display Advertising Features», которая включает сбор данных для КМС (контекстно-медийной сети Google).

Понравилась наша разработка? Поделитесь ей в социальных сетях:

Наши особенности

  • Мы чётко фокусируемся на предоставлении услуг в сфере SEO и PPC, чтобы стать лучшими в мире в умении добиваться результата от этих инструментов интернет-маркетинга
  • Мы предлагаем уникальные продукты на рынке — [SEO 2.0] и [PPC 2.0]
  • Мы ориентированы показать положительную отдачу от вложенных средств в SEO и PPC
  • Более 1000 проектов доверили нам свои сайты
  • Netpeak стремится стать ведущим международным агентством на мировой арене
  • Мы разработали уникальный сервис «Личный Кабинет клиента Netpeak», который помогает бизнесу принимать решения, основываясь на чётком наборе ключевых показателей эффективности

Мы делаем прибыльнее бизнес наших клиентов

Новое на Блоге Netpeak

30.08.2016

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

26.08.2016

С новым блогом!

23.08.2016

Как создавать результативные кампании в Рекламной сети Яндекса

18.08.2016

Зачем бизнесу создавать прогрессивные веб-приложения и почему именно сейчас?