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

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

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

На самом деле у Google есть онлайн-инструмент для помощи в создание таких ссылок.

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

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

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

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

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

 pageTracker._setCampSourceKey("src");     

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

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

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

Вкратце, я хочу сделать что-то вроде этого (сайт ASP.NET MVC). Дайте партнету ссылку на мой сайт с таким 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 ДЕЙСТВИТЕЛЬНО НЕ СУЩЕСТВУЕТ. Это просто «псевдокод» того, что я в идеале хотел бы делать.

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


person Simon_Weaver    schedule 01.06.2009    source источник
comment
добавление награды, потому что я действительно хотел бы видеть какие-либо обновления по этому вопросу, но недостаточно времени (или оптимизма), чтобы изучить его самостоятельно. скрестив пальцы! Спасибо   -  person Simon_Weaver    schedule 01.11.2010


Ответы (9)


Решение с использованием 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

person brass monkey    schedule 25.02.2016
comment
Ух ты, десять лет с тех пор, как я спросил об этом! - person Simon_Weaver; 07.09.2019

_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.

person Yahel    schedule 02.11.2010
comment
Для меня это звучит слишком сложно. Просто вычислите внутренний идентификатор и обновите location.hash в JS и заставьте GA обработать его. - person Open SEO; 17.06.2011
comment
Это довольно сложно :), но очевидно, что подход location.hash создает проблемы с кнопкой «Назад» и, возможно, с перезаписью файлов cookie. - person Yahel; 17.06.2011
comment
Я просто добавил гораздо более простой подход :) - person Yahel; 17.06.2011
comment
location.search.match (/ utm_ /) или location.hash.match (/ utm_ /)? - person Open SEO; 27.06.2011
comment
Обратите внимание, что _gaq.push(['_set', 'campaignParams', ...]) следует поместить перед _gaq.push(['_trackPageview']) - person Jeppe Mariager-Lam; 26.09.2013
comment
Боюсь, что это решение у меня не подойдет. Возможно, поэтому он до сих пор не документирован, но я сослался на многочисленные примеры и _gaq.push (['_ set', 'campaignParams', ...]); метод просто не работает. Я знаю, что моя аналитика работает, потому что, если я вручную добавлю строку запроса, она будет работать нормально. - person Charles Perniciaro III; 27.05.2014
comment
Похоже, это рекомендуется только для старого ga.js. Информацию о analytics.js см. здесь - person brass monkey; 25.02.2016

Торок Габор подал мне идею.

// ...
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.

person Maciej Łebkowski    schedule 02.06.2009
comment
Похоже, это испортило историю браузера, по крайней мере, в FF 3.5. Нажатие назад возвращает к хешированной версии, назад к хешированной версии, назад в третий раз - к предыдущей странице. Есть какие-нибудь уловки, чтобы не допустить попадания хеша в историю? - person Nick; 07.12.2009
comment
Я также был бы обеспокоен тем, что страница будет мерцать во время обратной передачи. - person Jeremy Ricketts; 09.12.2009
comment
Я не думаю, что вам нужно хранить и восстанавливать хеш-значение. Но я считаю, что это правильный путь: обработать частный идентификатор, передать параметры кампании в хэш через JS и отслеживать просмотр страницы после завершения. - person Open SEO; 17.06.2011

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

pageTracker._setAllowAnchor(true);

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

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

person viam0Zah    schedule 01.06.2009

Я разместил это на справочном форуме 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
person Community    schedule 21.07.2009
comment
Это распространенный обходной путь, который я видел. (Возможно, вы захотите отредактировать свой пост и исправить код из-под прикрытия) - person Shawn Steward; 10.12.2009

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

Вся строка 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 ); 
                     }
                }  
person Israel Kloss    schedule 19.02.2014

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

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

В любом случае, вы должны каким-то образом передать эти параметры. А это значит, что у вас всегда будут длинные URL-адреса с какой-то рекламной чушью. Это не помешает добавить неправильные URL-адреса в закладки, их индексацию поисковыми системами и т. Д.

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

http://example.com/campaigns/1 -> http://example.com/?utm_source=...
person Maciej Łebkowski    schedule 01.06.2009
comment
Остерегайтесь, удалите косую черту из аргумента, потому что она изменяет реальный путь фактического запроса. - person viam0Zah; 01.06.2009
comment
Мне еще предстоит его протестировать, но, видимо, это не работает. на мой взгляд, это настоящий позор. см. google.com/support/forum/p / Google% 20Analytics / - person Simon_Weaver; 02.06.2009
comment
Это не сработает, значение trackPageview не считывается для поиска параметров кампании, это просто то, что регистрируется как текущая страница - person Open SEO; 17.06.2011

Вы можете использовать Google Analytics API, чтобы настроить вызов _trackPageview в своем примере.

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

После этого все входящие ссылки будут отображаться в Google Analytics в / inbound / «псевдокаталог» с отдельным «каталогом» для источника кампании и средства кампании.

person Jay Stevens    schedule 01.06.2009

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

Найдите в разделе «Источник кампании» пример настройки параметра utm_source.

person Brady Moritz    schedule 01.11.2014