web-dev-qa-db-fra.com

Erreur de référence non détectée: _gaq n'est pas défini (Google Analytics)

Le message suivant apparaît lors de l'affichage d'une page de site dans le journal de débogage chrome.

Uncaught ReferenceError: _gaq n'est pas défini

La page elle-même est censée suivre un objet à l'aide du gestionnaire d'événements onload et déclencher un _trackEvent pour Google Analytics.

Ma meilleure supposition est que peut-être le ga.js le fichier ne se charge pas à temps et donc le onload_trackEvent déclenché n'est pas intercepté. l'extrait asynchrone est utilisé avant le </body> fermez et l'objet est positionné au milieu <body>.

(Certains autres articles ont également référencé la position jQuery mais, cela pourrait être un hareng rouge)

toute aide grandement appréciée.

33
Alex Brown

De https://developers.google.com/analytics/devguides/collection/gajs/ ce code remplace votre "extrait traditionnel" existant par la "dernière version asynchrone, vous devez supprimer l'extrait de suivi existant première."

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

Pour voir vos événements arriver (pour savoir si cela fonctionne), recherchez "Événements" sous l'option de menu "Temps réel" sur le côté gauche de la page "Rapports".

34
PJ Brunet

Concernant la position de l'extrait asynchrone, la page d'aide GA dit -

Collez cet extrait dans la page de modèle de votre site Web pour qu'il apparaisse avant la fermeture </head> tag.

Ma première pensée a été que JS devrait être chargé en bas de la page pour améliorer la vitesse de la page. Cependant, l'extrait de suivi asynchrone GA doit être chargé dans la tête, car il ne chargera pas le ga.js immédiatement et ne bloquera pas l'exécution de la page. (Il le fait en ajoutant dynamiquement la balise de script au DOM, ce qui le place à l'arrière de la file d'attente.)

Si, pour une raison quelconque, vous ne pouvez pas déplacer l'extrait de code asynchrone vers la tête, vous pouvez définir _gaq toi-même, comme ça-

<button onclick="var _gaq = _gaq || []; _gaq.Push(['_trackEvent', 'button3', 'clicked'])"/><button>
16
Spongeboy

Eu le même problème. Vous devez définir le _gaq tableau. Ajoutez simplement ceci après votre script Google Analytics dans l'en-tête:

var _gaq = _gaq || [];
_gaq.Push(['_setAccount', 'UA-XXXXXX-X']);
_gaq.Push(['_trackPageview']);
11
kaleazy

Vous pouvez utiliser la dernière version de analytics.js au lieu de ga.js

ga.js est une bibliothèque héritée. Si vous démarrez une nouvelle implémentation, nous vous recommandons d'utiliser la dernière version de cette bibliothèque, analytics.js. Pour les implémentations existantes, découvrez comment migrer de ga.js vers analytics.js.

Voici un exemple:

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

Changez le code de suivi en:

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