Utilisation du code asynchrone de Google Analytics à partir d'un fichier JS externe

J'essaie d'ajouter la version asynchrone du code de suivi Google Analytics à un site web.

Je voudrais garder le JavaScript dans un fichier séparé, et l'appeler à partir de là.

Voici ce que j'ai actuellement dans mon .fichier 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);

Et voici ce que j'ai dans la balise <head> de ma page principale:

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

Cependant, il y a évidemment un problème car après quelques jours, Je ne reçois pas de statistiques!

Toutes les idées que je dois le changement?

Merci, Neil


Modifier: Ok... Après quelques commentaires ci-dessous, je vais ajouter le nouveau contenu actuel de mon .fichier js. Je vais le garder à jour afin que si/quand cela sera résolu, cela aidera, espérons-le, d'autres personnes à essayer de faire des choses similaires.

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();
29
demandé sur Alex W 2010-07-16 14:16:54

3 réponses

Votre définition de variable var _gaq se trouve dans une fonction. Cela signifie qu'il est localement étendu à l'intérieur de cette fonction et n'existera pas globalement. Google Analytics dépend de la variable globale _gaq. Si vous voulez le garder dans une fonction comme celle - ci, référencez-le comme window._gaq.

23
répondu Brian 2018-03-27 16:17:01

Vous manquez complètement le point du code de suivi asynchrone. Ne le mettez pas dans un fichier externe car c'est exactement comme si vous incluiez l'ancien GA synchrone.

Et surtout ne reportez pas le code de suivi à window.onload car il peut se déclencher trop tard.

Si vous utilisez le GA asynchrone , Placez-le simplement en haut de votre document dans une balise de script en ligne . C'est la recommandation sur le site Web de Google Analytics également.

Insérer le extrait asynchrone au niveau en bas de la <head> section de votre pages, après tout autre script votre page ou modèle peut utiliser.

14
répondu galambalazs 2010-10-06 08:04:02

Honnêtement, je n'ai pas lu tous ces messages car ils sont plutôt vieux. Cependant, j'ai récemment eu le besoin d'ajouter Gtag (Google Tag manager for analytics tracking) à un ancien site web qui était un fichier HTML statique 1000 et (heureusement) les fichiers html avaient un seul fichier JS include pour la barre de menu spry, comme je l'ai dit très vieux site! Pour mes besoins, Je ne m'inquiétais pas de la performance, mais de la mesure du trafic afin que nous puissions le migrer. votre cas peut être différent mais le code ci dessous fonctionnera pour js externe comprend de Gtag.

J'ai utilisé ce fichier pour charger le code ci-dessous puisque le code ci-dessus est pour legacy 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
0
répondu Joshua Berkowitz 2018-04-08 17:15:19