Расширенный код 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

22.09.2016

Бывают случаи, когда код Google Analytics перестает вообще собирать статистику. Чтобы выявить сбой вовремя, обязательно настройте эти оповещения.

21.09.2016

Начинаем серию постов в режиме реалити-шоу о подробностях продвижения крупного игрока бизнеса email- и sms-рассылок — компании Unisender.

19.09.2016

В специфических сферах, например косметологии, привлечь потребителя впервые бывает сложнее и дороже, чем удержать его. Этот кейс о том, как повысить количество обращений новых клиентов с помощью видеорекламы.

16.09.2016

Короткая история Serpstat — от сервиса «для своих» до международной SEO-платформы.