2012-05-01 41 views
31

在chrome調試日誌中查看站點頁面時出現以下消息。未捕獲的ReferenceError:_gaq未定義(Google Analytics)

Uncaught ReferenceError: _gaq is not defined

頁面本身應該使用onload事件處理程序跟蹤對象和火谷歌Analytics(分析)一_trackEvent

我最好的猜測是,ga.js文件不能及時加載,因此觸發的文件不會被捕獲。在關閉</body>之前正在使用異步代碼段,並且該對象位於中間<body>中。

(一些其他職位已引用jQuery的位置太多,但,這可能是一個紅鯡魚)

任何幫助,不勝感激。

回答

14

關於異步代碼段的位置,GA help page說 -

Paste this snippet into your website template page so that it appears before the closing </head> tag.

我首先想到的是,JS應在頁面底部加載,以提高速度。然而,GA異步跟蹤片段應該加載到頭部,因爲它不會立即加載ga.js,也不會阻止頁面執行(它通過動態地將腳本標記添加到DOM來實現,它在隊列的後面。)

如果由於某種原因,你不能將異步代碼段,舉至頭頂,你可以自己定義_gaq,像這個 -

<button onclick="var _gaq = _gaq || []; _gaq.push(['_trackEvent', 'button3', 'clicked'])"/><button> 
+0

這正是我問題。我將跟蹤代碼移到了頁腳,並沒有意識到它使用異步加載甚至..感謝提示! –

9

有同樣的問題。您必須定義_gaq陣列。在標題您的谷歌Analytics(分析)腳本之後只需補充一點:

var _gaq = _gaq || []; 
_gaq.push(['_setAccount', 'UA-XXXXXX-X']); 
_gaq.push(['_trackPageview']); 
29

https://developers.google.com/analytics/devguides/collection/gajs/此代碼替換現有的「傳統片斷」與「最新,異步版本,你應該首先刪除現有的跟蹤代碼段。」

<script type="text/javascript"> 

    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-XXXXX-X']); 
    _gaq.push(['_trackPageview']); 

    (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> 

要查看事件進來(要知道,如果這是工作)尋找「活動」上的「報告」頁面左側的「實時」菜單選項下。

+0

這是一個更好的答案,並且包含一個封裝的解決方案 - 當情境沒有留下想象時,我總是很感激。 – Krafty

0

將跟蹤代碼到:

<script type="text/javascript"> 
     var gaq; 
     var _gaq = gaq || []; 
     _gaq.push(['_setAccount', 'UA-XXXXX-X']); 
     _gaq.push(['_setDomainName', 'yourdomain.com']); 
     _gaq.push(['_setAllowLinker', true]); 
     _gaq.push(['_trackPageview']); 

     (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> 
+0

我不太明白這是如何工作的。是不是'_gaq'總是被設置爲你剛剛在第一行開始的'gaq'變量? – Shelton

+0

這確保了新GA的乾淨開局。如果你想使用另一個現有的_gaq,你可以。 var _gaq = _gag會引用它(如果現有的數組是一個數組,那麼所有的數組都是可以的,如果它不是數組,你將會得到一個錯誤)。 在上面的代碼中,_gaq雖然被引用到gaq(新變量)將是一個數組。 檢查出來。 –

+0

既然你知道'gaq'是'undefined',你的前兩行可以合併成'_gaq = []'。如果你試圖獲得一個現有的數組或者建立一個新的數組,那麼你會使用傳統的'_gaq = _gaq || []'。如果'_gaq'已經存在,你就殺了它。第二行是'_gaq = undefined ||新數組「,在這種情況下,它將始終設置爲等於一個數組。 – Shelton

3

您可以使用的analytics.js代替ga.js

ga.js is a legacy library. If you are starting a new implementation we recommend you use the latest version of this library, analytics.js. For exisiting implementations, learn how to migrate from ga.js to analytics.js.

這裏的最後一個版本是一個例子:

ga('send', { 
    hitType: 'event', 
    eventCategory: 'Video', 
    eventAction: 'play', 
    eventLabel: 'cats.mp4' 
}); 
相關問題