Blog
Un banner de cookies delante del etiquetado del lado del servidor: qué cambia y qué no
Publicado · 5 min de lectura
La pregunta llega de dos formas. «¿Sigo necesitando un banner si las etiquetas ahora son de primera parte?»: sí. «¿Sigue funcionando mi banner si las etiquetas ahora son de primera parte?»: normalmente, pero la manera en que puede fallar es silenciosa, y merece veinte minutos asegurarse. Esto no es asesoramiento legal; es una descripción de la mecánica, para que lo que te diga tu asesor, la configuración lo haga de verdad.
Qué cambia el etiquetado del lado del servidor respecto al consentimiento: nada
Un nombre de host de primera parte es una propiedad técnica de una solicitud. No es un permiso. Si ayer necesitabas consentimiento para colocar una cookie de analítica, hoy también lo necesitas, y que la cookie ahora la coloque metrics.tusitio.com en lugar de google-analytics.com no cambia nada. La pregunta del regulador es qué recoges y por qué, no qué servidor visitó el paquete por el camino.
Lo que sí cambia es adónde va una solicitud bloqueada. Los bloqueadores de anuncios y las funciones de privacidad de los navegadores bloquean por nombre de host y por patrón de URL, y bloquean googletagmanager.com. No bloquean tu propio dominio. Así que un visitante que ha consentido y que una lista de filtros habría descartado en silencio ahora se cuenta. Ese es todo el beneficio, y solo es un beneficio para los visitantes que consintieron.
Consent Mode, en un párrafo
Las etiquetas de Google leen un estado de consentimiento con un puñado de permisos con nombre —analytics_storage, ad_storage, ad_user_data, ad_personalization— y ajustan lo que envían. Antes de que el visitante decida, un gestor de consentimiento envía un valor por defecto de denied; cuando elige, envía una actualización. En estado denied la etiqueta de Google sigue disparándose, pero envía un ping sin cookies: sin ID de cliente, sin cookie, una señal de que se vio una página y nada más. En cuanto analytics_storage pasa a granted, envía el hit completo. El contenedor de servidor recibe lo que se haya enviado, y las señales de consentimiento viajan con el hit, así que la etiqueta de GA4 del lado del servidor se comporta igual.
El orden importa, y las etiquetas de SignalHost no añaden condiciones propias
El gestor de consentimiento tiene que cargar antes que la etiqueta de Google, para que su valor por defecto esté en su sitio cuando la etiqueta evalúa por primera vez. La mayoría de los gestores ofrecen un valor wait_for_update precisamente para esto: unos cientos de milisegundos que la etiqueta espera un estado de consentimiento antes de asumir denied.
Las entidades que SignalHost crea en tu contenedor no llevan condiciones de consentimiento. Es deliberado. Las propias etiquetas de Google respetan Consent Mode; una comprobación de consentimiento añadida a mano en la etiqueta de Google, sin ninguna en las etiquetas de evento de GA4 de debajo, es el primero de los dos errores de más abajo.
Error uno: condicionar la etiqueta de Google y no las etiquetas de evento
La etiqueta de Google es lo que enruta la medición por el contenedor de servidor. Una etiqueta de evento de GA4 —una de compra, por ejemplo— puede enviar por su cuenta. Si la etiqueta de Google espera el consentimiento y las etiquetas de evento no, las etiquetas de evento se disparan antes del consentimiento y envían directamente a Google, y lo hacen desde una página cuyo banner sigue abierto. La página del contenedor no muestra nada raro, porque los hits nunca pasaron por el contenedor.
O no condicionas nada a mano y dejas que Consent Mode lo haga, o condicionas todas las etiquetas que pueden enviar. No hay término medio coherente.
Error dos: un gestor de consentimiento bloqueante que no reconoce tu propio cargador
Algunos gestores de consentimiento funcionan bloqueando scripts hasta que se da el consentimiento: interceptan las etiquetas script por URL y las retienen. Sus listas conocen googletagmanager.com. No conocen exxz2gdaz1jz.tusitio.com, porque ninguna lista podría: el nombre de host y el nombre de archivo del cargador son únicos de tu contenedor. Así que en modo bloqueo el cargador puede dejarse pasar sin condiciones, y si dependes del bloqueo en lugar de Consent Mode, eso es una etiqueta disparándose antes del consentimiento.
Dos salidas. Añade a mano la URL del cargador a las reglas de bloqueo del gestor de consentimiento, en la categoría a la que pertenezca tu analítica. O —mejor, porque además gestiona correctamente el ping sin cookies— confía en Consent Mode para las etiquetas de Google y usa el bloqueo solo para los scripts que no lo admiten. Nuestro propio sitio ejecuta un gestor de consentimiento en modo de bloqueo automático con Consent Mode al lado; la etiqueta de Google está colocada después del script del gestor, y una prueba en el repositorio falla si alguien las reordena.
El lado del servidor, y los otros destinos
El estado de consentimiento llega al contenedor de servidor dentro de cada hit, y la etiqueta de GA4 del lado del servidor lo lee como lo haría la del navegador. Nada en nuestro lado concede ni amplía un consentimiento; un ping sin cookies sigue siendo un ping sin cookies.
Si conectas un destino de Meta o TikTok, los mismos hits los alimentan. Que el consentimiento de marketing denegado de un visitante deba detener esos reenvíos es una decisión que expresa tu gestor de consentimiento: mediante la categoría en la que está el cargador, y según si tu configuración respeta el ad_storage de Consent Mode. Compruébalo como comprobarías cualquier cosa de aquí: abre el sitio con el banner sin responder, mira la pestaña de red y observa qué sale.
Una lista de comprobación
- El script del gestor de consentimiento está por encima de la etiqueta de Google en la página.
- Se envía un estado de consentimiento por defecto de denied antes de que cargue la etiqueta, con un wait_for_update.
- Ninguna etiqueta del contenedor tiene una condición de consentimiento añadida a mano, o la tienen todas las etiquetas que pueden enviar.
- Con el banner sin responder, la pestaña de red muestra un ping sin cookies (gcs=G100 en la solicitud) y ningún hit completo.
- Después de aceptar, la misma página muestra un hit completo y la página del contenedor lo cuenta.
- Si el gestor de consentimiento bloquea por URL, la URL del cargador está en sus reglas.
