Para muchos, parece, una de las justificaciones más importantes para Administrador de etiquetas de Google del lado del servidor es su resistencia a bloqueadores de publicidad y contenido. Después de todo, en virtud de servir el contenedor JavaScript desde tu propio dominioescapas de muchos de los dispositivos heurísticos que emplean las tecnologías de bloqueo actuales.
Bueno, he dejado constancia una y otra vez para decir cómo es esto. mala justificación para usar GTM del lado del servidor. Al eludir el derecho del usuario desear al bloquear scripts, les está faltando el respeto y obligando a su navegador a descargar scripts que querían evitar descargar en primer lugar.
Sin embargo, este no es otro artículo que lamenta esta desconexión entre los analistas ávidos de datos y los visitantes desprevenidos del sitio.
En lugar de eso, quiero tomar la tecnología que te permita evitar y en su lugar usarlo para detectar.
Si bien se debe permitir que los bloqueadores de publicidad y contenido sigan su curso, creo que es absolutamente important medir su impacto. De esa manera, puede calcular cuántos de sus análisis y solicitudes de anuncios están bloqueados debido a estas herramientas.
¡Incluso puedes usar la tecnología de detección para bloquear condicionalmente tus etiquetas del lado del servidor! De esta manera podrás actuar verdaderamente según los deseos del usuario. y mantenga vivos esos flujos de datos entre el navegador y el contenedor del servidor.
Por cierto, si te interesa saber más sobre bloqueadores de publicidad y contenido en normal, te recomiendo escuchar este episodio del podcast del Handbook de advertising técnicodonde me entrevisté Pete Snyder de Valiente sobre este mismo tema.
X
El boletín a fuego lento
Suscríbete al Boletín a fuego lento para recibir las últimas noticias y contenido de Simo Ahava en su bandeja de entrada de correo electrónico.
Medición del impacto del bloqueador
Comencemos con una advertencia importante (la primera de muchas):
Esto es un prueba de concepto. Lo que le muestro aquí son algunos de los componentes que necesita para crear el sistema de detección, pero la mayor parte del trabajo debe realizarse en el lado del cliente (donde ocurre la detección), por lo que debe ajustar estas concepts para que tengan sentido para qué su el sitio continúa.
En este artículo, te mostraré cómo mido tres cosas diferentes:
- La proporción de visitas a la página de inicio donde anuncios fueron bloqueados.
- La proporción de visitas a la página de inicio donde Google analitico fue bloqueado.
- La proporción de visitas a la página de inicio donde Administrador de etiquetas de Google fue bloqueado.
Hay advertencias adicionales relacionadas con cada una de estas mediciones, pero las abordaré cuando surjan.
Tenga en cuenta que para comprender todo lo que está sucediendo aquí, necesita una comprensión bastante buena de etiquetado del lado del servidor. Si aún no lo has configurado te recomiendo que le eches un vistazo mi artículo sobre el tema.
Plantilla de cliente personalizada
Estoy usando una costumbre Plantilla de cliente en el contenedor del servidor para recoger solicitudes para el bloqueador de anuncios archivo de cebo así como para el píxel que se utiliza para generar un objeto de datos de evento.
El archivo cebo contiene instrucciones para que el navegador genere un elemento con el ID GxsCRdhiJi
. Este es el elemento que debes buscar para ver si el archivo fue bloqueado o no.
secuencia de comandos del lado del cliente
La mayor parte de la magia debe realizarse en el lado del cliente.
En la plantilla de página de mi sitio, estoy ejecutando el siguiente script en la página HTML. Sí, debe hacer esto fuera de Google Tag Supervisor, porque si GTM está bloqueado, no podrá medir el impacto debido a que el script del lado del cliente también estará bloqueado.
(operate() {
// Set these to the endpoints configured within the Shopper template
var baitPath = 'https://sgtm.simoahava.com/ads-min.js';
var pixelPath = 'https://sgtm.simoahava.com/4dchk';
// Stop the script from working outdoors the house web page
if (doc.location.pathname !== '/') return;
// Inject the bait file
var el = doc.createElement('script');
el.src = baitPath;
doc.physique.appendChild(el);
var gaBlocked = false;
// Run the detections at web page load to keep away from race situations
window.addEventListener('load', operate() {
// Ship a HEAD request for the Common Analytics library to see if it is blocked
fetch('https://www.google-analytics.com/analytics.js', {technique: 'HEAD', mode: 'no-cors'})
.catch(operate() {
// If the load failed, assume GA was blocked
gaBlocked = true;
})
.lastly(operate() {
// Construct the GA4 parameters, add further parameters at your leisure
var params = {
ads_blocked: !doc.querySelector('#GxsCRdhiJi'), // Detect if the bait file was blocked
gtm_blocked: !(window.google_tag_manager && window.google_tag_manager.dataLayer), // Detect if gtm.js was blocked
ga_blocked: gaBlocked // Detect if analytics.js was blocked
};
// Construct the pixel request with a singular, random Shopper ID
var cid = Math.flooring((Math.random() * 1000000) + 1) + '_' + new Date().getTime();
var img = doc.createElement('img');
img.fashion = 'width: 1; top: 1; show: none;';
img.src = pixelPath + '?client_id=' + cid + '&' + Object.keys(params).scale back(operate(acc, cur) { return acc.concat(cur + '=' + params(cur));}, ()).be a part of('&');
doc.physique.appendChild(img);
});
});
})();
Solo quiero ejecutar este script en la página de inicio y, como soy muy vago editando mis plantillas, simplemente salgo de la función si la ruta de la página precise no es la raíz del sitio.
Para baitPath
y pixelPath
, configure los ajustes correspondientes que agregó a la plantilla del Cliente. Los valores predeterminados son /ads-min.js
para la ruta del archivo de cebo, y /4dchk
para la ruta de píxeles.
En los siguientes capítulos, le diré cómo mido el uso de bloqueadores de anuncios, el bloqueo de Google Analytics y el bloqueo de Google Tag Supervisor.
Medición de bloqueadores de publicidad
Para medir el impacto de bloqueadores de publicidadEstoy usando un antiguo sistema heurístico para detectar si el navegador está bloqueando anuncios.
El navegador envía una solicitud al contenedor del servidor, donde Plantilla de cliente lo recoge. La solicitud debe ser para un archivo que los bloqueadores de publicidad bloquean con mayor frecuencia, como anuncios-min.js.
...
var baitPath = 'https://sgtm.simoahava.com/ads-min.js';
var el = doc.createElement('script');
el.src = baitPath;
doc.physique.appendChild(el);
...
El propósito del archivo es crear un elemento HTML ficticio en la página con una ID específica (GxsCRdhiJi
si está utilizando la plantilla predeterminada). Si el elemento no existe cuando lo consulta, significa que la descarga falló por algún motivo u otro, uno de los cuales podría deberse a bloqueadores de anuncios.
Advertencia: No sabemos por qué falló la descarga. Podría deberse a un bloqueador de publicidad, pero también podría deberse a un error de pink o algo más. Por eso siempre hay cierta incertidumbre a este respecto.
Tenga en cuenta también que las listas de filtros como Desconectar.meutilizado, por ejemplo, en Mozilla Firefox y Microsoft Edge, el patrón coincide con el nombre de dominio, lo que hace que sea muy difícil detectarlos con una solución personalizada.
Medición de bloqueadores GA
Para medir si Google Analytics está bloqueado o no, estoy usando un método muy easy. corro un fetch()
Solicite la biblioteca JavaScript de Common Analytics. Si esa solicitud falla, lo atribuiré al bloqueo de GA.
La solicitud se envía con el método HEAD para evitar que se agoten los recursos del navegador y se envía con el no-cors
modo para evitar problemas de CORS.
Así es como se ve la solicitud:
...
fetch('https://www.google-analytics.com/analytics.js', {technique: 'HEAD', mode: 'no-cors'})
.catch(() => {
// GA is blocked
});
...
Advertencia: Nuevamente, no sabemos si es un bloqueador que impide que GA se cargue. Además, por ejemplo, en Firefox, incluso en Home windows privado, se permite cargar Google Analytics, pero sus métodos principales son calzado para impedir que funcione. Este enfoque explicit no sería capaz de detectar ese tipo de bloqueo.
Medición de bloqueadores de GTM
Para GTM, estamos tomando una incluso enfoque más easy. En el momento de cargar la ventana, comprobaremos si el window.google_tag_manager
Se ha creado la interfaz y que también tiene el objeto anidado. window.google_tag_manager.dataLayer
.
...
gtm_blocked: !(window.google_tag_manager && window.google_tag_manager.dataLayer)
...
Advertencia: Todas las advertencias antes mencionadas se aplican, nuevamente. Y es importante recordar que, por ejemplo, en Firefox, el sistema world
window.google_tag_manager
interfaz es creado, pero desdedataLayer.push
está ajustado, GTM en sí no funcionará.
Envío de la solicitud de píxel al contenedor del servidor
Una vez que tenga sus valores booleanos para saber si estos tres vectores están bloqueados o no, es hora de juntar todo.
window.addEventListener('load', operate() {
fetch('https://www.google-analytics.com/analytics.js', {technique: 'HEAD', mode: 'no-cors'})
.catch(operate() {
gaBlocked = true;
})
.lastly(operate() {
var params = {
ads_blocked: !doc.querySelector('#GxsCRdhiJi'),
gtm_blocked: !(window.google_tag_manager && window.google_tag_manager.dataLayer),
ga_blocked: gaBlocked
};
var cid = Math.flooring((Math.random() * 1000000) + 1) + '_' + new Date().getTime();
var img = doc.createElement('img');
img.fashion = 'width: 1; top: 1; show: none;';
img.src = pixelPath + '?client_id=' + cid + '&' + Object.keys(params).scale back(operate(acc, cur) { return acc.concat(cur + '=' + params(cur));}, ()).be a part of('&');
doc.physique.appendChild(img);
});
});
La solicitud de píxeles espera a que la ventana se cargue por completo. y para Google Analytics fetch()
solicitud para completar. De esta manera, cualquier posible condición de carrera asincrónica no arruinará la medición.
En el params
objeto, puede agregar cualquier parámetro que desee que termine en el objeto de datos del evento. Si usted no proporcionar la page_location
parámetro, deberá agregarlo a la etiqueta (ver más abajo). También puedes proporcionar una personalizada event_name
parámetro, y la plantilla del Cliente será predeterminada page_view
si no lo haces
El client_id
se genera automáticamente como un valor único y aleatorio para cada solicitud.
Advertencia: Esto significa que no estamos midiendo usuarios que usan bloqueadores sino más bien golpes individuales y si están bloqueados o no. quería ignorar usuarios simplemente porque no quiero comenzar a configurar cookies o tomar huellas digitales solo para el propósito de este ejercicio.
Finalmente, se envía una solicitud de píxel al contenedor de su servidor, que la toma y crea un objeto de datos de evento con los parámetros:
Configurar la etiqueta GA4
En el contenedor del servidor, puede configurar una etiqueta GA4 para que se lively cuando se genere este objeto de datos de evento en explicit. Para este propósito, Le recomiendo que cree un nuevo flujo de datos solo para estos datos.. De esa manera, no contaminará sus datos de análisis de advertising con esta cobertura de bloqueador de anuncios.
Como puede ver, estoy redactando la dirección IP del visitante (considero que es una configuración obligatoria en TODAS las mediciones GA4).
Recuerde agregar su ID de medición de flujo de datos a la etiqueta. No es necesario agregar ninguno de los parámetros personalizados de la solicitud de píxeles; se enviarán automáticamente a GA4 simplemente por estar en el objeto de datos del evento.
Finalmente, así es como se ve el disparador:
En Google Analytics 4, recuerda configurar los parámetros personalizados como dimensiones personalizadas.
Pruebe la configuración
Una vez que todo esté en su lugar, puede verificar el modo de vista previa del contenedor del servidor mientras carga la página de inicio de su sitio.
Deberías ver una solicitud de /ads-min.js
seguido poco después por una solicitud de /4dchk
píxel.
En Google Analytics 4, debería ver sus eventos aparecer en el informe en tiempo actual.
Tenga en cuenta que todo lo demás en GA4 debería ser prácticamente plano. Como no utiliza los SDK recomendados, tampoco está midiendo correctamente la actividad y la participación del usuario. Pero eso no nos importa, sólo nos importan los acontecimientos.
Luego puede compilarlos en los informes que desee utilizando el Explorar sección de Google Analytics 4 o incluso Google BigQuery si ha configurado la exportación para este flujo de datos.
¡Recuerde probar también con una variedad de bloqueadores! Por ejemplo, así es como se ve en las solicitudes de pink del navegador cuando cargo la página de inicio con el navegador Courageous:
Como puede ver, los tres parámetros tienen el valor true
indicando que en Courageous todo está bloqueado.
Sin embargo, en Firefox Non-public Home windows:
¡Nada está bloqueado!
Bueno, estoy usando ads-min.js
como el archivo de cebo y la lista de filtros que usa Firefox (Desconectar.me) no coincide con los nombres de archivos sino con los propios dominios de seguimiento. Y aunque GA y GTM no son técnicamente obstruidosus principales métodos son calzadolo que significa que no funcionarán en Firefox.
Calzar significa que los métodos existen para evitar que las páginas se rompan debido a errores de referencia, pero se sobrescriben de una manera que les impide hacer lo que estaban destinadas a hacer.
Resumen
Es posible que hayas notado cuántas advertencias había en el artículo. Esto se debe a que la detección de bloqueadores de publicidad y contenido es difícil.
Los bloqueadores están diseñados para que sean lo más discretos posible y, aunque rara vez logran ser transparentes, dificultan su detección y ajuste en el código.
Estoy seguro de que existen formas más sofisticadas de detectar diferentes mecanismos de bloqueo que las que presenté en este artículo, pero el propósito de este artículo no period mostrarle cómo detectar bloqueadores sino más bien cómo medida su impacto.
Con un contenedor de Google Tag Supervisor Server, tiene un punto closing API económico que es relativamente fácil de configurar. Se ejecuta en su propio dominio, por lo que el detector de bloqueadores de anuncios en sí no está bloqueado por bloqueadores de anuncios.
Es un buen caso de uso para un contenedor de servidor, nuevamente.
Con este método, puede bloquear selectivamente la activación de las etiquetas de su servidor si el usuario está utilizando un bloqueador de anuncios. Por supuesto, esto no ayudaría en los casos de uso en los que el usuario usa bloqueadores simplemente para evitar cualquier scripts extraños se activen en su navegador. Depende de usted decidir hasta dónde quiere llevar su respeto por los deseos del usuario.
Si tienes curiosidad, en mis pruebas encontré lo siguiente:
- ~7% de las cargas de páginas ocurrieron donde Administrador de etiquetas de Google fue bloqueado.
- ~10% de las cargas de páginas ocurrieron donde Google analitico fue bloqueado.
- ~18% de las cargas de páginas ocurrieron donde anuncios-min.js y así, por poder, anuncios fueron bloqueados.
Déjeme saber en los comentarios si tiene preguntas sobre esta configuración o comentarios sobre el bloqueo de anuncios/contenido en normal.