2012-05-01 12 views
31

Thông báo sau xuất hiện khi xem trang web trong nhật ký gỡ lỗi chrome.Tham chiếu không bắt buộcLỗi: _gaq không được xác định (Google Analytics)

Uncaught ReferenceError: _gaq is not defined

Trang riêng của mình có nghĩa vụ phải theo dõi một đối tượng bằng cách sử dụng xử lý sự kiện onload và bắn một _trackEvent cho Google Analytics.

Dự đoán tốt nhất của tôi là có lẽ tệp ga.js không tải đúng lúc và do đó kích hoạt onload_trackEvent được kích hoạt. đoạn mã async đang được sử dụng trước khi đóng </body> và đối tượng được đặt ở giữa <body>.

(một số bài đăng khác cũng đã tham chiếu vị trí jQuery nhưng, đây có thể là một cá trích đỏ)

bất kỳ hỗ trợ nào được đánh giá cao.

Trả lời

14

Về vị trí của đoạn async, các GA help page nói -

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

Suy nghĩ đầu tiên của tôi là JS nên được nạp ở dưới cùng của trang để cải thiện tốc độ trang. Tuy nhiên, đoạn mã theo dõi async GA phải được tải trong đầu, vì nó sẽ không tải ga.js ngay lập tức và đoạn mã sẽ không chặn thực thi trang (Nó thực hiện điều này bằng cách tự động thêm thẻ tập lệnh vào DOM, nó ở mặt sau của hàng đợi.)

Nếu vì một lý do nào, bạn không thể di chuyển đoạn async cho người đứng đầu, bạn có thể xác định _gaq chính mình, như this-

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

Đây là chính xác của tôi vấn đề. Tôi đã chuyển mã theo dõi vào chân trang và không nhận ra nó đã được tải bằng cách sử dụng async ngay cả .. Cảm ơn bạn đã tip! –

9

Đã cùng vấn đề. Bạn phải xác định mảng _gaq. Chỉ cần thêm này sau khi kịch bản Google Analytics của bạn trong tiêu đề:

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

Từ https://developers.google.com/analytics/devguides/collection/gajs/ mã này thay thế hiện "đoạn truyền thống" của mình với "phiên bản mới nhất, không đồng bộ, bạn nên loại bỏ các đoạn mã theo dõi hiện đầu tiên."

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

Để xem các sự kiện của bạn thành hiện tại (để biết nếu điều này đang làm việc) tìm kiếm "Sự kiện" dưới "Real-Time" tùy chọn menu ở phía bên trái của trang "Báo cáo".

+0

đây là một câu trả lời tốt hơn nhiều và chứa một giải pháp đóng gói - tôi luôn luôn biết ơn khi bối cảnh không được để lại cho trí tưởng tượng. – Krafty

0

Thay đổi mã theo dõi để:

<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

Tôi hoàn toàn không thấy cách hoạt động của tính năng này. Không phải '_gaq' luôn được đặt thành biến' gaq' mà bạn vừa mới bắt đầu trong dòng đầu tiên? – Shelton

+0

Điều này đảm bảo khởi động sạch cho một GA mới.Nếu bạn muốn sử dụng một _gaq hiện có khác, bạn có thể. var _gaq = _gag sẽ tham chiếu nó (nếu cái hiện có là một mảng tất cả sẽ là ok. nếu nó không phải là một mảng bạn sẽ nhận được một lỗi). trong mã ở trên, _gaq mặc dù được tham chiếu đến gaq (biến mới) sẽ là một mảng. kiểm tra. –

+0

Vì bạn biết 'gaq' là' undefined', hai dòng đầu tiên của bạn có thể được kết hợp thành '_gaq = []'. Nếu bạn đang cố gắng để có được một mảng hiện có hoặc thiết lập một mảng mới, thì bạn sẽ sử dụng '_gaq = _gaq || truyền thống [] '. Nếu '_gaq' đã tồn tại, bạn chỉ cần giết nó. Dòng hai là hiệu quả '_gaq = undefined || Mảng mới, trong trường hợp này, nó sẽ luôn được đặt bằng một mảng. – Shelton

3

Bạn có thể sử dụng phiên bản cuối cùng của analytics.js thay vì 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.

Dưới đây là một ví dụ:

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