Gestión del consentimiento: Consent Mode y Google Tag Manager
¿Lo qué?

Es la solución propuesta por Google para la gestión del consentimiento del usuario, a la que han llamado Modo de Consentimiento o Consent Mode (a Google nunca se le ha dado muy bien lo de poner nombres a las cosas, sí, ya lo sabemos).
Se ha creado con la idea de ser un estándar común entre plataformas (incluidas ajenas a Google) y que pueda gestionarse de forma unificada. Y quien dice “gestionar de forma unificada”, dice Google Tag Manager, por supuesto.
Tras su implantación inicial en Google Analytics y progresiva en otros servicios, el Modo de Consentimiento ya ha llegado a GTM y aquí veremos la funcionalidad nueva que incluye esta actualización y cómo podemos usarla para integrar y gestionar opciones de consentimiento en nuestros contenedores.
¿Cómo funciona Consent Mode?
En gtag.js, Google Tag Manager, Analytics, Ads y cualquier otra plataforma que lo integre, se definen internamente ciertas categorías o tipos de consentimiento (analítica, publicidad, etc).
Para cada una de estas categorías se guarda un estado global (granted, permitido, o denied, denegado) correspondiente al permiso concedido (o no) para almacenar información (cookies, LocalStorage…) relevante a esa categoría, sea de forma explícita por acciones del usuario, sea implícita por valores por defecto (que a su vez podrían variar según región geográfica u otros factores).
Una vez disponible esta información y las APIs correspondientes para acceder a ella, la idea es que esta se integre:
- Por un lado, con las diferentes etiquetas y pixeles de seguimiento que requieran consentimiento por parte del usuario, de forma que monitoricen el estado correspondiente e impidan, retrasen o modifiquen su funcionalidad en consecuencia.
- Y por otro, con las respectivas plataformas de gestión de consentimiento o CMPs (Consent Management Platform/Provider) que se encarguen de informar al usuario y recoger sus preferencias. Vamos, los “avisos de cookies” de toda la vida, correctamente integrados.
En el primer caso, como siempre, Tag Manager puede ayudarnos al hacer de punto unificado desde el que gestionar todas las etiquetas y, en este caso, su lanzamiento condicional o limitado según consentimiento.
Y en el segundo… pues también, dado que nuestro CMP, tanto si es una solución comercial como propia, puede estar total o parcialmente integrado con GTM y, desde ahí, con Consent Mode. Varios proveedores (incluido algunos muy populares, como Cookiebot) ya han incluido compatibilidad con este sistema en sus plantillas para que la integración sea total.

Tipos de consentimiento
Los tipos de consentimiento definidos y disponibles en Consent Mode son estos, copiados descaradamente de la documentación oficial: 😉
ad_storage
:- Habilita el almacenamiento de información útil para fines publicitarios (mediante cookies).
analytics_storage
:- Habilita el almacenamiento de información útil para analíticas, como la duración de las visitas (mediante cookies).
functionality_storage
:- Habilita el almacenamiento de información que permite el correcto funcionamiento del sitio web o de la aplicación (por ejemplo, la configuración de idioma).
personalization_storage
:- Habilita el almacenamiento de información sobre personalización (por ejemplo, recomendaciones de vídeo).
security_storage
:- Habilita el almacenamiento de información sobre seguridad (por ejemplo, funciones de autenticación, prevención de fraudes y otros sistemas de protección).
Normalmente los tipos en los que nos centraremos en casi todos los casos son analytics_storage y ad_storage, correspondientes respectivamente a las clásicas categorías de cookies de “Analítica” y de “Publicidad/Marketing“.
personalization_storage es menos común, y los otros dos entran dentro de lo que normalmente se consideran “cookies necesarias”; si nos ceñimos a normativa EU/UK, su uso se presupone permitido sin necesidad de consentimiento explícito.
¿Y cómo se integra esto?
En este artículo no vamos a profundizar en ello ni ponernos muy técnicos (igual otro día, dejadme un artículo sin picar código por una vez 😛 ). Pero explicado brevemente, la forma de acceder a la configuración de consentimiento (definir valores por defecto, leerlos, cambiarlos…) es por estos dos métodos:
- Mediante llamadas
gtag('consent', ...)
de gtag.js - Mediante la API de consentimiento (llamadas
setDefaultConsentState
yupdateConsentState
) incluida en el sistema de plantillas de Google Tag Manager.
Por tanto, cualquier etiqueta o variable que implemente Consent Mode deberá estar basada en una plantilla que haga uso de esta API o bien depender de alternativas como scripts a medida (externos o en etiquetas Custom HTML) con llamadas gtag(), con la posibilidad de abstraer parte de esta funcionalidad mediante plantillas de etiquetas/variables intermedias ya creadas y disponibles en la galería de comunidad.

Funcionalidad en GTM
Antes que nada, si en un contenedor concreto no vemos que aparezcan las opciones relativas a gestión del consentimiento, es posible que sea necesario activarlas primero.
Para ello, entrar en Admin > Configuración del contenedor > Ajustes adicionales y activar Habilitar resumen de consentimiento:
1) Nuevos activadores
A los 3 tipos de activadores automáticos unidos a la carga de página, esto es, Contenedor cargado/Página vista (gtm.js), DOM preparado (gtm.dom) y Ventana cargada (gtm.load), se unen dos nuevos:

Inicialización del consentimiento (Consent Initialization, gtm.init_consent)
Se lanza el primero de todos, antes de cualquier otra cosa en el contenedor. Lo único que podría existir previo a gtm.init_consent en la capa de datos serían valores —que no eventos— que ya estuvieran definidos antes de empezar a ejecutarse el código del contenedor (y que por tanto, ésta haya sido inicializada antes de la instalación de GTM en el HTML de la página).
Está pensado para establecer configuraciones referentes a la gestión del consentimiento, de forma que podamos asegurar que los valores establecidos aquí estén siempre definidos para cualquier etiqueta o script. En principio no debe utilizarse para ningún otro fin.
Inicialización (Initialization, gtm.init)
Salta en segundo lugar, después de Inicialización del consentimiento pero antes del evento de carga del contenedor o Página vista (gtm.js). También garantiza ir antes que cualquier otro evento empujado a dataLayer, incluidos los enviados manualmente via dataLayer.push({event: '...'})
.
Por tanto, será el adecuado para definir otras configuraciones o dependencias -ajenas al consentimiento, que siempre debe ir primero- a ser utilizadas por el resto del contenedor y sus etiquetas.
En teoría también puede utilizarse para cualquier etiqueta que deba lanzarse lo antes posible, pero debemos estar seguros de que no tenga ninguna otra dependencia y no requiera de valores generados en dataLayer o por otras etiquetas, ni necesite acceder al DOM de la página (dado que hay que presuponer que no va a estar disponible).
En caso de duda, lo más seguro será seguir confiando la mayoría de etiquetas al gtm.js (+ prioridad alta, si fuera necesario) y dejar este activador específicamente para los casos en los que necesitemos definir dependencias para otras etiquetas.

Si necesitamos adelantar alguna etiqueta a estos nuevos puntos del flujo de eventos del contenedor, bastará con crear el activador correspondiente —si no lo tenemos ya— de la misma manera que cualquier otro de tipo Página vista: tipo de activador + filtros adicionales (URL, etc, o dejar en blanco para Todas las páginas).

2) Comprobaciones de consentimiento en etiquetas
Una vez activado el modo de consentimiento, cada etiqueta puede hacer sus propias comprobaciones de forma individual y modificar o bloquear su funcionalidad en base a categorías de permisos concretas.
Puede hacerse de dos formas:
Comprobaciones de consentimiento integradas
Es en el propio código interno de la etiqueta donde se realizan las comprobaciones necesarias y se modifica su comportamiento en consecuencia.
Este tipo de comprobación es más versátil dado que la etiqueta no tiene por que bloquear por completo su funcionalidad, sino que puede hacerlo parcialmente u optar por funcionalidad alternativa; por ejemplo, no guardar cookies o registrar una visita pero sin asignar identificadores de usuario.
Por supuesto, también es más complejo dado que necesita que la plantilla de la etiqueta implemente la integración correspondiente con la API de consentimiento, incluido informar sobre las categorías utilizadas para que aparezcan posteriormente en la descripción de la misma.
Esta funcionalidad ya está integrada en varios tipos de etiquetas de Google, concretamente Google Analytics (UA y GA4), Google Ads y Floodlight (el artista anteriormente conocido como DoubleClick), así como la etiqueta relacionada Vinculación de conversiones o Conversion Linker.
Para otros servicios, es necesario que la etiqueta esté basada en plantillas y que el proveedor correspondiente la haya actualizado desarrollando la integración correspondiente e informando sobre los tipos de consentimiento utilizados. Para etiquetas personalizadas, pues lo mismo, pero el proveedor somos nosotros 😛
Por lo demás, en el lado de GTM no es necesario retrasar el lanzamiento de etiquetas ni añadir comprobaciones adicionales a los activadores; en el caso de las de Google, la documentación incluso pide expresamente no hacerlo. Las etiquetas de por ej. Todas las páginas se dejan en Todas las páginas, y por lo demás confiaremos en que la integración de cada etiqueta se encargue del resto.
Comprobaciones de consentimiento adicionales
Son más sencillas —solo permiten bloqueo completo—, pero pueden aplicarse a cualquier etiqueta sin necesidad de modificaciones adicionales. 🙂
Para ello, basta con editar la etiqueta y acceder a la nueva sección Configuración avanzada > Configuración de consentimiento:
Ahí, además de informarnos sobre las comprobaciones de consentimiento integradas si las hubiera, podremos cambiar Comprobaciones de consentimiento adicionales de Sin establecer a uno de estos dos valores:
- No se requiere ningún consentimiento adicional
Si no lo tiene. No es estrictamente necesario marcarlo, pero esto informa a GTM de que ya se ha revisado y configurado expresamente el consentimiento para esta etiqueta, y así lo mostrará en el Resumen de consentimiento (ver más abajo).
- La etiqueta requiere consentimiento adicional
Y añadir uno o más tipos de consentimiento mediante el botón +Añadir y el desplegable:
Una etiqueta así configurada únicamente se ejecutará si el estado del consentimiento es permitido (granted) para todos los tipos indicados.
3) Resumen de consentimiento
En GTM se ha habilitado una pantalla nueva llamada Resumen de consentimiento (Consent overview) que nos muestra un listado con la configuración de consentimiento para todas las etiquetas, permitiéndonos consultarla de un vistazo o modificarla para una o varias etiquetas del tirón 🙂
Podemos acceder desde el panel Etiquetas, en este icono junto al botón de crear nueva:

Una vez dentro, nos muestra un listado alternativo de todas las etiquetas con columnas que muestran directamente sus respectivas comprobaciones de Consentimiento integrado y Consentimiento adicional si las hubiera.
El listado está dividido en dos secciones: consentimiento no configurado (etiquetas que tienen su configuración de consentimiento en el valor por defecto “sin establecer”) y consentimiento configurado (etiquetas para las que se ha cambiado expresamente este valor, aunque sea para confirmar que “no se requiere ningún consentimiento adicional”).
Esto nos facilita hacer un repaso completo de consentimiento para todas las etiquetas y asegurarnos en todo momento que el contenedor completo está correctamente revisado y configurado.
Desde el listado, además de poder editar cada etiqueta individualmente, podemos modificar la configuración de consentimiento para varias etiquetas a la vez. Para ello, basta con seleccionarlas en las casillas de la izquierda y hacer clic en este icono:

Y definir la configuración para todas las etiquetas seleccionadas.
Este no es el único lugar en el que podemos hacer esto. En el propio panel de Etiquetas al seleccionar alguna, junto con las opciones habituales de pausar, eliminar… también aparece la de Editar configuración de consentimiento:
Conclusiones
Resumiendo todo lo revisado a lo largo del artículo, una idea importante que sacamos en limpio es que no, Consent Mode no es una solución mágica que se ocupa de todo automáticamente. Lo que sí hace, sin embargo, es:
- Proporcionarnos una serie de herramientas para ayudarnos con la gestión del consentimiento.
- Facilitar la centralización de esta integración en Google Tag Manager y gtag.
- Dejar ya desarrolladas integraciones para Google Analytics, Ads y Floodlight con lo que, al menos esta parte, sí que queda ahora relativamente bastante apañada por sí sola incluso para implementaciones poco complejas.
- Y sobre todo, proponer un estándar común para que los diferentes proveedores y desarrolladores, tanto de servicios de analítica y marketing como de plataformas CMP, puedan resolver los diferentes problemas e integraciones derivados del consentimiento apoyándose en un marco común en lugar de gestionar todo por separado, facilitando la reutilización y la interoperabilidad.

Bonus track: Consent Mode y el problema del lanzamiento retroactivo
Si alguna vez os habeis tenido que pelear incluso tangencialmente con un CMP o algún otro tipo de integración de consentimiento, esto os resultará familiar.
Para muchas etiquetas de analítica y marketing que se lanzan automáticamente en la carga de página, si queremos evitar pérdidas importantes de información no es suficiente con permitir o bloquear su lanzamiento cuando les toca y ya; si lo hacemos así, la información correspondiente a la primera página visitada por el usuario nunca queda registrada (dado que aún no ha tenido oportunidad de responder al aviso de cookies correspondiente) y esta es precisamente la más crítica para muchas plataformas dado que es la que incluye información sobre el origen de la visita (referrer, parámetros…). Si la perdemos, podemos perder información muy importante como la atribución de conversiones posteriores.
Para evitar esto, no sirve con hacer una única comprobación puntual y bloquear la etiqueta completa; si nuestra implementación/integración con CMP bloquea preventivamente todo lanzamiento, debe de alguna forma monitorizar el estado del consentimiento y, en cuanto este cambie (cuando el usuario le de a “Aceptar cookies”, vaya), lanzar retroactivamente las etiquetas que habían quedado bloqueadas en la página actual. Esto, por supuesto, hace que la integración sea en general bastante más compleja, y cada CMP o solución a medida proporciona (o no) las herramientas necesarias para ello con mayor o menor fortuna, pero siempre requiriendo un cierto trabajo extra de desarrollo.
¿Cómo maneja esto Consent Mode? ¿Lo tiene en cuenta? Pues… sí y no.
- Las comprobaciones de consentimiento adicionales son solo puntuales: simplemente revisa el estado en el momento en que salta el activador y permite o bloquea el lanzamiento. Si queremos más, tendremos que proporcionarlo nosotros en forma de implementación adicional: procesadores de eventos, activadores alternativos, etc.
- En las comprobaciones de consentimiento integradas, esto se deja en manos de la integración correspondiente. Las funciones proporcionadas por la API permiten la monitorización del estado, la espera o la funcionalidad alternativa, pero corresponde al código interno de cada plantilla de etiqueta tenerlo en cuenta y tomar las medidas oportunas.
La buena noticia aquí es que Google Analytics y las otras plataformas de Google ya integradas sí han tenido esto en cuenta en su integración y adaptan, modifican o retrasan su funcionalidad de forma automática para evitar pérdida total de información, sin necesidad de controles adicionales (de hecho, en la documentación los desaconsejan) por nuestra parte; en la mayoría de instalaciones, probablemente con esto sea suficiente.
En definitiva, como con otras plataformas de gestión de consentimiento, Consent Mode nos proporciona herramientas para ayudar a garantizar el cumplimiento y minimizar la perdida de información, pero nos corresponde a nosotros saber utilizarlas e implementar lo necesario para ello.
Enlaces de interés
- Modo de consentimiento (documentación oficial)
- Configuración de consentimiento en GTM (documentación oficial)
- Configurar el consentimiento en [plantillas de] Tag Manager (documentación oficial)
- Consent Settings in GTM (Simo Ahava, quién si no)
Comments