Подтвердить что ты не робот

Отслеживать кампании с помощью Google Analytics без параметров строки запроса?

Поддерживается ли в Google Analytics отслеживание кампании без использования параметров строки запроса.

В Analytics вы можете пометить ссылку на свой сайт с параметрами строки запроса, такими как utm_campaign и utm_medium, которые содержат информацию о кампании, чтобы их можно было отслеживать.

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

Например, если StackOverflow рекламировал в Expert Exchange, у них может быть такая ссылка:

http://www.stackoverflow.com/?utm_source=expertexchange&utm_medium=banner&utm_campaign=a-better-expert-exchange

По многим причинам я не хочу, чтобы эти неуклюжие параметры выглядели в моих URL:

  • Я хочу поощрять щебетание, а длинные ссылки препятствуют этому.
  • Я не хочу, чтобы люди подписывали их с идентификаторами кампании в
  • Я хочу, чтобы люди видели чистый URL
  • Я не хочу, чтобы поисковые системы индексировали эти ссылки.
  • Я хочу получить полный контроль над тем, какие параметры отправлены в Google Analytics, и не оставлять его до моих партнеров, чтобы испортить URL-адреса, которые они получают на моем сайте, с помощью

Я посмотрел несколько минут назад, чтобы попытаться найти способ, в котором вы могли бы установить эти параметры. В Google есть страница, которая на первый взгляд выглядит как решение, но на самом деле это не так. На этой странице описано, как вы можете изменить имена параметров строки запроса на что-то еще - например, вместо utm_source вместо utm_source вы должны использовать

 pageTracker._setCampSourceKey("src");     

Я действительно не могу понять, почему они не позволяют просто явно установить значение ключа utm_source, а не просто установить для него альтернативное имя параметра.

Я помню, как некоторое время назад находил того, у кого был какой-то неприятный хак, но я даже не могу найти его сейчас. Кажется, я помню, что кто бы он ни был, взял копию кода аналитики и по существу отделил ее и взломал. Это не лучшее решение для меня!

существует официально поддерживаемый способ сделать это вообще, без каких-либо неприятных перенаправлений.

Вкратце я хочу сделать что-то вроде этого (сайт ASP.NET MVC). Дайте partnet ссылку на мой сайт с таким URL-адресом:

 http://www.example.com/?cid=2dae88a8-66b1-475d-8a35-2978bd1a158c

В контроллере для моей страницы MVC я узнаю, к какой кампании относится этот GUID, и задайте состояние модели. Примечание: это дает мне преимущество в том, что я могу изменить параметры кампании, не переиздавая URL-адрес.

В самой странице я бы сделал следующее:

var campaignMedium = <%= ViewData.Model.CampaignMedium %>;
var campaignSource = <%= ViewData.Model.CampaignSource %>;
var campaignName = <%= ViewData.Model.CampaignName %>;

pageTracker._setCampaignData({
    utm_source: campaignSource,
    utm_medium: campaignMedium,
    utm_campaignName: campaignName
});
pageTracker._trackPageview();

ВАЖНО: этот метод _setCampaignData НЕ ИСПОЛЬЗУЕТСЯ. Это просто "псевдокод" для того, что я в идеале хотел бы сделать.

Неужели кому-то удалось сделать что-нибудь подобное?

4b9b3361

Ответ 1

_set campaignParams

Ваша теоретическая "_setCampaignData", наконец, существует в форме ["_set","campaignParams",...]

Если у вас есть способ программно вводить значения, которые вы хотите установить (например, заданные cookie при перенаправлении или на стороне сервера и напечатанные на странице), вы можете использовать _set API для жесткого кодирования параметров кампании, которые вы хотите установить.

Формат для этого просто:

_gaq.push(['_set', 'campaignParams', 
'utm_campaign=CAMPAIGN&utm_source=SOURCE&utm_medium=MEDIUM']);

Итак, используя ваш оригинальный пример:

 var campaignMedium = <%= ViewData.Model.CampaignMedium %>;
 var campaignSource = <%= ViewData.Model.CampaignSource %>;
 var campaignName = <%= ViewData.Model.CampaignName %>;
 _gaq.push(['_set', 'campaignParams', 
'utm_campaign=' + campaignName +  '&utm_source=' + campaignSource +'&utm_medium=' + campaignMedium]);

Обновление 2017

Этот ответ подробно описывает, как это сделать с новой библиотекой Google Analytics, analytics.js/Universal Analytics.

Ответ 2

Török Gábor дал мне идею.
// ...
var campaignMedium = <%= ViewData.Model.CampaignMedium %>;
var campaignSource = <%= ViewData.Model.CampaignSource %>;
var campaignName = <%= ViewData.Model.CampaignName %>;

// save the old hash
var oldHash = document.location.hash;

// add campaign data to the hash
document.location.hash = 'utm_source=' + escape(campaignSource) + ...;
pageTracker._setAllowAnchor(true);
pageTracker._trackPageview();
// restore the old hash:
document.location.hash = oldHash;

Таким образом, вы можете создать данные кампании в бэкэнд, а затем динамически передать его в хеш, а затем восстановить его, даже не заметив его. То есть отслеживание кампании на 100% не зависит от реального URL.

Ответ 3

Решение, использующее push (['_set', 'campaignParams',...), похоже, работает только для устаревшей библиотеки ga.js.

Используя analytics.js, вам нужно указать параметр кампании отдельно. Например

ga('set', 'campaignName', 'TheCampaignName...');
ga('set', 'campaignSource', 'someCampaignSource');
ga('set', 'campaignMedium', 'email');

https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#campaignName

Ответ 4

В API Trackin есть функция _setAllowAnchor, которая позволяет вам указывать теги в тексте привязки вместо параметров запроса.

pageTracker._setAllowAnchor(true);

Итак, вы можете использовать http://www.stackoverflow.com/#utm_source=expertexchange, и GA это поймет. Таким образом, вы можете избежать проблемы с SEO.

Для проблемы Twitter я предлагаю вам метод, описанный в post Отслеживание Twitter и Сокращение URL-адресов в Google Analytics.

Ответ 5

Я разместил это на справочном форуме Google.

Google, пожалуйста, прочитайте!!! Отличная возможность для улучшения!!! Это приводит к тому, что многие пользователи не могут использовать параметры рекламы. Разрешить чтение параметров рекламы с URL-адреса, используемого в trackPageview (url).

В любом случае, без этой возможности, мне пришлось использовать обход. Вместо добавления параметров к URL. Я временно добавил их в URL как закладку. Затем я удалил их после вызова trackPageview. Добавив их в качестве закладки, страница не перезагружается. См. Следующий пример.

var pageTracker = _gat._getTracker(param);
var orighash = document.location.hash;
if (orighash == "") {
    orighash = "none";  // this is done to prevent page scrolling
}
document.location.hash = 'utm_source='+source+'&utm_campaign='+campaign+'&utm_medium='+medium+'&utm_content='+content;
pageTracker._setAllowAnchor(true);
pageTracker._trackPageview();
document.location.hash = orighash

Ответ 6

Ниже приведен обновленный способ сделать это, используя универсальный метод отслеживания событий Google Analytics Universal, а не отслеживание стандартных событий Google.

Вся строка UTM может быть извлечена из queryString (когда есть) или вытащена из файла cookie Google (__utmz), а затем передана в Google Analytics, используя приведенный ниже код.

ga('send', 'event', 'queryString', 'getQueryString', googleString ); 

Затем, после выполнения любого триггера, который вы хотите создать (я использую функцию с именем "widgetTracker" ), вы можете выполнить отслеживание событий GA.

Здесь весь код:

/* JavaScript Document */
(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-xxxxxxx-xx', 'xx.xxx');
  ga('send', 'pageview');

 var googleString;  
 var stringArray = [];  
 var queryStringObject = makeQueryStringObject();   
 var QUOT = "'";    
 var EQ = '=';  
 var AMP = '&';         

 for  ( var v in queryStringObject ) {  
    var str =  v + EQ + queryStringObject[v] ;  
    stringArray.push(str);   
    googleString = stringArray.join(AMP);
} 

         function makeQueryStringObject()   {       
            var obj = [];       
            var pageURL = window.location.href;         
            var URLArray = pageURL.split('?');      
            if( URLArray[1] )       {           
                var argsArray = URLArray[1].split('&');             
                var l = argsArray.length;           
                for( i=0; i<l; i++ )            {               
                    var individualArg = argsArray[i].split('=');                
                    if(individualArg[1] && individualArg[1].indexOf('#') > -1)              {               
                        var dropHashArray = individualArg[1].split('#');                    
                        individualArg[1] = dropHashArray[0];                
                    }               
                    obj[ individualArg[0] ] = individualArg[1];     
                    console.log("value of queryStringObject: " + individualArg[0] + " :: " + obj[   individualArg[0] ]);

                }       
            } else { /* from http://stackoverflow.com/a/14984832/1013405 */         
                ga1 = parseGACookie();  
                if(ga1['utmcsr']) {             
                    var utm_source = ga1['utmcsr'];                     
                }           
                    if(ga1['utmccn']) {             
                        var utm_campaign = ga1['utmccn'];                   
                    }           if(ga1['utmcmd']) {             
                        var utm_medium = ga1['utmcmd'];                 
                        }           
                        if(ga1['utmctr']) {             
                            var utm_term = ga1['utmctr'];                           
                        }           
                        if(ga1['utmcct']) {             
                            var utm_content = ga1['utmcct'];                
                        }       
                    }   
                        var googleString2 = "utm_campaign=" + utm_campaign + '&' + "utm_medium=" + utm_medium + '&' + "utm_term=" + utm_term + '&' + "utm_content=" + utm_content;  
                    return obj;     
                } 

                function parseGACookie()  {     
                var values = {};     
                var cookie = readCookie("__utmz");     
                if (cookie) {         
                    var z = cookie.split('.');         
                    if (z.length >= 4) {             
                        var y = z[4].split('|');            
                         for (i=0; i<y.length; i++) {                 
                            var pair = y[i].split("=");                 
                            values[pair[0]] = pair[1];             
                         }         
                        }     
                    }     
                    return values; 
                }  


                function readCookie(name) {     
                    var nameEQ = name + "=";     
                    var ca = document.cookie.split(';');     
                    for(var i=0;i < ca.length;i++) {        
                     var c = ca[i];        
                      while (c.charAt(0)==' ') c = c.substring(1,c.length);         
                      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);     
                    }     
                    return null; 
                }  
                function widgetTracker() {  
                /* event tracking order of elements: send (required), event (required), Category, Action, Label, Value */ 
                    if (googleString) { 
                    ga('send', 'event', 'queryString', 'getQueryString', googleString ); 
                    } else { 
                     ga('send', 'event', 'queryString2', 'getQueryString2', googleString2 ); 
                     }
                }  

Ответ 7

Ну, я не тестировал его, но попытаюсь добавить эти параметры к методу .trackPageview(), то есть:

pageTracker._trackPageview("?utm_source=...")

В любом случае, вы должны каким-то образом передать эти параметры. И это означает, что у вас всегда будут длинные URL-адреса с какой-то кампанией. Он не будет препятствовать закладке неправильных URL-адресов, индексированию поисковых систем и т.д.

Если вы хотите сохранить контроль над этими параметрами, настройте отдельные URL-адреса для партнеров, которые перенаправляют на целевой URL-адрес:

http://example.com/campaigns/1 -> http://example.com/?utm_source=...

Ответ 8

Вы можете использовать API Google Analytics для настройки вызова в _trackPageview в вашем примере.

pageTracker._trackPageview("/inbound/" + campaignSource + "/" + campaignMedium );

Все входящие ссылки будут отображаться в Google Analytics под /inbound/ "псевдо-каталогом" с помощью отдельного "каталога" для источника кампании и среды кампании.

Ответ 9

Новая универсальная аналитика (er) позволяет вам указать эти параметры - см. документацию здесь https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference

Найдите раздел "Источник кампании" для примера установки того, что будет параметром utm_source.