Analytics

Consigner les demandes Google Analytics ayant échoué dans Google Analytics

LISEZ CECI (26 août 2019) !! Malheureusement, la mise à jour que j’ai faite en 2016 contenait du code incomplet et cassé. Je ne l’ai jamais remarqué jusqu’à ce qu’on me le signale presque trois ans plus tard. À ce stade, je n’ai pas de sauvegarde fonctionnelle de la solution, donc à moins qu’un service d’archive/cache Internet ne parvienne à faire apparaître le code, cet article est fondamentalement perdu.

MISE À JOUR 20 décembre 2016 : j’ai apporté quelques correctifs à la solution – assurez-vous de récupérer le dernier extrait de code ci-dessous !

Ayant travaillé dans toutes sortes de projets Google Analytics au fil des ans, je me suis retrouvé de plus en plus intéressé par les fondements techniques de l’analyse numérique plutôt que par le travail analytique proprement dit. Nous jouons tous avec nos forces respectives, je suppose. Par exemple, il existe encore de nombreux technique / technologique mystères entourant Google Analytics, car une grande partie du traitement des données se fait côté serveur.

L’un de ces mystères est une boucle de rétroaction appropriée pour la qualité de la demande. Lorsque vous envoyez une requête à Google Analytics, telle qu’un appel Page View, vous pouvez vérifier qu’elle fonctionne de plusieurs manières :

  • Mode de débogage de Google Tag Manager

  • Débogueur Google Analytics

  • Rapports Google Analytics en temps réel

  • Enregistrements Google Tag Assistant

  • Outils de développement propres au navigateur Web

J’ai couvert une grande partie du débogage de Google Analytics dans cet article.

Cependant, quel que soit le succès de vos propres tests, il manque une chose : un moyen solide et fiable de collecter des données à partir de toutes les demandes échouées des visiteurs de votre site. Google Analytics n’enregistre pas automatiquement les problèmes de collecte de données, même si les notifications Analytics révèlent certains problèmes.

Cela peut, et devrait, conduire à un doute sain concernant la véracité de votre ensemble de données – s’agit-il d’un échantillon représentatif de tous les appels envoyés depuis votre propriété numérique, ou certaines informations critiques pour l’entreprise (telles que le commerce électronique) sont-elles abandonnées plus que la moyenne ?

Dans cet article, je souhaite montrer un moyen simple de consigner toutes les demandes ayant échoué dans Google Analytics en tant que nouveaux événements. La solution s’appuie sur l’incroyable GA Spy de Stephen Harris, et l’approche technique est encapsulée dans une seule balise HTML personnalisée dans Google Tag Manager.

débogage-duplicateur

Lisez la suite, mon ami!

La solution

Voici comment cela fonctionne.

  1. GA Spy traite chaque appel au ga() fonction globale.

  2. Pour chaque appel avec le send commande, envoyez la charge utile du hit à https://www.google-analytics.com/debug/collect (en savoir plus sur le /debug/ point final).

  3. N’oubliez pas d’envoyer le hit régulier à Google Analytics.

  4. Si la /debug/ renvoie une requête ayant échoué, poussez le message d’erreur et la charge utile du hit ayant échoué dans dataLayer.

En un mot, pour chaque hit envoyé à Google Analytics, vous envoyez également le même hit au point de terminaison de débogage GA. Ce point de terminaison renvoie des informations indiquant si la demande a réussi ou non et, si ce n’est pas le cas, ce qui n’allait pas.

{   "hitParsingResult": [ {     "valid": false,     "parserMessage": [ {       "messageType": "WARN",       "description": "The value provided for parameter 'ev' is invalid. Please see http://goo.gl/a8d4RP#ev for details.",       "messageCode": "VALUE_INVALID",       "parameter": "ev"     } ],     "hit": "..."   } ],   "parserMessage": [ {     "messageType": "INFO",     "description": "Found 1 hit in the request."   } ] }

À partir de dataLayer, j’envoie en fait ces informations à Google Analytics via GTM. De cette façon, vous vous retrouverez avec un rapport qui ressemble à ceci :

Messages d'erreur de Google Analytics

Heck, vous pouvez même cliquer sur l’un des messages d’erreur pour accéder aux charges utiles réelles. Par exemple, si je choisis ‘ea’ erreur, je peux voir les charges utiles et vérifier qu’en effet, il n’y a pas de paramètre d’action d’événement avec ces hits.

Détails du message d'erreur

Je peux ensuite aller sur GTM, trouver la balise incriminée et la corriger pour toujours envoyer une valeur dans Event Action.

En raison de l’abstraction de dataLayer, vous n’êtes pas obligé d’enregistrer ces informations dans Google Analytics. En fait, vous pourriez ne pas vouloir à, puisque vous avez peut-être déjà une sorte de configuration de plate-forme de journalisation dans votre processus de développement. Grâce à Google Tag Manager, vous pouvez pousser les données vers n’importe quel point de terminaison prenant en charge le transfert de données généré par JavaScript (par exemple, les requêtes HTTP).

Cependant, j’ai choisi d’envoyer les informations à Google Analytics. Ce faisant, je peux aligner ces erreurs de validation avec tous les autres hits que cet utilisateur particulier a envoyés à GA, et je peux ainsi potentiellement identifier des problèmes plus importants dont ces erreurs de validation pourraient n’être qu’un symptôme. Par exemple, il est possible qu’une balise de commerce électronique n’échoue que si l’utilisateur a suivi un entonnoir spécifique sur le site. En envoyant l’erreur de validation à Google Analytics, je peux voir si elle s’est produite lors de l’un de ces entonnoirs cassés, me donnant plus d’informations pour y remédier à la fin.

Comment faire

Vous avez essentiellement besoin d’un Balise HTML personnalisée qui tire sur le Toutes les pages déclencheur, avec une priorité de balise plus élevée que n’importe laquelle de vos balises Google Analytics qui pourraient également se déclencher lors de cet événement.

Il est important que ce code commence son exécution avant que vos balises Google Analytics aient une chance de démarrer. Ce code écrase le ga() et toute balise déjà déclenchée ne sera pas déboguée avec cette solution.

Vous aurez d’abord besoin du code réel pour GA Spy, et vous pouvez télécharger la dernière version à partir du référentiel de Stephen. Vous devez copier-coller le JavaScript dans une balise HTML personnalisée, puis ajouter l’écouteur personnalisé en dessous. Voici l’exemple complet, où j’ai réduit le code GA Spy pour le rendre plus compact. Faites défiler la partie GA Spy pour trouver la magie réelle.

<script> /* Minified GA Spy starts */ window.gaSpy=window.gaSpy||function(b){var j,k,c=function(a){if(b=null,a.debugLogPrefix=a.debugLogPrefix||"gaSpy",!a.callback||"function"!=typeof a.callback)throw new Error("["+a.debugLogPrefix+"] Aborting; No listener callback provided.");return a.gaObjName=a.gaObjName||window.GoogleAnalyticsObject||"ga",a.debug=!!a.debug,a}("function"==typeof b?{callback:b}:b),d=c.gaObjName,e=window[d],f=window.console&&c.debug;?function(){var a=[].slice.call(arguments);a.unshift("["+c.debugLogPrefix+"]"),console.log.apply(console,a)}:function(){},g=function(a){var b,d={args:a,the:{}},e=d.the;return c.debug&&function;(b,c){for(b="Intercepted: ga(",c=0;c1?b[0]:"t0",e.command=b.length>1?b[1]:b[0],b=b[b.length-1].split(":"),e.pluginName=b.length>1?b[0]:void 0,e.pluginMethodName=b.length>1?b[1]:void 0,"require"===e.command||"provide"===e.command?(e.pluginName=a[1],"provide"===e.command&&(e.pluginConstructor=a[2])):("send"===e.command&&(e.hitType=a[a.length-1]&&a;[a.length-1].hitType||a[1]),"object"==typeof a[a.length-1]&&(e.trackerName=a[a.length-1].name||e.trackerName))),f("Run listener callback",e),!1!==c.callback(d)},h=function(){var a=[].slice.call(arguments);if(c.debug){if(!g(a))return f("Command blocked.")}else try{if(!g(a))return}catch(a){}return f("Command allowed:",a),h._gaOrig.apply(h._gaOrig,a)},i=function(){var a,b=h._gaOrig=window[d];f("Hijack",b._gaOrig?"(already hijacked)":""),window[d]=h;for(a in b)b.hasOwnProperty(a)&&(window[d][a]=b[a])};if(f("Config:",c),e||(f("Instantiate GA command queue"),e=window[d]=function(){(window[d].q=window[d].q||[]).push(arguments)},e.l=1*new Date),e.getAll)f("GA already loaded; cannot see previous commands"),i();else{if(!e.l)throw new Error("["+c.debugLogPrefix+"] Aborting; `"+d+"` not the GA object.");if(f("Command queue instantiated, but library not yet loaded"),e.q&&e.q.length;){for(f("Applying listener to",e.q.length," queued commands"),j=[],k=0;k -1; })[0]                                .description;       var errorHit = data.hitParsingResult[0].hit;       window.dataLayer.push({         event: 'gaValidationError',         gaValidationError: {           description: errorDescription,           hit: errorHit         }       });     };          // If a 'send' command is registered, start the process     if (typeof ga === 'function' && trackerName && gaCommand === 'send') {       ga(function() {         tracker = ga.getByName(trackerName);         if (!tracker.get('debugDone')) {           originalSendTask = tracker.get('sendHitTask');           tracker.set('sendHitTask', buildDebugHit);         }       });     }   } catch(e) {     // Error handling   } }); </script>

Cette solution utilise l’API Universal Analytics Tasks pour copier la charge utile de hit envoyée à Google Analytics, et pour l’envoyer ensuite au point de terminaison du débogueur.

Puisque vous “détournez” Google Analytics ici, il est très important que vous testez cela à fond. Pour voir si cela fonctionne, vous devriez voir une requête POST à ​​/debug/collect pour chaque accès réel à /collect. Vous pouvez le trouver dans le débogueur réseau des outils de développement de votre navigateur. Voici à quoi ressemble la sortie dans Chrome :

Débogueur réseau

Encore une fois, pensez à le tester.

Envoyer les informations à Google Analytics

Pour envoyer les résultats d’erreur de validation à Google Analytics, vous aurez besoin d’un Balise Universal Analyticsdeux Variables de la couche de données et un Déclencheur d’événement personnalisé.

Les Variables de la couche de données doit pointer vers des noms de variables gaValidationError.description et gaValidationError.hit. Ils pourraient donc ressembler à ceci :

Variables de la couche de données

Ensuite, le Déclencheur d’événement personnalisé est une affaire simple, et ressemble à ceci:

Déclencheur d'événement personnalisé

Finalement, le Balise Universal Analytics est votre balise d’événement ordinaire, avec une seule modification importante. Vous devez définir une coutume Champs à définir champ à :

Nom de domaine: débogageTerminé
Évaluer: vrai

Ne vous embêtez pas à le rechercher dans la référence de champ pris en charge pour analytics.js, il n’y est pas. C’est un champ personnalisé que j’ai créé uniquement pour cette solution. Cela empêche deux choses : 1) les appels au point de terminaison de débogage se multiplient lorsque le même outil de suivi est utilisé, et 2) les appels au point de terminaison de débogage pour les événements d’erreur de validation.

Voici à quoi pourrait ressembler la balise d’événement :

Balise d'événement Universal Analytics

Cette balise particulière enverra chaque erreur de validation sous forme de événement sans interaction à Google Analytics, avec la description de l’erreur en tant qu’action d’événement et la charge utile d’accès interrompu en tant que libellé d’événement.

Résumé

Cette solution repose sur la génialité de GA Spy. Le script détourne essentiellement la méthode globale GA et copie toutes les commandes sur le point de terminaison de débogage.

Cette solution vous donne un autre outil pour valider votre configuration Google Analytics. Lorsque vous travaillez avec des configurations complexes de Google Tag Manager, il peut être difficile de garder un œil sur toutes les variables que vous utilisez. Cela peut entraîner des problèmes dans vos balises, lorsqu’un champ obligatoire se retrouve avec une valeur vide simplement parce qu’une variable n’a pas été résolue de la manière attendue. Cette solution vous permet de trouver facilement ces cas, vous donnant une voie claire pour les résoudre avant qu’ils ne deviennent un véritable problème de qualité des données.

Ce serait plutôt chouette d’avoir le /debug/ interface comme un outil que vous pouvez installer localement. De cette façon, vous n’auriez pas besoin de vous rendre sur les serveurs de Google Analytics et de valider les résultats sur votre propre serveur Web. D’un autre côté, la logique n’est probablement pas si complexe, donc l’avoir en tant que bibliothèque JavaScript dédiée serait également formidable. Dans tous les cas, le débogueur de point de terminaison est un outil vraiment fluide, en particulier lorsqu’il est combiné avec GA Spy, comme illustré dans cet article.

Une autre chose qui rendrait tout cela plus facile serait si la demande initiale de /collect renvoyait simplement la charge utile de débogage automatiquement. De cette façon, vous pourriez simplement consulter les réponses aux demandes GA sans avoir à faire le voyage supplémentaire pour /debug/. Je comprends que cela n’existe pas à cause de la latence et du fait que la plupart des accès à GA sont toujours effectués avec une requête GET. Pourtant, Google pourrait au moins en faire un paramètre configurable dans la demande GA.

Source : www.simoahava.com

Articles similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Index