# Usar FlowConsent con Google Tag Manager

Con Google Tag Manager, el fragmento de FlowConsent va en el <head> encima del contenedor GTM, nunca como etiqueta de GTM. Luego se ajusta el consentimiento.

> Canonical: https://www.flowconsent.com/es/doc/install-google-tag-manager
> Last updated: 2026-10-01
Con Google Tag Manager, el fragmento de código de FlowConsent va en el `<head>` del sitio, **encima del snippet de GTM**, y nunca como etiqueta dentro de GTM: cargado desde el contenedor, el banner llegaría demasiado tarde para el bloqueo previo. La instalación son dos pasos: colocar el fragmento antes de GTM y comprobar que cada etiqueta del contenedor respeta el consentimiento (automático en las etiquetas de Google, configurable en las demás).

## Antes de empezar

- Una cuenta en [app.flowconsent.com](https://app.flowconsent.com) (el plan Free es gratuito, sin tarjeta de crédito y cubre hasta 25.000 sesiones al mes).
- Un banner creado y desplegado. En el plan Free, el despliegue pasa por su propia cuenta de Cloudflare ([guía de Cloudflare](/es/doc/cloudflare-deployment)); en Pro y Enterprise se hace con un clic.
- Acceso de edición al código del `<head>` del sitio y al contenedor de GTM.

## Paso 1: Pegue el fragmento encima del snippet de GTM

Copie el fragmento de código desde **Builder → Despliegue → Integración** (pestaña **HTML / No-code**). Péguelo **justo después de la apertura de `<head>`** y deje el snippet `<!-- Google Tag Manager -->` debajo:

```html title="<head> del sitio"
<head>
  <script>
  // FlowConsent Loader - COLOCAR ANTES de cualquier otro script en el <head>
  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',
    'wait_for_update':500
  });
  gtag('set','url_passthrough',true);
  gtag('set','ads_data_redaction',true);
  </script>
  <!-- FlowConsent CMP -->
  <script src="https://SU-CODIGO-LICENCIA.consent.flowconsent.com/cookie-manager.js?code=SU_CODIGO_LICENCIA"></script>

  <!-- Google Tag Manager -->
  <script>(function(w,d,s,l,i){ /* código proporcionado por GTM */ })(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
  <!-- End Google Tag Manager -->

  <!-- el resto del <head> -->
</head>
```

El stub de Consent Mode escribe los valores `denied` por defecto en el `dataLayer` antes de que arranque GTM: el contenedor los lee al cargarse y cada etiqueta de Google funciona en modo denegado hasta que el visitante elige. Cuando decide, el banner envía `gtag('consent', 'update', …)` y GTM aplica el nuevo estado. No hace falta ninguna plantilla de la galería de GTM.

El segundo snippet de GTM (un `<noscript>` con un `<iframe>`, justo después de `<body>`) se queda en su sitio habitual.

## Por qué no cargar FlowConsent desde GTM

> [!WARNING]
> No cree una etiqueta de **HTML personalizado** para cargar FlowConsent. El contenedor de GTM se carga de forma asíncrona: todo lo que inyecta llega después de leer el HTML. El activador **Inicialización de consentimiento: Todas las páginas** de GTM garantiza el orden dentro del contenedor, pero no fuera de él: los scripts escritos directamente en la página, o añadidos por un plugin, se ejecutan sin esperar. El bloqueo previo exige que FlowConsent se ejecute antes que cualquier rastreador, es decir, en el HTML y encima de GTM.

Lo mismo ocurre si GTM lo inyecta un plugin o una integración nativa (un campo «ID de contenedor de GTM» en un CMS): si ese código queda por encima de su fragmento, elimine el ID de esos ajustes y pegue usted mismo el snippet de GTM, debajo de FlowConsent. Si cambió el nombre de la variable `dataLayer` en el snippet de GTM, vuelva a `dataLayer`: es el nombre que usa el stub.

## Paso 2: Configure el consentimiento de las etiquetas en GTM

En cualquier etiqueta, abra **Configuración avanzada → Configuración de consentimiento**. Ahí aparecen dos bloques.

**Comprobaciones de consentimiento integradas.** Las etiquetas de Google (etiqueta de Google, GA4, Google Ads, Floodlight) leen por sí mismas las señales de Consent Mode v2 que envía FlowConsent. No hay nada que configurar: si el visitante rechaza, pasan al modo sin cookies (pings `gcs=G100`, consulte la [guía de Google Consent Mode](/es/doc/google-consent-mode)).

**Comprobaciones de consentimiento adicionales.** Las etiquetas que no son de Google (Meta Pixel, LinkedIn, Hotjar, HTML personalizado…) no tienen comprobaciones integradas. Elija **La etiqueta requiere consentimiento adicional para activarse**, haga clic en **+ Añadir consentimiento obligatorio** e indique la señal que corresponda, por ejemplo `ad_storage` para un píxel publicitario o `analytics_storage` para una herramienta de analítica. La etiqueta solo se activa si esas señales están concedidas en el momento en que se produce su activador.

> [!TIP]
> La página **Resumen de consentimiento** de GTM agrupa las etiquetas según tengan o no el consentimiento configurado: así no se escapa ninguna. Una etiqueta en **Sin establecer** se activa sin ninguna comprobación adicional.

## Verificar la instalación

1. En GTM, haga clic en **Vista previa**: Tag Assistant se abre en su sitio. Seleccione una etiqueta de Google y después la pestaña **Consentimiento**: la columna **Valor predeterminado en la página** debe mostrar `Denied` para las cuatro señales. Tras hacer clic en **Aceptar**, la columna **Valor actualizado en la página** pasa a `Granted`.
2. En una ventana privada, el banner aparece y la pestaña **Red** no muestra ninguna petición a terceros antes de **Aceptar** (salvo los pings de Google con `gcs=G100`, conformes con el rechazo).
3. Lance el [asistente de instalación](/es/doc/setup-wizard) (Builder → Integración): comprueba que el cargador está presente con el código de licencia correcto, que el stub está presente y que precede a cada etiqueta de Google, GTM incluido.
4. Termine con un escaneo de rechazo desde la pestaña **Conformidad** ([verificación de conformidad](/es/doc/compliance-verification)).

## Hágalo desde su agente de IA (MCP)

FlowConsent tiene un servidor MCP oficial, `https://mcp.flowconsent.com`, que funciona con Claude, ChatGPT o cualquier cliente MCP. La conexión se hace por OAuth 2.0 con su cuenta de FlowConsent, sin clave de API. Su agente obtiene el fragmento de código y las instrucciones de colocación (`get_banner_snippet`, `get_setup_instructions`), verifica la instalación con un escaneo real (`verify_consent_compliance`) y puede programar una supervisión recurrente (`monitor_compliance`). No modifica su sitio ni su contenedor de GTM: aporta el fragmento, las instrucciones y la verificación.

Ejemplo de petición:

> Deme el fragmento de código de mi banner para mi sitio que usa Google Tag Manager, recuérdeme dónde va respecto al snippet de GTM y compruebe que está bien instalado en https://misitio.es

Más información: [servidor MCP](/es/doc/mcp-server) y [FlowConsent para agentes de IA](/es/mcp).

## Preguntas frecuentes

### ¿Puedo instalar FlowConsent solo con una etiqueta de GTM?

No. Un banner cargado por GTM llega después del HTML de la página, así que los scripts que no pasan por GTM no se bloquearían a tiempo. El fragmento debe estar en el `<head>`, encima del snippet de GTM.

### ¿Hay que configurar algo para GA4 o Google Ads en GTM?

No. Sus comprobaciones de consentimiento integradas leen las señales de Consent Mode v2 que envía FlowConsent. Solo las etiquetas que no son de Google necesitan consentimiento adicional.

### Mi píxel de Meta en GTM se sigue activando tras un rechazo: ¿por qué?

Lo más probable es que su etiqueta esté en **Sin establecer**. Cámbiela a **La etiqueta requiere consentimiento adicional para activarse** con `ad_storage`, publique el contenedor y vuelva a lanzar un escaneo de rechazo.

### ¿Necesito una plantilla de FlowConsent de la galería de plantillas de la comunidad de GTM?

No. El stub del fragmento define los valores por defecto y el propio banner envía la actualización del consentimiento: GTM no necesita ninguna plantilla adicional.
