Uncaught ReferenceError: _gaq не определен (Google Analytics)
При просмотре страницы сайта в хромовом журнале отладки появляется следующее сообщение.
Неподготовлено ReferenceError: _gaq не определен
Сама страница должна отслеживать объект с помощью обработчика событий onload
и запускать _trackEvent
для Google Analytics.
Мое лучшее предположение заключается в том, что, возможно, файл ga.js
не загружается вовремя, и поэтому срабатывает onload
_trackEvent
. асинхронный фрагмент используется до закрытия </body>
, а объект располагается посередине <body>
.
(некоторые другие сообщения также ссылаются на позицию jQuery, но это может быть красная селедка)
любая помощь, которую высоко оценили.
Ответы
Ответ 1
Из 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>
Чтобы узнать, как ваши события заходят (чтобы узнать, работает ли это), найдите "События" в меню "Реальное время" в левой части страницы "Отчеты".
Ответ 2
Что касается положения асинхронного фрагмента, справочная страница GA говорит -
Вставьте этот фрагмент на страницу шаблона веб-сайта, чтобы он появился перед закрывающим тегом </head>
.
Моя первая мысль заключалась в том, что JS должен быть загружен в нижней части страницы, чтобы улучшить скорость страницы. Однако фрагмент отслеживания асинхронного отслеживания GA должен быть загружен в голову, так как он не будет немедленно загружать ga.js, и он не будет блокировать выполнение страницы. (Он делает это путем динамического добавления тега script в DOM, который помещает его в конец очереди.)
Если по какой-то причине вы не можете переместить фрагмент асинхронизации в голову, вы можете определить _gaq
самостоятельно, например:
<button onclick="var _gaq = _gaq || []; _gaq.push(['_trackEvent', 'button3', 'clicked'])"/><button>
Ответ 3
Была та же проблема. Вы должны определить массив _gaq
. Просто добавьте это после своей Google Analytics script в заголовок:
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXX-X']);
_gaq.push(['_trackPageview']);
Ответ 4
Вы можете использовать последнюю версию analytics.js вместо ga.js
ga.js - это устаревшая библиотека. Если вы начинаете новую реализацию, мы рекомендуем использовать последнюю версию этой библиотеки analytics.js. Для реализации реализаций узнайте, как перейти от ga.js к analytics.js.
Вот пример:
ga('send', {
hitType: 'event',
eventCategory: 'Video',
eventAction: 'play',
eventLabel: 'cats.mp4'
});
Ответ 5
Измените код отслеживания на:
<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>