Google Consent Mode v2 WordPress

Google puede dejar de medir tus conversiones si el banner de cookies no está bien configurado. Esto es lo que pasó y cómo se resolvió.
Todo empezó con un e-mail del equipo técnico de Google: las etiquetas de seguimiento de una web médica no funcionaban correctamente. Había sesiones de implementación previas, revisiones con los equipos de marketing y de Tag Manager, y cada vez que terminaba una sesión todo parecía resuelto. Pero las conversiones seguían sin medirse bien.
Este artículo documenta el proceso completo de diagnóstico e implementación de Google Consent Mode v2 (GCM v2) en un sitio WordPress: el problema exacto que detectó Google, las herramientas utilizadas para reproducirlo, y la solución técnica aplicada paso a paso.
Qué es Google Consent Mode v2
Google Consent Mode v2 es un framework que ajusta el comportamiento de las etiquetas de Google (Google Ads, Google Analytics) según la decisión del usuario en el banner de cookies. Desde marzo de 2024 es obligatorio para sitios que utilizan publicidad de Google en la Unión Europea.
Gestiona cuatro señales principales:
ad_storage— almacenamiento de cookies publicitariasanalytics_storage— almacenamiento de datos de analíticaad_user_data— uso de datos del usuario para anunciosad_personalization— personalización de anuncios
Cuando el usuario rechaza las cookies, estas señales permanecen en estado denied. En modo avanzado (el recomendado), Google Tag Manager sigue cargándose y envía pings anónimos que permiten modelar estadísticamente los datos perdidos, sin comprometer la privacidad del usuario.
En modo avanzado, GTM carga siempre — incluso si el usuario rechaza. Lo que cambia es qué datos envía, no si se carga.
Un caso habitual que suele pasarse por alto: el usuario que ignora el banner y navega sin pulsar ningún botón. En ese escenario el consent default permanece activo — todo en denied — y GTM sigue funcionando en modo anónimo. La web opera con normalidad para el visitante y Google recibe las señales correctas de consentimiento denegado.
Orden de carga (prioridad -1 en wp_head)
Todo denied al inicio
→
Carga siempre
→
Banner de cookies
Decisión del usuario en el banner
Etiquetas activas
Pings anónimos
Según categorías
Herramientas y plugins involucrados
Google Tag Manager (GTM)
Contenedor donde se configuran todas las etiquetas de seguimiento. En lugar de insertar código de cada herramienta directamente en la web, todo pasa por GTM. URL: tagmanager.google.com
Tag Assistant
Herramienta de diagnóstico de Google que verifica que GTM y sus etiquetas funcionan correctamente. Accesible desde el botón «Vista previa» de Tag Manager o directamente en tagassistant.google.com
CookieYes | GDPR Cookie Consent
Plugin de WordPress (v3.5.1) que gestiona el banner de cookies y comunica el consentimiento del usuario a GTM mediante la API de GCM. CMP certificada por Google. Se gestiona desde el panel de WordPress y desde su web app en app.cookieyes.com
Code Snippets
Plugin de WordPress utilizado para inyectar código PHP personalizado sin modificar el functions.php del tema.
Only GTM (descartado)
Plugin inicialmente instalado para inyectar el fragmento de GTM. Fue desactivado al integrar GTM directamente en el snippet PHP, evitando así que CookieYes pudiera bloquearlo.
Google Consent Mode Checker
Herramienta gratuita de CookieYes para verificar que GCM está correctamente configurado en un sitio web. URL: cookieyes.com/google-consent-mode-checker
El problema
El e-mail de Google describía el síntoma con precisión: el CMP estaba bloqueando completamente las etiquetas cuando el usuario rechazaba las cookies. Pero reproducirlo no fue inmediato — con el banner aceptado, Tag Assistant conectaba sin problemas y todo parecía correcto. Solo al rechazar el consentimiento la herramienta fallaba y dejaba de conectar.
«Es posible que una plataforma de gestión de consentimiento (CMP) esté bloqueando las etiquetas, impidiendo que se carguen las etiquetas de Google o Tag Manager.»
— Mensaje de alerta de Google Tag Assistant
La causa raíz estaba en el orden de carga: el plugin Only GTM inyectaba GTM después de CookieYes en el HTML, lo que permitía a CookieYes interceptarlo y bloquearlo cuando el usuario rechazaba. GTM nunca llegaba a cargarse, y sin GTM las señales de consentimiento nunca se enviaban a Google. El resultado era pérdida total de visibilidad de todos los usuarios que rechazaban — sin posibilidad de modelado estadístico.
La solución
1. Inyectar GTM antes que CookieYes mediante snippet PHP
El fragmento de GTM se integró en un snippet PHP con prioridad -1 en el hook wp_head, garantizando que se ejecuta antes que cualquier otro script, incluido CookieYes. En el mismo snippet se añadió el consent default con todas las señales en denied.
add_action('wp_head', function() {
?>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
'ad_storage': 'denied',
'analytics_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'functionality_storage': 'granted',
'personalization_storage': 'denied',
'security_storage': 'granted'
});
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-5W7ZVBP5');</script>
<!-- End Google Tag Manager -->
<?php
}, -1);
El orden resultante en el HTML es el correcto:
consent default(todo denegado)- GTM
- CookieYes
2. Desactivar el plugin Only GTM
Una vez GTM se inyecta mediante el snippet, el plugin Only GTM queda redundante y se desactiva para evitar duplicidad.
3. CookieYes gestiona el consent update
CookieYes se encarga automáticamente de enviar el consent update al dataLayer según la elección del usuario en el banner, actualizando las señales a granted o manteniéndolas en denied según corresponda.
4. Problema con ModSecurity
Al implementar el snippet con el código GTM, el firewall de aplicaciones web ModSecurity (reglas Comodo) bloqueó la web con error 403, identificando el iframe de GTM como contenido potencialmente malicioso (regla 214540).
Si el servidor utiliza ModSecurity con reglas Comodo, es probable que la regla 214540 bloquee el iframe de GTM. La solución es desactivar esa regla específica para el dominio desde Plesk, sin afectar al resto del servidor.
Mejoras adicionales en el banner de cookies
Aprovechando la revisión, se corrigieron dos incumplimientos del RGPD en el banner de cookies:
- Botón «Rechazar todo» visible en el banner principal. El RGPD exige que rechazar sea igual de fácil que aceptar. Tener el botón de rechazo solo en el panel de preferencias no es suficiente.
- Idioma en español. El banner estaba configurado en inglés, lo que no es adecuado para un sitio dirigido a usuarios hispanohablantes.
Verificación
La verificación se realizó con Tag Assistant en los tres escenarios de interacción posibles. El estado por defecto — que se aplica tanto antes de interactuar con el banner como cuando el usuario lo ignora y navega directamente — produce el mismo resultado que «Rechazar todo»: todas las señales en denied excepto functionality_storage y security_storage, que permanecen en granted. En todos los casos GTM cargó correctamente y las señales fueron las esperadas:
| Señal | Por defecto | Aceptar todo | Rechazar todo |
|---|---|---|---|
ad_storage |
denied | granted | denied |
analytics_storage |
denied | granted | denied |
ad_user_data |
denied | granted | denied |
ad_personalization |
denied | granted | denied |
functionality_storage |
granted | granted | granted |
security_storage |
granted | granted | granted |
El escenario «Personalizar» no aparece en la tabla porque los valores varían según las categorías que active el usuario. Por ejemplo, activar únicamente la categoría «Anuncio» pone ad_storage, ad_user_data y ad_personalization en granted, manteniendo el resto en denied.
Las cinco etiquetas de conversión configuradas en GTM se verificaron individualmente, confirmando que cada una se activa con la acción correspondiente del visitante:
| Contenedor GTM — GTM-5W7ZVBP5 | ||
|---|---|---|
| Etiqueta | Activador | |
| Etiqueta Google Ads AW-949535401 |
→ | Carga de página |
| Vinculación de conversiones | → | Carga de página |
| Formulario | → | Envío de formulario |
| Teléfono | → | Clic en teléfono |
| → | Clic en WhatsApp | |
Las tres acciones de conversión — llamada, WhatsApp y formulario — se registran correctamente en Google Ads, lo que permite saber con precisión qué acciones publicitarias generan contactos reales.
Por qué importa medir bien las conversiones: el ROAS
El ROAS (Return On Ad Spend, o retorno sobre la inversión publicitaria) mide cuánto ingreso genera cada euro invertido en publicidad. Si Google Ads no registra correctamente las conversiones, el algoritmo de pujas no puede optimizar las campañas y el presupuesto se distribuye sin criterio.
Con el seguimiento de conversiones funcionando correctamente, Google Ads sabe qué anuncios, palabras clave y audiencias generan citas reales — y puede redirigir automáticamente el presupuesto hacia lo que funciona. Sin ese dato, la inversión publicitaria es ciega.
En el caso de una clínica médica, las conversiones no son ventas directas sino intenciones de contacto: llamadas, mensajes de WhatsApp y solicitudes de cita. Medir cada una de esas intenciones con precisión es lo que transforma la publicidad de Google en una herramienta con criterio, en lugar de un gasto difícil de justificar.
Conclusión
Al final resultó que el problema no era complejo: era de orden. GTM llegaba tarde, CookieYes lo interceptaba, y Google se quedaba sin datos. Moverlo unas líneas arriba en el HTML, con prioridad -1, fue suficiente para que todo encajara. La implementación correcta de GCM v2 requiere que GTM cargue antes que el CMP, que el consent default se establezca antes de cualquier interacción del usuario, y que el CMP actualice las señales correctamente según la elección del usuario.
La verificación con Tag Assistant es la prueba definitiva. Herramientas de verificación automática como el Google Consent Mode Checker solo comprueban la existencia del
consent default, no el comportamiento completo al rechazar.
Desde el punto de vista legal, el RGPD no solo exige gestionar el consentimiento técnicamente — también exige que el banner sea accesible, en el idioma del usuario, y que rechazar sea igual de sencillo que aceptar. Dos detalles fáciles de pasar por alto que, en este caso, también se corrigieron.
La implementación descrita en este artículo se realizó sobre ginesaenz.com, web de la consulta del ginecólogo Sáenz de Santamaría. Cualquier profesional técnico puede verificar el comportamiento del banner y las señales GCM directamente en esa URL.