Consent Mode v2 de Google indica a las etiquetas de Google si el visitante ha aceptado las cookies de analítica y publicidad. Sin él, Google no añade a tus audiencias publicitarias a los visitantes del Espacio Económico Europeo. Aquí tienes una configuración con gtag.js lista para copiar y cómo comprobar que funciona.
Qué es Consent Mode v2
Consent Mode es un conjunto de señales que tu web envía a las etiquetas de Google (Google Analytics 4, Google Ads, Floodlight). Cada señal vale granted o denied, y las etiquetas adaptan su comportamiento. La versión 2, de noviembre de 2023, añadió dos señales sobre datos publicitarios:
| Señal | Qué controla |
|---|---|
ad_storage | El almacenamiento, como las cookies, relacionado con la publicidad |
analytics_storage | El almacenamiento, como las cookies, relacionado con la analítica (por ejemplo, la duración de la visita) |
ad_user_data (nueva en v2) | El envío a Google de datos de usuario relacionados con la publicidad |
ad_personalization (nueva en v2) | La publicidad personalizada, como el remarketing |
Quién lo necesita
Desde marzo de 2024, Google espera señales de consentimiento para los visitantes del Espacio Económico Europeo. Si faltan, esos visitantes no se añaden a las audiencias de los productos publicitarios de Google, y el remarketing y los anuncios personalizados dejan de funcionar para ellos. Para la publicidad personalizada tienen que estar concedidas tanto ad_user_data como ad_personalization.
Si tu web no recibe visitas de Europa y no usas Google Ads, Consent Mode es opcional. Si usas una plataforma de gestión de consentimiento certificada por Google, lo más probable es que ya envíe las señales: revisa primero su configuración.
Modo básico o avanzado
| Básico | Avanzado | |
|---|---|---|
| Antes de que el visitante responda | Las etiquetas de Google no se cargan | Las etiquetas se cargan con el estado por defecto (normalmente denied) |
| Si el visitante rechaza | No se envía nada a Google | Se envían pings sin cookies ni identificadores |
| Modelado de conversiones | Modelo general | Modelo más detallado, propio del anunciante |
El código de abajo es la configuración avanzada: las etiquetas se cargan enseguida y esperan la respuesta en estado denegado. Para el modo básico, carga la etiqueta de Google solo después de que el visitante acepte.
Paso 1. Valores por defecto antes de la etiqueta de Google
El estado por defecto debe fijarse antes de que la etiqueta envíe nada. Pon este fragmento en el <head>, por encima de la etiqueta de Google o del fragmento de Tag Manager:
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
analytics_storage: 'denied',
wait_for_update: 500, // ms de espera a un banner que carga de forma asíncrona
});
</script>
<!-- después, la etiqueta de Google o el fragmento de Google Tag Manager -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX"></script>
<script>
gtag('js', new Date());
gtag('config', 'G-XXXXXXX');
</script>Para denegar por defecto solo en algunos países, añade region con códigos ISO, por ejemplo region: ['ES', 'FR', 'DE']. Los valores sin region se aplican en el resto.
Paso 2. Enviar la elección del visitante
Cuando el visitante pulsa un botón del banner, llama a update. Guarda la elección y vuelve a enviarla al inicio de cada página siguiente, justo después de los valores por defecto:
<div id="cookie-banner" hidden>
<p>Usamos cookies de analítica y publicidad. ¿Te parece bien?</p>
<button type="button" data-choice="granted">Aceptar</button>
<button type="button" data-choice="denied">Rechazar</button>
</div>
<script>
const KEY = 'cookie_choice';
const send = (state) => gtag('consent', 'update', {
ad_storage: state,
ad_user_data: state,
ad_personalization: state,
analytics_storage: state,
});
const saved = localStorage.getItem(KEY);
const banner = document.getElementById('cookie-banner');
if (saved) send(saved); else banner.hidden = false;
banner.addEventListener('click', (e) => {
const state = e.target.dataset.choice;
if (!state) return;
localStorage.setItem(KEY, state);
send(state);
banner.hidden = true;
});
</script>Opcional: url_passthrough y ads_data_redaction
Dos ajustes ayudan cuando se rechazan las cookies publicitarias:
gtag('set', 'url_passthrough', true); // pasa los datos del clic en los enlaces, sin cookies
gtag('set', 'ads_data_redaction', true); // oculta los identificadores de clic mientras ad_storage está denegadoSi usas Google Tag Manager
En Tag Manager, los valores por defecto van en una etiqueta que se dispara con el activador Consent Initialization – All Pages (Inicialización del consentimiento), antes que cualquier otra. La mayoría de las plataformas de consentimiento ofrecen una plantilla lista en la Galería de plantillas de la comunidad; el update lo envía la plataforma cuando el visitante responde.
Cómo comprobar que funciona
- Abre tu web con Tag Assistant y mira la pestaña Consent: primero debe aparecer el estado por defecto y, tras pulsar el banner, la actualización.
- En las herramientas de desarrollo del navegador, abre la pestaña Red y filtra por
collect: las peticiones a Google Analytics llevan el parámetrogcs, que pasa deG100(denegado) aG111(concedido) al aceptar. - Recarga la página después de aceptar: la elección guardada debe enviarse de nuevo sin mostrar el banner.
Un solo banner para Google y tus otras herramientas
Consent Mode solo afecta a las etiquetas de Google. Los demás scripts de la web necesitan la misma respuesta. El widget de Sitecog, por ejemplo, tiene su propio modo de consentimiento: añade data-consent="required" a su etiqueta y la analítica espera al consentimiento mientras los formularios y el chat siguen funcionando. No envía señales de consentimiento a Google, así que pasa la respuesta a ambos desde tu banner:
<script src="https://widget.sitecog.com/widget.js" data-consent="required" defer></script>
<script>
window.crmConsent = window.crmConsent || []; // una cola: funciona antes de que cargue widget.js
function applyChoice(state) {
gtag('consent', 'update', {
ad_storage: state,
ad_user_data: state,
ad_personalization: state,
analytics_storage: state,
});
crmConsent.push(state === 'granted' ? 'grant' : 'deny');
}
</script>Preguntas frecuentes
¿Consent Mode es un banner de cookies?
No. Consent Mode solo transmite a las etiquetas de Google la elección del visitante. Sigues necesitando un banner (propio o de una plataforma de gestión de consentimiento) que haga la pregunta y llame al comando update.
¿Necesito Consent Mode v2 fuera del EEE?
Google exige señales de consentimiento para los visitantes del Espacio Económico Europeo. En otros países es opcional, pero puedes usarlo igualmente; con el parámetro region puedes denegar por defecto solo en los países que lo necesitan.
¿Qué pasa si el visitante rechaza las cookies?
En el modo básico las etiquetas de Google no envían nada. En el modo avanzado envían pings sin cookies ni identificadores, que Google usa para modelar conversiones.
¿Consent Mode hace que mi web cumpla el RGPD?
Por sí solo, no. Respeta la elección del visitante; que se pregunte bien, a tiempo y con un texto claro depende de tu banner y de tu política de privacidad.
¿Sitecog configura Google Consent Mode por mí?
No. El widget de Sitecog tiene su propio modo de consentimiento para su analítica y no envía señales de consentimiento a Google. Conecta ambos al mismo banner, como se muestra en esta guía.