A veces, en Administrador de etiquetas de Google Modo de depuración, verá aparecer etiquetas con el estado Aún corriendoy (eventualmente) notarás que estas etiquetas no están haciendo lo que se supone que deberían hacer.
Cuando ves este mensaje en una etiqueta, técnicamente significa esto:
La etiqueta no pudo indicarle a Google Tag Supervisor que estaba “lista”.
Naturalmente, la explicación técnica es demasiado easy para resultar útil. En este artículo, analizaré qué significa “hecho” y cómo las etiquetas de Google Analytics manifiestan este comportamiento.
Si solo te interesa esto último, no dudes en Salta a la sección pertinente de este artículo.
X
El boletín informativo de Simmer
Suscríbete a la Boletín informativo de Simmer ¡Para recibir las últimas noticias y contenidos de Simo Ahava en tu bandeja de entrada de correo electrónico!
¿Cuándo una etiqueta está “terminada”?
De forma predeterminada, una etiqueta se ejecuta cuando se ejecuta su código y el navegador está listo para pasar al siguiente bloque de script en la cola. Esto puede suceder si el navegador llega al remaining del script que debe ejecutarse. o si el script arroja un error que no se detecta.
Por ejemplo, tomemos un Etiqueta HTML personalizada Esto se ve así:
<script>
console.log('Whats up!');
script>
Cuando llega el momento de activar esta etiqueta, Google Tag Supervisor la inyecta al remaining de within the doc object mannequin, after which the browser proceeds to execute the code throughout the
bloquear.
Como todo esto se ejecuta de forma sincrónica, cuando el navegador haya escrito Whats up!
a la consola, está listo para pasar al siguiente script que espera ser ejecutado y GTM sabrá que esta etiqueta ahora está “lista”. El modo de vista previa mostrará que la etiqueta está lista. Exitoso.
¿Qué pasa si tenemos una operación asincrónica en el medio de la etiqueta?
Simulemos la asincronía con un tiempo de espera easy.
<script>
window.setTimeout(perform() {
console.log('Whats up!');
}, 5000);
script>
Esta vez, cuando se ejecuta el código JavaScript de la etiqueta, el navegador espera cinco segundos antes de escribir en la consola. Entonces, ¿cuándo indica GTM que se completó la etiqueta? No, no después de 5 segundos, sino después de que el navegador llega al remaining de la etiqueta. setTimeout
expresión.
Con operaciones asincrónicas, Google Tag Supervisor no esperarAl igual que con la secuencia de comandos sincrónica, tan pronto como el navegador llega al remaining del bloque de código, la etiqueta tiene Exitosoindependientemente de cuántas operaciones asincrónicas aún estén esperando completarse.
Puede indicarle a Google Tag Supervisor que esperar para que una operación asincrónica se full utilizando devoluciones de llamadasHay cuatro devoluciones de llamadas diferentes que puedes usar, según el caso de uso, para indicarle a Google Tag Supervisor que una etiqueta ha cumplido su ciclo:
-
window.google_tag_manager({{Container ID}}).onHtmlSuccess({{HTML ID}})
– esta es la devolución de llamada que usarías en Secuenciación de etiquetas para indicar a la siguiente etiqueta de la secuencia que la etiqueta precise se ha completado correctamente. Requiere queContainer ID
yHTML ID
Variables incorporadas a activar. -
window.google_tag_manager({{Container ID}}).onHtmlFailure({{HTML ID}})
– esta es la devolución de llamada que usarías en la secuenciación de etiquetas para señalar a la siguiente etiqueta en la secuencia que la etiqueta precise falló en su ejecución. -
knowledge.gtmOnSuccess()
– esta es la devolución de llamada que usarías en plantillas de etiquetas personalizadas para señalar que la etiqueta se ha completado correctamente. -
knowledge.gtmOnFailure()
– esta es la devolución de llamada que usarías en las plantillas de etiquetas personalizadas para señalar que la etiqueta falló en su ejecución.
Entonces, si quisiéramos que el navegador esperara el setTimeout
Para llamar a completar, lo usaríamos así:
<script>
window.setTimeout(perform() {
console.log('Whats up!');
window.google_tag_manager({{Container ID}}).onHtmlSuccess({{HTML ID}});
}, 5000);
script>
Si invoca la devolución de llamada con un retraso significativo (por ejemplo, 5 segundos), es posible que vea la etiqueta como Aún corriendo en modo de vista previa solo mientras dure el tiempo de espera. Tan pronto como se invoque la devolución de llamada de éxito, el estado cambiará de Aún corriendo a Exitoso (o Falla si esa es la devolución de llamada que ejecutaste).
Si recuerdas el capítulo anterior, si la etiqueta no tiene devoluciones de llamadas, GTM indicará la finalización una vez que llegue al remaining del bloque de código o si el bloque de código arroja un error de sintaxis. Por lo tanto, no hay forma de que una etiqueta como esta indique que “sigue ejecutándose”, ya que si el navegador nunca llega al remaining del bloque de código y el código nunca arroja un error, significa que el código está atascado en un bucle infinito o una pérdida de memoria, y todo el navegador se congelaría como resultado.
Sin embargotan pronto como agregue el google_tag_manager(...)
devoluciones de llamadas en una etiqueta HTML personalizada o knowledge
devoluciones de llamadas en una plantilla de etiqueta personalizada, GTM esperará activamente a que se ejecuten estas devoluciones de llamadas antes de señalar que la etiqueta está lista.
Por lo tanto, si el navegador nunca alcanza estas devoluciones de llamada, cuando sin embargo están presentes en el código, GTM nunca recibirá la señal de finalización y permanecerá en estado “Aún en ejecución”.
He aquí un ejemplo que hará que la etiqueta quede atrapada en el limbo “Aún en ejecución”.
<script>
if (false) {
window.google_tag_manager({{Container ID}}).onHtmlSuccess({{HTML ID}});
}
script>
El navegador nunca alcanzará la expresión dentro del if {...}
bloquear porque false
Nunca evaluaré a true
. Por lo tanto, GTM ha detectado una devolución de llamada exitosa escrita en el bloque de código y espera ansiosamente que se ejecute, pero nunca lo hará. Por lo tanto, en la opinión de GTM, la etiqueta se ejecuta de forma permanente.
Puede reemplazar la devolución de llamada con onHtmlFailure()
Para lograr el mismo resultado, basta con que cualquiera de las dos devoluciones de llamada esté presente para que Google Tag Supervisor espere activamente la resolución.
Con plantillas de etiquetases lo mismo. Si ejecutas esto:
if (false) {
knowledge.gtmOnSuccess();
}
Esta plantilla siempre tendría sus etiquetas bloqueadas en el estado “Aún en ejecución”, ya que no hay forma de acceder a esa devolución de llamada.
¿La lección que debemos aprender aquí?
Siempre que utilice devoluciones de llamadas en etiquetas HTML personalizadas, o siempre que cree plantillas de etiquetas personalizadas, asegúrese de que siempre se alcance al menos ALGUNA devolución de llamada.
Muchos de nosotros He experimentado el fenómeno “Nonetheless operating” con las etiquetas de Google Analytics.
Según lo que aprendimos en los capítulos anteriores, ahora nos encontramos en un punto muerto. Las etiquetas de Google Analytics no son etiquetas HTML personalizadas en las que se puedan corregir las devoluciones de llamadas, ni tampoco son plantillas de etiquetas personalizadas que se puedan modificar para que se invoque la devolución de llamada. Entonces, ¿qué son?
Son plantillas de etiquetas, donde éxito La devolución de llamada se llama tan pronto como la etiqueta de Google Analytics hitCallback
Se alcanza el método. Este hitCallback
se agrega automáticamente mediante Google Tag Supervisor (preservando cualquier hitCallback
(se agrega manualmente a la etiqueta).
Entonces, cuando una etiqueta de Google Analytics cube “Aún en ejecución”, significa que está… hitCallback
Nunca fue alcanzado.
¿Cómo ocurre esto? A continuación se indican las tres razones más comunes
1. Uso de una variable incorrecta en el campo ID de seguimiento
El ID de rastreo El campo de las etiquetas de Google Analytics (en Google Tag Supervisor) está reservado para el ID de seguimiento. El ID de seguimiento es el ID de su propiedad. UA-XXXXXX-Y
cadena.
Por lo tanto, la solo Lo que puedes tener en un campo de ID de seguimiento es esa cadena o una variable que devuelve esa cadena. y nada más.
Todavía es muy común ver personas que agregan un Variable de configuración de Google Analytics al campo de ID de seguimiento. Esto hace que el valor del campo de ID de seguimiento se resuelva en un objeto (de su configuración de Google Analytics) en lugar de la requerida UA-XXXXX-Y
cadena.
El resultado es que se crea un rastreador con configuraciones incorrectas y el hitCallback
Nunca se alcanza.
La mejor manera de depurar esto es usar el Extensión del navegador para el depurador de Google Analyticsy comprobar la salida de la consola. Si ves algo como esto, tu configuración está dañada:
¿Cómo arreglar esto?
Sencillo. Nunca utilices un Variable de configuración de Google Analytics en cualquier otro lugar excepto un campo de configuración de Google Analytics. Siempre verifique y vuelva a verificar que ID de rastreo El campo contiene un valor o variable que se resuelve en UA-XXXXXX-Y
.
2. El ga()
El método es secuestrado por algún otro código que se ejecuta en el sitio.
Si alguna otra herramienta sobrescribe el world ga()
método, significa que ya no existe tal cosa como un “hit de Google Analytics” o “rastreador de Google Analytics” y, como consecuencia, el hitCallback
Nunca se alcanza. Google Tag Supervisor ve la devolución de llamada en el código y por lo tanto la espera, pero como el método world ya no funciona, la devolución de llamada nunca se alcanza.
La forma más fácil de verificar esto es abrir el Consola de JavaScript de su página y ejecute el siguiente comando:
console.log(window(window('GoogleAnalyticsObject')).reply);
Si el método tiene no se ha sobrescrito, debería ver el número 42
escrito en la consola. Esto es una señal de que la biblioteca analytics.js todavía funciona con el método world.
Si ves algo más, lo más possible es que sea… undefined
o un error, significaría que hay algo mal con el método world.
¡NOTA! Los bloqueadores de anuncios deberían no tenga voz y voto aquí. Si el punto remaining de Google Analytics está bloqueado, hitCallback
Aún así se alcanzaría, y si todo el análisis.js La biblioteca está bloqueada, la ga()
El comando nunca se invocaría en primer lugar.
¿Cómo arreglar esto?
Puede cambiar el nombre del método world a, por ejemplo: my_ga
en sus etiquetas de Google Analytics (en GTM) expandiendo Configuración avanzada y actualizar el Nombre de la función world campo. Esto debe hacerse de manera consistente en Todas tus etiquetaspor lo que es posible que desees utilizar un Variable de configuración de Google Analytics.
Si está utilizando analytics.js, puede cambiar el nombre del método en el retazo.
3. No existe ningún contenedor Optimize cargado en el sitio
Esto es muy molesto. En mi opinión, es un error actual y lo he informado como tal.
Si crea una etiqueta de Google Optimize, en realidad carga el contenedor de Optimize como una etiqueta de Common Analytics. enchufarEl motivo es que el complemento se utiliza para enviar datos experimentales a Google Analytics.
El problema es que en caso de que el contenedor Optimize no exista (lo hayas eliminado o hayas tenido un error tipográfico en el ID del contenedor), la carga del complemento nunca se resuelve y el procesamiento del ga()
La cola está detenida.
Esto, a su vez, significa que Cualquier etiqueta de Google Analytics que se energetic después de que se haya activado la etiqueta contenedora Optimize no se ejecutaráDebido a que el complemento nunca se carga, la cola espera perpetuamente que se resuelva la carga del complemento.
Puedes comprobarlo utilizando de nuevo la extensión Google Analytics Debugger. En la consola, verás algo parecido a esto:
¿Cómo arreglar esto?
La mejor manera de solucionar este problema es evitar eliminar los contenedores Optimize cuando ya no se utilizan. De esa manera, evitará que el sitio se detenga.
A continuación, asegúrese de que el ID del contenedor esté escrito correctamente en la etiqueta.
Por último, una buena práctica para la carga del sitio es cargar el contenedor Optimize únicamente en las páginas en las que se realizan experimentos. No tiene sentido introducir una carga adicional en las páginas en las que no se utiliza el contenedor.
Resumen
A pesar de todo lo bueno que hace el modo de depuración de Google Tag Supervisor, deja algo que desear en términos de verbosidad e identificación de dónde está el problema.
Las plantillas nativas en explicit son cajas negras. No hay forma de saber por qué una etiqueta de Google Analytics indica que se ha completado o se ha agotado el tiempo de espera sin realizar pruebas de prueba y error.
Con las instrucciones proporcionadas en este artículo, debería poder depurar y solucionar esos molestos problemas de “Aún en ejecución” que pueda tener con sus etiquetas.
Avísame en los comentarios si encuentras un caso de uso que no se haya abordado en este artículo. ¡Con gusto actualizaré el texto y te felicitaré por ayudarme a identificar un caso de problema no explorado!