web-dev-qa-db-fra.com

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

J'essaie d'ajouter la version asynchrone du code de suivi de 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 plus de statistiques!

Des idées que je dois changer?

Merci, Neil


EDIT: Ok ... Après quelques commentaires ci-dessous, je vais ajouter le nouveau contenu actuel de mon fichier .js. Je le tiendrai à jour de sorte que, si/lorsque cela sera résolu, nous espérons que cela aidera d'autres personnes qui essaient de faire la même chose.

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();
30
NeilD

Votre définition de variable var _gaq est à l'intérieur d'une fonction. Cela signifie que cette fonction a une portée locale et n'existera pas globalement. Google Analytics dépend de la variable globale _gaq. Si vous voulez le conserver dans une fonction comme celle-ci, appelez-la en tant que window._gaq.

23
Brian

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

Et surtout, ne différez pas le code de suivi sur window.onload car il pourrait se déclencher trop tard.

Si vous utilisez le fichier asynchrone GA placez-le simplement en haut de votre document dans une balise de script en ligne}. Il s'agit également de la recommandation sur le site Web Google Analytics .

Insérez l'extrait de code asynchrone au Bas de la section <head> de vos pages , Après tout autre script que votre page ou modèle Pourrait utiliser.

14
gblazex

Honnêtement, je n'ai pas lu tous ces articles, car ils sont plutôt vieux. Cependant, j'ai récemment eu besoin d'ajouter Gtag (gestionnaire de balises Google pour le suivi des analyses) à un ancien site Web qui contenait 1 000 fichiers HTML statiques et (LUCKILY). dit très vieux site! Pour ce qui me concerne, je n'étais pas préoccupé par les performances, mais par la mesure du trafic afin que nous puissions le migrer. votre cas peut être différent mais le code ci-dessous fonctionnera pour external js includes of Gtag.

J'ai utilisé ce fichier pour charger le code ci-dessous, car 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
Joshua Berkowitz