web-dev-qa-db-fra.com

Événements non suivis dans la nouvelle configuration de Google Analytics (analytics.js)

J'ai un site Web que j'utilise avec le nouveau Universal Analytics (analytics.js) pour effectuer le suivi. Tout est configuré et fonctionne (pages vues, références, etc.) à l'aide de l'extrait de code suivant:

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).Push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-39570713-1', 'site.com');
  ga('send', 'pageview');

</script>

Cela se trouve avant la balise </head>.

J'utilise JQuery pour déclencher un événement. J'ai testé le JQuery avec un message d'alerte et on l'appelle, ce n'est donc pas le problème. Voici l'extrait qui se déclenche lorsqu'un clic est effectué sur un bouton:

$('#submitButton').on('click', function() {
      ga('send', 'event', 'button', 'click', 'contact form');
    });

Rien n'apparaît dans la section Evénements d'Analytics. Je continue à cliquer sur le bouton, même à partir de différents ordinateurs, juste pour m'assurer que mon adresse IP n'est pas exclue. Comme le document Analytics fourni par Google ne fournit pas beaucoup d'explications, je suis perdu ici.

19
squeezemylime

Si vous utilisez Google Tag Manager et souhaitez également déclencher certains événements via le code, ga('send'...) ne semble pas être suffisant. Vous devez d'abord récupérer l'objet d'analyse approprié:

if ("ga" in window) {
    tracker = ga.getAll()[0];
    if (tracker)
        tracker.send("event", "Test", "Test GA");
}

Notez que cela suppose que vous n'utilisez qu'un seul code de suivi Google Analytics sur votre site. Si vous utilisez plusieurs, vous devrez peut-être récupérer celui qui convient par nom ou index.

79
Sanjay Vamja

À des fins de test, vous pouvez également utiliser la méthode hitCallback:

ga('send', {
  'hitType': 'event',         
  'eventCategory': 'button', 
  'eventAction': 'click',     
  'eventLabel': 'contact form',
  'hitCallback' : function () {
      alert("Event received");
   }
});

Mise à jour: une virgule était manquante.

6
Dom

J'ai eu exactement le même problème. Je devais créer une nouvelle propriété et sélectionner "Universal Analytics" au lieu de "Classic Analytics" (le libellé "bêta"). Maintenant, les événements sont capturés correctement.

4
extrabacon

Dans mon cas, le problème était uBlock Origin qui bloquait le chargement du script d'analyse.

3
user1139733

J'ai eu le même problème, et je pense avoir trouvé la solution, mais cela me laisse vraiment un mauvais goût dans la bouche pour Universal Analytics.

Ce que je devais faire était d'utiliser explicitement l'API d'analyse synchrone. Ainsi, au lieu d'inclure l'extrait de code habituel dans votre balise <head>, utilisez le code suivant:

<script src="//www.google-analytics.com/analytics.js"></script>
<script>
  tracker = ga.create('UA-XXXXXXX-1', 'example.com');
  tracker.send('pageview');
</script>

Ensuite, vous appelez le code de suivi des événements comme suit:

tracker.send('event', 'Category', 'Action', 'Label');

Cela garantira que la balise de suivi est envoyée à Google et accusée réception / avant que la page vers laquelle l'utilisateur a accédé commence à se charger.

Cela suggère qu'Universal Analytics nécessite une sorte d'accusé de réception supplémentaire par rapport à l'ancien code d'analyse ga.js requis. Ainsi, lorsque vous attachez un événement à un clic qui amène l'utilisateur à une autre page, cet accusé de réception ne peut pas être envoyé car le navigateur a quitté la page et abandonné la pile d'exécution JavaScript actuelle.

Peut-être que ce problème est spécifique à certains environnements d'exécution (j'utilise Chrome 34 sur OSX Mountain Lion), ce qui pourrait expliquer pourquoi davantage de développeurs ne le remarquent pas.

3
CoreDumpError

Je ne vois rien d'anormal dans le code lui-même. Avez-vous essayé d'utiliser le suivi d'événement alternatif?

ga('send', {
  'hitType': 'event',          // Required.
  'eventCategory': 'button',   // Required.
  'eventAction': 'click',      // Required.
  'eventLabel': 'contact form'
});

Je suggérerais également de tester le site Web avec le complément GA Debug Chrome, qui vous permet de voir si la balise de suivi a été envoyée.

La documentation de débogage "officielle" pour Universal Analytics est toujours manquante, mais elle devrait être ajoutée prochainement car ga_debug.js fournit de nombreux moyens utiles pour savoir ce qui ne va pas avec la mise en oeuvre d'Analytics ...

1
Petr Havlik

aujourd'hui, j'avais besoin de mettre en place des analyses pour la première fois et je me suis retrouvé dans le même problème.

J'ai trouvé que le moyen le plus simple de traiter avec plusieurs trackers pour éviter la getAll() est la suivante:

<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).Push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-xxxxxx-y', 'auto', 'tracker');
ga('tracker.send', 'pageview');
ga('tracker.send', 'event', 'test', 'click', 'automaticEvent')

Notez que vous devez transmettre un "nom" à la méthode create, puis vous envoyez un événement à ce suivi avec ga([trackerName].send, ...).

Référence: https://developers.google.com/analytics/devguides/collection/analyticsjs/accessing-trackers

1

J'ai le même problème et il semble que les événements soient suivis, mais le tableau de bord GA ne permet pas de les parcourir. C’est le seul moyen d’interpréter les événements "Visites avec événements: 1071" mais "Total des événements: 0" affichés par le tableau de bord GA.

UPD: Avec GA le débogage de Chrome, j'ai trouvé un problème. La 1ère méthode ne fonctionne pas (envoie l'événement sans aucune donnée en pièce jointe), mais la 2ème est OK.

0
Yuriy Silvestrov

Vous devez également considérer qu'il est probable que la page soit rechargée après le déclenchement de l'événement submit avant que le script ga puisse exécuter la méthode 'send'. Pour éviter cela, vous pouvez utiliser le mécanisme 'hitCallback', c'est-à-dire empêcher l'envoi, appeler la méthode ga send et soumettre les données du formulaire dans le rappel.

0
Nicolas Zimmer

Je recommande d'envoyer un événement GTM via window.dataLayer.Push({ event: 'EVENT_NAME', ...data }) et de créer dans GTM un déclencheur pour déclencher une balise qui envoie un événement à Google Analytics. Vous aurez la meilleure expérience de débogage avec l’aperçu GTM et vous serez sûr que les événements seront envoyés de GTM à GA, car GTM s’occupe de cela.

0
Daniel Kmak

Je l'ai fait fonctionner - mon exemple utilise la nouvelle Universal Analytics.

<script type="text/javascript">
    function sliderOnChange() {
    var period = window.convertDays(($("#PeriodSlider").slider("value")));
    var amount_of_credit = $("#AmountOfCreditSlider").slider("value");
    var gaEventInput = "£" + amount_of_credit + " for " + period;
    ga('send', 'event', 'slider', 'sliding', gaEventInput);
}
</script>
  1. Assurez-vous que les filtres de Google Analytics/Google Tag Manager n'excluent pas le trafic provenant de différents domaines. (Peut-être que vous le testez pour que cela fonctionne avec un domaine différent)
  2. Revérifiez votre identifiant GA et votre domaine dans ga ('create', 'UA-39570713-1', 'site.com');
  3. Créez un nouveau profil dans Google Analytics (GA) à des fins de test et déboguez votre code HTML dans le même domaine que celui défini dans GA.
  4. Changez la date pour qu'elle soit aujourd'hui dans GA - vous devrez peut-être attendre un certain temps avant qu'elle n'apparaisse dans GA.
0
Kristjan Kure