Qué es realmente Consent Mode
Consent Mode es un conjunto de flags que las etiquetas de Google leen para decidir cómo comportarse: analytics_storage, ad_storage, ad_user_data, ad_personalization (los dos últimos se añadieron en la v2), además de functionality_storage, personalization_storage y security_storage. Cada uno vale granted o denied. Los flags se establecen con gtag('consent', 'default', {...}) antes de que cargue cualquier etiqueta y se actualizan con gtag('consent', 'update', {...}) cuando el visitante decide.
No es una plataforma de gestión del consentimiento y no hace que un banner sea conforme a la ley. Es la interfaz entre tu decisión de consentimiento y las etiquetas de Google.
Asigna finalidades, no proveedores
La mayoría de las implementaciones fallan al conectar una lista de proveedores a los flags. Un modelo más limpio —el que usa Track— deriva los flags de las finalidades del consentimiento:
| Finalidad | analytics_storage | ad_storage | ad_user_data | ad_personalization |
|---|---|---|---|---|
| solo necesarias | denied | denied | denied | denied |
| + analítica | granted | denied | denied | denied |
| + marketing | granted* | granted | granted | denied |
| + marketing + personalización | granted* | granted | granted | granted |
* solo si la analítica también está otorgada.
ad_user_data cubre el envío de datos de usuario a Google con fines publicitarios: es el flag que condiciona Enhanced Conversions y los datos proporcionados por el usuario. ad_personalization cubre la publicidad personalizada y el remarketing. Separarlos permite que un visitante acepte la medición sin aceptar la personalización, que es justo la distinción que importa a las autoridades de control como la AEPD.
Básico frente a avanzado
Modo básico: nada de Google se carga hasta que el flag correspondiente está otorgado. Sin pings sin cookies, sin datos para el modelado. Fácil de explicar, fácil de defender.
Modo avanzado: las etiquetas de Google se cargan de inmediato y envían pings sin cookies mientras el consentimiento está denegado, para que Google pueda modelar conversiones más adelante. Si esos pings son admisibles es una valoración jurídica de tu situación, no un ajuste técnico. Por eso Track mantiene el modo básico por defecto y solo activa el modo avanzado cuando hay una nota de revisión jurídica guardada junto a la política de consentimiento; el asistente no puede cambiarlo en silencio.
El lado servidor debe reflejar al navegador
La entrega server-side toma la misma decisión por segunda vez, y debe llegar a la misma conclusión. En concreto:
- El evento lleva la instantánea del consentimiento (finalidades otorgadas, origen, versión de la política, región, flag GPC) del momento en que se registró.
- Las subidas de conversiones de clic de Google Ads incluyen
consent: { adUserData, adPersonalization }, derivado de esa instantánea. - Las peticiones al Measurement Protocol de GA4 llevan
consent.ad_user_datayconsent.ad_personalization, ynon_personalized_adscuando el marketing no está otorgado. - Ningún evento se pone en cola para entregarlo más tarde «cuando llegue el consentimiento». El comportamiento previo al consentimiento se descarta.
Si el navegador dice denegado y el servidor dice otorgado, uno de los dos miente; normalmente porque el servidor lee un flag a nivel de sesión que cambió después del evento. Tomar una instantánea por evento elimina esa clase de error.
Global Privacy Control y TCF
GPC es una señal del navegador (navigator.globalPrivacyControl) que algunas jurisdicciones tratan como un opt-out. Una regla segura: cuando GPC está activado, trata marketing y personalización como denegados independientemente del banner, salvo que una política deliberada diga otra cosa para una región.
Bajo TCF 2.2, las finalidades 1 (almacenamiento), 7 (medir el rendimiento de la publicidad) y 8 (medir el rendimiento del contenido) y los consentimientos por proveedor se asignan a los cuatro flags; la TC String se guarda con la instantánea del consentimiento como evidencia. Un adaptador de CMP lee los eventos de __tcfapi, de modo que el tracker se actualiza sin código a medida.
Pruébalo como lo haría una autoridad de control
- Carga el sitio con un perfil nuevo. Comprueba que no se dispara ninguna petición a Google antes de la decisión en el banner (modo básico).
- Recházalo todo. Confirma que no se guarda nada más allá del propio registro de consentimiento y que el servidor no ha recibido nada para analítica ni marketing.
- Acepta solo analítica. Confirma que los eventos de GA4 fluyen con
ad_user_data: DENIED. - Acéptalo todo y luego retira el consentimiento. Confirma que el siguiente evento se descarta y que no se produce ningún reenvío.
- Lee la instantánea del consentimiento de un evento de ejemplo en el depurador de eventos: ese es el artefacto que necesitarás si alguien pregunta.
Dónde ayuda el asistente
El asistente de configuración registra la CMP, propone la asignación de finalidades y escribe la versión de la política de consentimiento. Lo que no hará es debilitar un valor por defecto: el modo avanzado, las regiones con opt-out o el marketing sin consentimiento exigen una decisión humana explícita con una nota, y esa decisión queda auditada.