Использование асинхронного кода Google Analytics из внешнего файла JS - PullRequest
30 голосов
/ 16 июля 2010

Я пытаюсь добавить асинхронную версию кода отслеживания Google Analytics на веб-сайт.

Я бы хотел сохранить JavaScript в отдельном файле и вызывать его оттуда.

Вот что у меня есть в моем файле .js:

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

function loadtracking() {
    var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-XXXXXXX-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);
        })();
}

addLoadEvent(loadtracking);

А вот что у меня есть в теге <head> моей главной страницы:

<script type="text/javascript" src="js/google-analytics.js" ></script>

Однако, очевидно, есть проблема, поскольку через несколько дней я не получаю статистику!

Есть идеи, что мне нужно изменить?

Спасибо, Нил


РЕДАКТИРОВАТЬ: Хорошо ... После некоторой обратной связи ниже, я собираюсь добавить новое текущее содержимое моего файла .js.Я буду держать его в курсе, так что если / когда это будет решено, мы надеемся, что это поможет другим людям, пытающимся делать подобные вещи.

var _gaq = _gaq || [];

function loadtracking() {
        window._gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
        window._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);
        })();
}

loadtracking();

Ответы [ 3 ]

23 голосов
/ 17 июля 2010

Ваше определение переменной var _gaq находится внутри функции. Это означает, что он находится внутри этой функции и не будет существовать глобально. Google Analytics зависит от глобальной переменной _gaq. Если вы хотите сохранить его внутри такой функции, укажите его как window._gaq.

14 голосов
/ 16 июля 2010

Вы полностью упускаете точку асинхронного кода отслеживания.Не помещайте его во внешний файл, потому что это точно так же, как включение старого синхронного GA.

И самое главное, не откладывайте код отслеживания до window.onload, так как он может сработать слишком поздно.

Если вы используете асинхронный GA , просто поместите его в верхнюю часть документа в виде встроенного тега сценария .Это рекомендация на веб-сайте Google Analytics .

Вставьте асинхронный фрагмент в нижнюю часть <head> секции ваших страниц, после любых других сценариев, которые может использовать ваша страница или шаблон.

0 голосов
/ 08 апреля 2018

Честно говоря, я не прочитал все эти посты, так как они довольно старые. Однако недавно у меня возникла необходимость добавить Gtag (менеджер тегов google для отслеживания аналитики) на старый веб-сайт, содержащий 1000 статических HTML-файлов и (удачно), в html-файлах был один файл js include для строки меню spry, как сказал очень старый сайт! Для моих целей я не беспокоился о производительности, но измерял трафик, чтобы мы могли его перенести. Ваш случай может отличаться, но приведенный ниже код будет работать для внешних JS включает Gtag.

Я использовал этот файл для загрузки приведенного ниже кода, так как приведенный выше код предназначен для устаревшего ga.js

//Added Google Anyltics Tag Container Tracking - included here to min rebuilding DOM 

function loadGoogleAnalytics(){
    var ga = document.createElement('script'); 
    ga.type = 'text/javascript'; 
    ga.async = true;
    ga.src = 'https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXXX-X';

    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
}

loadGoogleAnalytics(); //Create the script 

window.dataLayer = window.dataLayer || [];

function gtag(){dataLayer.push(arguments);}

gtag('js', new Date());

gtag('config', 'UA-XXXXXXXXX-1');
//Confirmed with Google tag Assistant
...