쿼리 문자열 매개 변수가없는 Google 웹 로그 분석을 통해 캠페인을 추적합니까?

StackOverflow https://stackoverflow.com/questions/934119

  •  06-09-2019
  •  | 
  •  

문제

Google 웹 로그 분석에는 쿼리 문자열 매개 변수를 사용하지 않고 캠페인을 추적하는 지원 방법이 있습니까?

분석에서 당신은 할 수 있습니다 사이트에 대한 링크를 태그하십시오 다음과 같은 쿼리 문자열 매개 변수가 있습니다 utm_campaign 그리고 utm_medium 추적 할 수 있도록 캠페인에 대한 정보가 제공됩니다.

Google에는 실제로 있습니다 온라인 도구 그러한 링크를 만드는 데 도움이됩니다.

예를 들어 STACKOVERFLOW가 전문가 교환에 광고하는 경우 다음과 같은 링크를 가질 수 있습니다.

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

여러 가지 이유로 URL 에이 서투른 매개 변수가 나타나기를 원하지 않습니다.

  • 나는 트위터를 격려하고 싶고 긴 링크는 이것을 낙담시킵니다.
  • 나는 사람들이 캠페인 신분증으로 책갈피를 공개하는 것을 원하지 않습니다.
  • 나는 사람들이 깨끗한 URL을보기를 원합니다
  • 검색 엔진이 이러한 링크를 색인화하고 싶지 않습니다.
  • 나는 어떤 매개 변수가 Google 웹 로그 분석으로 전송되는지에 대해 완전히 제어하고 싶습니다. 그리고 내 사이트에 액세스하는 URL을 엉망으로 만들기 위해 파트너에게 맡기지 마십시오.

나는 얼마 전에이 매개 변수를 설정할 수있는 방법을 찾으려고 노력했습니다. Google에는 페이지가 있습니다 언뜻보기에는 해결책처럼 보이지만 실제로는 그렇지 않습니다. 해당 페이지는 쿼리 문자열 매개 변수의 이름을 다른 것으로 변경하는 방법에 대해 설명합니다. src 대신에 utm_source 당신은 달릴 것입니다 :

 pageTracker._setCampSourceKey("src");     

나는 그들이 왜 실제로 명시 적으로 utm_source 키 - 대체 매개 변수 이름을 설정하는 것이 아닙니다.

나는 일종의 불쾌한 해킹을 한 사람을 찾는 시간을 다시 한 번 기억하지만, 지금도 그것을 찾을 수없는 것 같습니다. 나는 그것이 분석 코드의 사본을 가져 와서 본질적으로 그것을 분기하고 해킹 한 것을 기억하는 것 같습니다. 이것은 나에게 좋은 해결책이 아닙니다!

불쾌한 리디렉션없이 공식적으로 지원되는 방법이 있습니까?

간단히 말해서 나는 이와 같은 일을하고 싶습니다 (ASP.NET MVC 사이트). Partnet에게 다음과 같은 URL로 내 사이트에 대한 링크를 제공하십시오.

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

MVC 페이지의 컨트롤러 에서이 안내서와 관련된 캠페인을 찾아 모델 상태를 설정합니다. 참고 : 이것은 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 메소드는 실제로 존재하지 않습니다. 이것은 내가 이상적으로 할 수있는 것만으로 '의사 코드'입니다.

이런 일을 성공적으로 관리 한 사람이 있습니까?

도움이 되었습니까?

해결책

_ 캠페인 파람을 설정합니다

이론적 인 "_setCampaignData"는 마침내 다음과 같습니다. ["_set","campaignParams",...]

설정하려는 값을 프로그래밍 방식으로 주입하는 방법이있는 경우 (예 : 리디렉션 또는 서버 측에서 쿠키로 설정하고 페이지에 인쇄)를 사용할 수 있습니다. _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 Library, Analytics.js/Universal Analytics에서이를 달성하는 방법에 대한 세부 사항.

다른 팁

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;

이런 식으로 백엔드에서 캠페인 데이터를 생성 한 다음 해시에 동적으로 전달한 다음 사용자가 알아 차리지 않고 복원 할 수 있습니다. 즉 캠페인 추적은 실제 URL과 무관하게 100%입니다.

그만큼 푸시를 사용한 솔루션 ([ '_ 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

기능이 있습니다 _setAllowAnchor 쿼리 매개 변수 대신 앵커 텍스트에서 태그를 지정할 수있는 트랙 인 API에서.

pageTracker._setAllowAnchor(true);

그래서 당신은 사용할 수 있습니다 http://www.stackoverflow.com/#utm_source=expertexchange 그리고 GA는 그것을 이해할 것입니다. 이렇게하면 SEO 문제를 피할 수 있습니다.

트위터 문제에 대해서는 게시물에 설명 된 방법을 제안합니다. Google Analytics에서 Twitter를 추적하고 URL을 단축합니다.

이것을 Google 도움말 포럼에 게시했습니다.

Google을 읽으십시오 !!! 훌륭한 향상 기회 !!! 이로 인해 많은 사용자가 광고 매개 변수를 사용할 수 없습니다. TrackPageView (URL)에서 사용 된 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

아래는 GA 표준 이벤트 추적보다는 Google Analytics Universal 이벤트 추적 방법을 사용하여이를 수행하는 업데이트 된 방법입니다.

전체 UTM 문자열은 QueryString (있을 때)에서 추출하거나 Google 쿠키 (__utmz)에서 가져온 다음 아래 코드를 사용하여 Google 웹 로그 분석으로 전달할 수 있습니다.

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

그런 다음 생성하려는 트리거를 실행하면 ( "위젯 트래커"라는 기능을 사용하면 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 ); 
                     }
                }  

글쎄, 나는 그것을 테스트하지 않았지만 그 매개지를 .trackPageview() 방법, 즉 :

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

어쨌든, 당신은 그 매개 변수를 어떻게 전달해야합니다. 그리고 이것은 당신이 당신의 모든 종류의 캠페인 쓰레기를 가진 긴 URL-s를 가지고 있다는 것을 의미합니다. 잘못된 URL-S를 북마크하고 검색 엔진을 색인화하는 등을 방해하지 않습니다.

해당 매개 변수의 제어를 유지하려면 파트너에 대해 별도의 URL-S를 설정하고 태그가 지정된 대상 URL로 리디렉션합니다.

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

Google Analytics API를 사용하여 예제에서 _trackPageView로 호출을 사용자 정의 할 수 있습니다.

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

그런 다음 모든 인바운드 링크는 캠페인 소스 및 캠페인 매체에 대한 별도의 "디렉토리"와 함께 / 인바운드 / "의사 디렉토리"아래 Google 웹 로그 분석에 표시됩니다.

새로운 (ER) Universal Analytics를 사용하면 이러한 매개 변수를 지정할 수 있습니다. 여기 문서를 참조하십시오. https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference

UTM_Source Param을 설정하는 예를 보려면 "캠페인 소스"섹션을 찾으십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top