7

일부 GWO & GATC js를 실행 한 다음 다른 URL로 리디렉션해야하는 간단한 페이지가 있습니다.Google Analytics에서 JS 콜백 사용

<head> 

<script> 
function utmx_section(){}function utmx(){} 
(function(){var k='xxx',d=document,l=d.location,c=d.cookie;function f(n){ 
if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);return escape(c.substring(i+n. 
length+1,j<0?c.length:j))}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash; 
d.write('<sc'+'ript src="'+ 
'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com' 
+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime=' 
+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+ 
'" type="text/javascript" charset="utf-8"></sc'+'ript>')})(); 
</script><script>utmx("url",'A/B');</script> 

<script type="text/javascript"> 
    var _gaq = _gaq || []; 
    _gaq.push(['gwo._setAccount', 'UA-xxxxxx-x']); 
    _gaq.push(['gwo._trackPageview', '/xxxxxxxx/test']); 
    (function() { 
    var 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'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
    })(); 
</script> 

<script> 
    window.location = 'MY REDIRECT URL'; 
</script> 
</head> 

제가하는 데 문제는 내가 내에서는 window.location를 호출하기 전에 웹 사이트 최적화 도구 & GATC 코드가 실행되는 것을 보장 할 필요가있다. setTimeout을 할 수는 있지만 보장이 없으며 추가 로딩 시간이 추가됩니다.

어떻게 할 수 있습니까?

답변

26

나는 해결책을 찾았다 고 생각합니다. 그것은 함수를 _gaq에 푸시 할 수 있음이 밝혀졌습니다. 그런 다음 _gaq가 순차적으로 실행되어 GA 리디렉션이 처리되기 전에 처리됩니다.

var _gaq = _gaq || []; 
    _gaq.push(['gwo._setAccount', 'UA-xxxxxx-x']); 
    _gaq.push(['gwo._trackPageview', '/xxxxxxxx/test']); 

    _gaq.push(function(){ 
    window.location = 'MY REDIRECT URL'; 
    }); 

http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html#PushingFunctions

+9

을하지만, 어떤 이유로 [공식 제안] (http://www.google.com/support/analytics/bin/answer.py?answer=55527&hl=ko)은 이벤트가 푸시 된 후 몇 밀리 초를 리디렉션하기 위해 'setTimeout'을 사용하는 것입니다. GA 대기열 – lucasrizoli

+2

@lucasrizoli 및 모든 나는 픽셀에 대한 요청이 GA 코드에 의해 만들어졌지만 반환 된 후에는 함수가 호출 될 것이라고 생각합니다. 어쩌면 리다이렉트 요청을 기다리는 것이 중요한지는 모르겠지만 리다이렉트를 연기하라는 구글의 제안 때문일 수도있다. –

+8

대기열에서 순서대로 처리되는 동안 다음 명령이 처리되기 전에 이전 지침이 처리 완료 됨 => 시간 초과가 필요하다는 메시지는 없습니다. 그러나 Google은 이러한 requierements를 듣고 있습니다. ga.js 변경 내역 http://code.google.com/intl/fr/apis/analytics/community/gajs_changelog.html –

6

_gaq.push 나를 위해 작동하지 않았다 ...

나는 이미 알려진에서는 setTimeout 솔루션을 사용

:이 작동하고 의미가

$('.link-site').click(function(e){ 
    e.preventDefault(); 
    _gaq.push(['_trackPageview', '/btn-link-site']); 
    window.setTimeout(function(){ 
     window.location=$('.link-site').attr('href'); 
    },300); 
}); 
+4

비동기식 대기열에 푸시 된 명령이 비동기식으로 발생하기 때문에 허용 된 솔루션보다 낫습니다. 이것은 아마도 100 % 시간은 작동하지 않지만 전혀 일시 중지하지 않는 것보다 성공할 가능성이 큽니다. – dana

+1

해킹이고 적절한 해결책이 아닙니다. 리디렉션 전에 이벤트가 실행된다는 보장은 없습니다. –

관련 문제