Analytics

Toujours en cours d’exécution des balises Google Tag Manager : que faire ?

Parfois, dans le mode débogage de Google Tag Manager, vous verrez des balises apparaître avec le statut Cours toujourset vous remarquerez (éventuellement) que ces balises ne font pas ce qu’elles sont censées faire.

Balise toujours en cours d'exécution

Lorsque vous voyez ce message sur une étiquette, cela signifie techniquement ceci :

La balise n’a pas signalé à Google Tag Manager qu’elle était “terminée”.

L’explication technique est, naturellement, trop simple pour être utile. Dans cet article, j’explorerai ce que signifie “fait” et comment les balises Google Analytics manifestent ce comportement.

Si vous n’êtes intéressé que par ce dernier, n’hésitez pas à passer à la section correspondante de cet article.

Quand une balise est-elle “terminée” ?

Par défaut, une balise est terminée lorsque son code est exécuté et le navigateur est prêt à passer au bloc de script suivant dans la file d’attente. Cela peut arriver si le navigateur arrive à la fin du script à son tour à exécuter, ou si le script renvoie une erreur qui n’est pas interceptée.

Par exemple, prenez un Balise HTML personnalisée ça ressemble à ça :

<script>   console.log('Hello!'); </script>

Lorsqu’il est temps de déclencher cette balise, Google Tag Manager injecte cette balise à la fin de <body> dans le modèle d’objet de document, puis le navigateur procède à l’exécution du code dans le <script> bloc.

Comme tout est exécuté de manière synchrone, au moment où le navigateur a écrit Hello! à la console, il est prêt à passer au prochain script en attente d’exécution, et GTM saura ainsi que cette balise est désormais « terminée ». Le mode Aperçu montrera que la balise a Réussi.

Qu’en est-il si nous avons une opération asynchrone au milieu de la balise ?

Simulons async avec un simple timeout.

<script>   window.setTimeout(function() {     console.log('Hello!');   }, 5000); </script>

Cette fois, lorsque le JavaScript de la balise est exécuté, le navigateur attend cinq secondes avant d’écrire dans la console. Alors, quand GTM signale-t-il l’achèvement de la balise ? Non, pas après 5 secondes, mais plutôt après que le navigateur ait atteint la fin du setTimeout expression.

Avec les opérations asynchrones, Google Tag Manager ne Attendez. Comme pour les scripts synchrones, dès que le navigateur atteint la fin du bloc de code, la balise a Réussiquel que soit le nombre d’opérations asynchrones en attente d’achèvement.

Vous pouvez demander à Google Tag Manager de Attendez pour qu’une opération asynchrone se termine en utilisant rappels. Il existe quatre rappels différents que vous utiliseriez, selon le cas d’utilisation, pour signaler à Google Tag Manager qu’une balise a suivi son cours :

  1. window.google_tag_manager[{{Container ID}}].onHtmlSuccess({{HTML ID}}) – il s’agit du rappel que vous utiliseriez dans le séquençage des balises pour signaler à la balise suivante dans la séquence que la balise actuelle s’est terminée avec succès. Il nécessite le Container ID et HTML ID Variables intégrées à activer.

  2. window.google_tag_manager[{{Container ID}}].onHtmlFailure({{HTML ID}}) – c’est le rappel que vous utiliseriez dans Tag Sequencing pour signaler à la balise suivante dans la séquence que la balise actuelle a échoué dans son exécution.

  3. data.gtmOnSuccess() – il s’agit du rappel que vous utiliseriez dans les modèles de balises personnalisées pour signaler que la balise s’est terminée avec succès.

  4. data.gtmOnFailure() – il s’agit du rappel que vous utiliseriez dans les modèles de balises personnalisées pour signaler que la balise a échoué dans son exécution.

Donc, si nous voulions que le navigateur attende le setTimeout call to complete, nous l’utiliserions comme ceci:

<script>   window.setTimeout(function() {     console.log('Hello!');     window.google_tag_manager[{{Container ID}}].onHtmlSuccess({{HTML ID}});   }, 5000); </script>

Si vous appelez le rappel avec un retard important (par exemple, 5 secondes), vous pouvez voir la balise comme Cours toujours en mode Aperçu uniquement pendant la durée du délai d’attente. Dès que le rappel de succès est appelé, le statut passe de Cours toujours pour Réussi (ou alors Échec si c’est le rappel avec lequel vous avez couru).

Alors, pourquoi les balises restent-elles à l’état “Toujours en cours d’exécution” ?

Si vous vous souvenez du chapitre précédent, si la balise n’a pas de rappels, GTM signalera l’achèvement une fois qu’il aura atteint la fin du bloc de code ou si le bloc de code génère une erreur de syntaxe. Ainsi, il n’y a aucun moyen réel pour une balise comme celle-ci de signaler qu’elle est “Toujours en cours d’exécution”, comme si le navigateur n’atteignait jamais la fin du bloc de code et que le code ne renvoyait jamais d’erreur, cela signifie que le code est bloqué dans une boucle infinie ou fuite de mémoire, et l’ensemble du navigateur se figeait en conséquence.

Cependantdès que vous ajoutez soit le google_tag_manager[...] rappels dans une balise HTML personnalisée ou data rappels dans un modèle de tag personnalisé, GTM attendra activement que ces rappels s’exécutent avant de signaler que le tag est terminé.

Ergo, si le navigateur n’a jamais atteint ces rappels alors qu’ils sont pourtant présents dans le code, GTM ne recevra jamais le signal d’achèvement et restera dans l’état « Toujours en cours d’exécution ».

Voici un exemple qui entraînera le blocage de la balise dans les limbes “Toujours en cours d’exécution”.

<script>   if (false) {     window.google_tag_manager[{{Container ID}}].onHtmlSuccess({{HTML ID}});   } </script>

Le navigateur n’atteindra jamais l’expression dans le if {...} bloquer parce que false n’évaluera jamais à true. Ainsi, GTM a détecté un rappel de succès écrit dans le bloc de code, et il attend anxieusement qu’il soit exécuté, mais il ne le fera jamais. Ainsi, du point de vue de GTM, la balise est perpétuellement en cours d’exécution.

Vous pouvez remplacer le rappel par onHtmlFailure() pour arriver au même résultat. Il suffit que l’un ou l’autre des rappels soit présent pour que Google Tag Manager attende activement la résolution.

Avec modèles de balises, c’est la même chose. Si vous exécutez ceci :

if (false) {   data.gtmOnSuccess(); } 

Ce modèle aurait toujours ses balises bloquées dans l’état “Toujours en cours d’exécution”, car il n’y a aucun moyen d’atteindre ce rappel.

La leçon à retenir ici ?

Chaque fois que vous utilisez des rappels dans les balises HTML personnalisées ou chaque fois que vous créez des modèles de balises personnalisées, assurez-vous qu’au moins CERTAINS rappels sont toujours atteints.

Balises Google Analytics “Toujours en cours d’exécution”

Nous sommes nombreux à avoir connu le phénomène « Still running » avec les balises Google Analytics.

D’après ce que nous avons appris dans les chapitres précédents, nous sommes maintenant dans une impasse. Les balises Google Analytics ne sont pas des balises HTML personnalisées dans lesquelles vous pouvez corriger les rappels, ni des modèles de balises personnalisées que vous pouvez modifier pour que le rappel soit appelé. Alors, quels sont-ils?

Ce sont des modèles de balises, où le Succès le rappel est appelé dès que la balise Google Analytics hitCallback méthode est atteinte. Cette hitCallback est automatiquement ajouté par Google Tag Manager (en préservant hitCallback vous ajoutez manuellement à la balise).

hitCallback

Ainsi, lorsqu’une balise Google Analytics est “Toujours en cours d’exécution”, cela signifie que son hitCallback n’a jamais été atteint.

Comment cela peut-il arriver? Voici les trois raisons les plus courantes.

1. Utilisation d’une variable incorrecte dans le champ ID de suivi

Les ID de suivi dans vos balises Google Analytics (dans Google Tag Manager) est réservé à l’identifiant de suivi. L’identifiant de suivi est celui de votre propriété UA-XXXXXX-Y chaîne.

Ainsi, le seul chose que vous pouvez avoir dans un champ ID de suivi est cette chaîne, ou une variable qui renvoie cette chaîne et rien d’autre.

Il est encore extrêmement courant de voir des gens ajouter un Variable Paramètres de Google Analytics au champ ID de suivi. Cela entraîne la résolution de la valeur du champ ID de suivi en un chose (de vos paramètres Google Analytics) plutôt que les informations requises UA-XXXXX-Y chaîne.

ID de suivi des paramètres

Le résultat est qu’un tracker est créé avec des paramètres incorrects, et le hitCallback n’est jamais atteint.

La meilleure façon de déboguer cela consiste à utiliser l’extension de navigateur Google Analytics Debugger et à vérifier la sortie de la console. Si vous voyez quelque chose comme ça, votre configuration est cassée :

Cible inconnue

Comment régler ceci?

Simple. N’utilisez jamais un Variable Paramètres de Google Analytics n’importe où ailleurs à l’exception d’un champ Paramètres Google Analytics. Vérifiez et revérifiez toujours que le ID de suivi le champ contient une valeur ou une variable qui se résout en UA-XXXXXX-Y.

2. Le ga() la méthode est piratée par un autre code exécuté sur le site

Si un autre outil écrase le global ga() méthode, cela signifie qu’il n’existe plus de “hit Google Analytics”, ou “tracker Google Analytics”, et par conséquent le hitCallback n’est jamais atteint. Gestionnaire de balises Google voit le callback dans le code et l’attend donc, mais comme la méthode globale ne fonctionne plus, le callback n’est jamais atteint.

Méthode GA écrasée

Le moyen le plus simple de vérifier cela est d’ouvrir le ConsoleJavaScript de votre page, et en exécutant la commande suivante :

console.log(window[window['GoogleAnalyticsObject']].answer); 

Si la méthode a ne pas été écrasé, vous devriez voir le numéro 42 écrit dans la console. C’est un signe que la bibliothèque analytics.js fonctionne toujours avec la méthode globale.

Si vous voyez autre chose, probablement soit undefined ou une erreur, cela signifierait qu’il y a quelque chose qui ne va pas avec la méthode globale.

REMARQUE! Les bloqueurs de publicités doivent ne pas avoir son mot à dire ici. Si le point de terminaison Google Analytics est bloqué, le hitCallback serait encore atteint, et si l’ensemble analytics.js bibliothèque est bloquée, le ga() commande ne serait jamais invoquée en premier lieu.

Comment régler ceci?

Vous pouvez changer le nom de la méthode globale par exemple my_ga dans vos balises Google Analytics (dans GTM) en développant Configuration avancée et la mise à jour du Nom de la fonction globale domaine. Cela doit être fait systématiquement dans toutes vos balisesvous pouvez donc utiliser une variable de paramètres Google Analytics.

Nom de la fonction globale

Si vous utilisez analytics.js, vous pouvez renommer le nom de la méthode dans l’extrait de code.

3. Conteneur Optimize inexistant chargé sur le site

C’est super ennuyeux. C’est un bug de bonne foi à mon avis, et je l’ai signalé comme tel.

Si vous créez une balise Google Optimize, elle charge en fait le conteneur Optimize en tant que plug-in Universal Analytics. La raison en est que le plugin est utilisé pour envoyer des données d’expérience à Google Analytics.

Le problème est que dans le cas où le conteneur Optimize n’existe pas (vous l’avez supprimé ou vous avez eu une faute de frappe dans l’ID du conteneur), le chargement du plugin n’est jamais résolu et le traitement du ga() file d’attente est arrêtée.

Ceci, à son tour, signifie que toute balise Google Analytics déclenchée après le déclenchement de la balise de conteneur Optimize ne s’exécutera pas. Comme le plugin n’est jamais chargé, la file d’attente attend perpétuellement que le chargement du plugin soit résolu.

Vous pouvez le voir en utilisant à nouveau l’extension Google Analytics Debugger. Dans la console, vous verrez quelque chose comme ceci :

En attente d'optimisation

Comment régler ceci?

Le meilleur moyen de résoudre ce problème consiste à éviter de supprimer les conteneurs Optimize lorsqu’ils ne sont plus utilisés. De cette façon, vous éviterez de bloquer le site.

Ensuite, assurez-vous que l’ID du conteneur est correctement écrit dans la balise.

Enfin, une bonne pratique également pour le chargement du site consiste à ne charger le conteneur Optimize que sur les pages où vous exécutez des tests. Cela n’a pas de sens d’introduire la charge supplémentaire sur les pages où le conteneur n’est pas utilisé.

Résumé

Malgré tout le bien que fait le mode de débogage de Google Tag Manager, il laisse à désirer en termes de verbosité et d’identification du problème.

Les modèles natifs sont en particulier des boîtes noires. Il n’y a aucun moyen de savoir pourquoi une balise Google Analytics signale l’achèvement ou l’expiration sans test par essais et erreurs.

Avec les instructions fournies dans cet article, vous devriez être en mesure de déboguer et de résoudre ces problèmes embêtants “en cours d’exécution” que vous pourriez rencontrer avec vos balises.

Faites-moi savoir dans les commentaires si vous rencontrez un cas d’utilisation non couvert par cet article. Je me ferai un plaisir de mettre à jour le texte avec des félicitations à vous pour avoir aidé à identifier un cas de problème inexploré !

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