Herramientas Digitales

Google Tag Manager: configúralo en 6 pasos sin duplicar

51 min de lectura
Guía de Google Tag Manager en 6 pasos de IP10: etiqueta, activador, variable y consentimiento

Google Tag Manager (GTM) es la herramienta gratuita de Google para instalar y gestionar desde un único contenedor las etiquetas de medición y marketing de una web: Google Analytics 4, Google Ads, píxel de Meta, chats. Cambias una etiqueta sin tocar el código. La versión de pago, Tag Manager 360, es para grandes empresas.

Esquema: Google Tag Manager: espacio de trabajo de un contenedor web con etiquetas, activadores y variables, guía de IP10
Esquema: El espacio de trabajo del contenedor: Etiquetas, Activadores y Variables en el menú lateral. Todo lo que mide la web pasa por aquí.

Este tutorial de Google Tag Manager es para ti si tienes una pyme con web en WordPress (Site Kit, Elementor y, si vendes, WooCommerce) y quieres saber de dónde salen tus contactos. Da igual que la gestiones tú o que la acabes de heredar de otra agencia. Medir esos contactos te dice si el posicionamiento SEO para empresas funciona. No hace falta programar; sí acceso de administrador y la cuenta de Google del negocio, la misma con la que entrarás en tagmanager.google.com.

Al acabar tendrás esto: el contenedor de Google Tag Manager en la cuenta del negocio, instalado una sola vez. Un consentimiento que manda sobre lo que se carga. Los clics de teléfono, correo y WhatsApp y el formulario en GA4 como eventos clave. Una versión publicada que no cuenta dos veces ninguna página vista. Y una ficha con lo que lleva el contenedor y lo que no. Calcula una tarde (dos o tres horas) y entre 24 y 48 horas más para ver los informes.

Está escrita para webs de servicios y tiendas pequeñas en WordPress. Sigue la documentación oficial de Google y las comprobaciones que usamos en IP10 al montar y auditar la medición de una web.

Índice

Qué es Google Tag Manager y para qué sirve

Google Tag Manager es el panel desde el que instalas y gobiernas lo que mide tu web (Analytics 4, Google Ads, un píxel); no mide nada por sí mismo. Bien montado, te dice cada mes cuántas personas te llaman, te escriben o te envían el formulario.

Cómo funciona: contenedor, etiquetas, activadores, variables y capa de datos

Un contenedor es «un grupo de etiquetas, activadores, variables y opciones de configuración» instalado en una web. La jerarquía: cuenta → contenedor (uno por web, GTM-XXXXXXX) → espacio de trabajo (tres en el gratuito) → versión.

Con el contenedor mínimo del paso 5 se entiende cada pieza. La etiqueta es la orden: «envía a GA4 el evento click_telefono». El activador, la condición: «clic en un enlace que empiece por tel:». La variable, el dato que lee: Click URL. Y la capa de datos (dataLayer), el buzón donde la web deja lo que Google Tag Manager recoge, como un purchase con importe y productos.

Esquema: Qué es Google Tag Manager: una etiqueta de evento de GA4 con su activador de clic y la variable Click URL
Esquema: Una etiqueta de evento de GA4 con su activador de clic y la variable {{Click URL}}: las tres piezas que repetirás en el paso 5.

Google Tag Manager frente a Google Analytics 4 y la etiqueta de Google

Google Tag Manager vs Google Analytics 4, en dos líneas: GA4 mide y guarda; Google Tag Manager decide qué se carga y cuándo. La etiqueta de Google (gtag.js) conecta la página con GA4 y Ads; la carga el contenedor o la imprime Site Kit, y desde septiembre de 2023 sustituye a la antigua «Configuración de GA4». Search Console, la última columna de la tabla, mide lo que pasa en Google, no en tu web.

CriterioGoogle Tag ManagerGoogle Analytics 4Etiqueta de Google (gtag.js)Google Search Console
Qué esContenedor que carga y gobierna etiquetasHerramienta que recibe, guarda y muestra datosCódigo que conecta la web con GA4 y Google AdsPanel de cómo te ve el buscador
Qué mideNada por sí mismoPáginas vistas, eventos, eventos claveEnvía los datos; no los muestraImpresiones, clics y posiciones en Google
Dónde se instala<head> y tras <body>, una sola vezNo se instala: se crea la propiedadEn el <head>, impresa por un plugin o cargada por el contenedorNo se instala: se verifica la propiedad
Qué ID usaGTM-XXXXXXXG-XXXXXXXXXXGT-, G- o AW- (intercambiables solo si son ID de la misma etiqueta de Google)Ninguno
Quién lo suele imprimir en WordPressSite Kit, GTM4WP o Elementor Pro (uno solo)Nadie: lo alimentan la etiqueta de Google y las etiquetas del contenedorSite Kit o el contenedor; un solo emisor (paso 3)Nadie: Site Kit verifica la propiedad
Cuándo lo necesitasClics, formularios y terceros bajo consentimientoSiempre que quieras saber cuántos contactos llegan y de dóndeSiempre que uses GA4 o Ads, cargada por un solo emisorSiempre: te dice con qué búsquedas te encuentran
PrecioGratis (360 de pago)GratisGratisGratis

Google Tag Manager es gratis; Tag Manager 360 es otra cosa

Cero euros para particulares y pymes, sin límite práctico de etiquetas ni de tráfico, según la presentación oficial. Google Tag Manager 360, de pago y para grandes empresas, añade espacios de trabajo ilimitados, flujos de aprobación, zonas y un acuerdo de nivel de servicio.

Cuándo compensa instalarlo y cuándo no

Google Tag Manager compensa para medir clics de teléfono, correo y WhatsApp, un formulario de Elementor o terceros (un mapa de calor, un píxel) bajo consentimiento sin tocar código. No compensa si solo necesitas páginas vistas y un formulario de Contact Form 7: Site Kit con su modo de consentimiento basta.

Lo decide el inventario del paso 1: una tienda que ya mide con Google Analytics for WooCommerce y tiene su consent default bien puesto puede funcionar sin Google Tag Manager. Un contenedor sin eventos propios es una capa más que mantener.

Paso 1. Reúne los accesos e inventaría lo que tu web ya imprime

Necesitas cinco cosas (cuenta de Google de la empresa, administrador de WordPress, el G- de GA4, banner y política de cookies) y una hoja con quién imprime qué. Un gtag de plugin más otro en el contenedor duplican datos (paso 3); una acción de conversión escondida en Google Ads puede llevar años contando conversiones falsas.

Lo que necesitas antes de empezar

Si te falta cualquiera de las cinco, te quedarás a medias.

  1. La cuenta de Google de la empresa, la misma de Site Kit, GA4 y Search Console, a nombre del negocio. Al heredar una web es frecuente que el dueño no tenga usuario propio en Analytics ni en Search Console y que solo entre quien montó la medición; pasa cuando nadie lo apunta al terminar.
  2. Administrador de WordPress, sabiendo qué caché hay (WP Rocket, LiteSpeed, Cloudflare).
  3. El G-XXXXXXXXXX de GA4, creado a mano según la guía de Google Analytics 4 (enlazada en el paso 5).
  4. Un banner de cookies, aunque esté mal configurado: se arregla en el paso 4. En el Espacio Económico Europeo (EEE), Google exige consentimiento para usar sus productos publicitarios.
  5. Una política de cookies editable, escrita mirando la pestaña Red: declarar un píxel que no existe, o callar uno que sí carga, es un fallo igual de malo. Revisa los textos legales obligatorios de tu web.

Cómo saber si tu web ya carga Google Tag Manager o un gtag

No necesitas ningún comprobador en línea (los «Google Tag Manager checker» del buscador): pulsa Ctrl+U en la portada, busca googletagmanager.com y apunta cada gtm.js?id=GTM-, gtag/js?id=, gtag("config", consent default y fbevents.js. Es el mismo método de la guía de SEO técnico: cada etiqueta pesa.

Esquema: Comprobar si una web lleva Google Tag Manager: código fuente con gtm.js y gtag/js marcados
Esquema: En el código fuente, cada gtm.js?id= es un contenedor y cada gtag/js?id= una etiqueta de Google: apunta quién imprime cada uno.

Después, F12 → Red, filtro collect: cuántos page_view salen por carga y hacia qué ID. Es habitual que Site Kit y Google for WooCommerce descarguen cada uno su gtag.js. La extensión de Google Tag Manager para Chrome se llama Tag Assistant (la que muchos buscan como «Google Tag Manager Assistant»; la antigua Tag Assistant Companion queda sustituida por Tag Assistant) y lista lo mismo sin abrir el código.

Esquema: Pestaña Red del navegador filtrada por collect con un solo page_view antes de instalar el contenedor
Esquema: Pestaña Red con el filtro collect: un solo page_view por carga es el punto de partida correcto.

El mismo G- impreso por Site Kit y por un snippet (un fragmento de código pegado a mano) puede parecer que mide bien. No te fíes: Google avisa de que, si la misma etiqueta de Google se configura dos o más veces en la misma página, «pueden generarse datos duplicados o mezclarse los ajustes».

La protección de verdad es que solo haya un emisor: el snippet pegado a mano, además, no sabe excluir al administrador: sus visitas entran en las estadísticas. Si no puedes quitar uno, hay una opción de la etiqueta de Google que lo mitiga (paso 3). Quién imprime qué en un WordPress típico:

PluginQué imprimeDónde y cuándoQué hacer si vas a poner Google Tag Manager
Site Kit · Analyticsgtag/js con G-/GT- y su configwp_head, con «Colocar el código de Google Analytics» (Place Google Analytics code) activoDejarlo; contenedor sin etiqueta de Google
Site Kit · Tag Managergtm.js y <noscript>wp_head y wp_body_openLa vía recomendada (paso 3)
Site Kit · Modo de consentimiento, Complianz o CookieYesconsent default y updatewp_head, prioridad 1Uno solo; dos default se pisan
Site Kit · Plugin conversion trackingcontact, add_to_cart, purchaseAjustes → Analytics → EditarApagar si el contenedor medirá esos eventos
Google for WooCommerceOtro gtag.js con AW-, otro consent default, purchaseFinal del <head>, solo con conversión de AdsDejarlo; no duplicar el purchase
Google Analytics for WooCommercegtag con G- y eventos de tiendaWooCommerce → Ajustes → IntegraciónSi lo dejas, Site Kit sin snippet
Rank MathNada, salvo «Install Analytics Code»Ajustes generales → AnalyticsComprobar que está apagado
Plugins de píxel de Metafbevents.js y la cookie _fbp antes de aceptarwp_headDesinstalar; el píxel va por el contenedor
GTM4WPContenedor y dataLayerSegún «Container code placement»Con Site Kit, colocación «Off» (solo capa de datos)
Snippet a mano (HFCM, WPCode, Tracking Code Manager)Lo que alguien pegó hace añoswp_head o un shortcode en la cabecera de ElementorDesactivar, quitar el shortcode si lo hay y verificar en Red: algún gestor imprime el shortcode aunque el snippet esté «inactivo»

Lo que ya dispara la etiqueta de Google y la propiedad de GA4

Mira primero qué convierte ya, porque la conversión que más daño hacía no vivía en el contenedor. Empieza por Google Ads: en Objetivos → Conversiones → Resumen, filtra las acciones creadas «con una URL» (las de carga de página: «La URL empieza por», «contiene» o «es»); cada una es una conversión que se cuenta sola. Sigue por GA4: en Administrar → Visualización de datos → Eventos, lee las reglas de «Crear evento» y «Modificar evento» y la lista de eventos clave; y en Vinculaciones con otros productos, qué cuenta de Ads importa esos eventos.

En Google Tag Manager, pestaña «Etiquetas de Google» → tu etiqueta → pestaña «Administrar» → Gestión de etiquetas de Google → Gestionar la etiqueta de Google → Destinos, para saber a qué propiedades y cuentas reenvía la etiqueta.

En una web heredada puede pasar que la única «conversión» de Ads sea una acción de tipo carga de página, que cuenta cada visita a la página de contacto como un contacto: las campañas se optimizan con conversiones falsas. Otro hallazgo típico es encontrar Search Console, Ads y Merchant Center vinculados a una propiedad vacía, creada por error, mientras la propiedad real no tiene ninguna vinculación.

Cómo compruebas que el inventario está bien

Hoja de cuatro columnas (quién imprime · qué ID · dónde · lo dejo o lo quito) sin huecos; un page_view por propiedad y carga; ningún evento clave ni conversión de Ads que no reconozcas. Nuestra regla: un solo emisor para cada pieza (gtag, contenedor, consent default) o, como dice Google, etiqueta de Google o Google Tag Manager, no ambos a la vez. Si Site Kit imprime el gtag, tu contenedor no llevará etiqueta de Google (paso 3).

Paso 2. Cuenta y contenedor, a nombre del negocio

Entra en tagmanager.google.com con la cuenta de Google de la empresa y crea una cuenta de Google Tag Manager con el nombre del negocio y un contenedor Web con tu dominio. Te da un ID GTM-XXXXXXX y un código en dos partes; no lo pegues todavía: en el paso 3 lo coloca un plugin.

Cuenta a nombre del negocio, contenedor con el nombre de la web

Ruta: Crear cuenta → nombre de la empresa y país → nombre del contenedor (Google sugiere la URL) → plataforma Web → Crear → aceptar las condiciones. Un contenedor por web.

La cuenta la crea alguien del negocio y después se invita a la agencia, nunca al revés: es la lección del paso 1.

Dónde está el ID de GTM y qué hace cada parte del código

El ID aparece arriba a la derecha del espacio de trabajo y en Administrador → Instalar Google Tag Manager, junto al código. El código de Google Tag Manager (el script de instalación) tiene dos partes:

Esquema: ID de Google Tag Manager y el código de instalación en dos partes, head y noscript
Esquema: La pantalla de instalación: el ID GTM- arriba y los dos bloques de código, el del <head> y el <noscript>.
<!-- 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-XXXXXXX');</script>
<!-- End Google Tag Manager -->

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-XXXXXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->

El primer bloque va lo más arriba posible en <head>: carga gtm.js en asíncrono y ejecuta todo. El <noscript>, inmediatamente después de <body>, es el respaldo sin JavaScript. Criterio de IP10, no de la documentación: sin el primero no funciona nada; sin el segundo mide igual para casi todos, pero Google lo pide. Varios ID en una misma página, solo si son webs distintas que comparten plantilla; entonces cada activador lleva condición de dominio.

Permisos: cómo dar acceso a tu agencia sin darle tu cuenta de Google

Administrador → Administración de usuarios → + → Añadir usuarios → correo de Google de la agencia → permiso de contenedor Publicar → Invitar. Tú sigues siendo administrador de la cuenta; mejor dos personas del negocio.

Que Site Kit esté conectado no da permisos sobre el contenedor de Google Tag Manager: pausar una etiqueta o publicar exige un usuario con permiso de Publicar en tagmanager.google.com.

NivelQué puede hacerA quién dárselo
Cuenta · UsuarioVer la información básica de la cuentaQuien solo consulta
Cuenta · AdministradorCrear contenedores y cambiar permisosDos personas del negocio
Contenedor · Sin accesoNadaQuien ya no trabaja contigo
Contenedor · LeerBuscar etiquetas, activadores y variables, sin cambiosUn auditor externo
Contenedor · EditarEspacios de trabajo y cambios, sin crear versionesUn desarrollador puntual
Contenedor · AprobarAdemás, crear versiones; no publicaUn revisor interno
Contenedor · PublicarTodo, incluido publicarLa agencia que monta la medición
Esquema: Administración de usuarios del contenedor con permiso de Publicar para la agencia
Esquema: Administración de usuarios: la agencia con permiso de contenedor «Publicar», sin ser administradora de la cuenta.

Cómo compruebas que la cuenta y el contenedor están bien

En Administrador, la cuenta lleva el nombre del negocio, tú eres Administrador, el contenedor es Web y la agencia tiene Publicar. Si un día cambias de agencia, el contenedor sigue siendo tuyo.

Paso 3. Instala Google Tag Manager en WordPress y decide quién imprime el gtag

Un solo instalador de Google Tag Manager: Site Kit si ya lo usas, GTM4WP si quieres su capa de datos de WooCommerce o Contact Form 7, Elementor Pro si no tienes ninguno de los dos. Si Site Kit ya imprime el gtag de GA4, tu contenedor no lleva etiqueta de Google: con las dos, cada página vista puede contarse dos veces. Este paso va antes del consentimiento porque la comprobación por gcs del paso 4 necesita un gtag que dispare.

Vía A · Site Kit (la que recomendamos si ya lo usas)

Site Kit → Ajustes → Conectar más servicios → Configurar Google Tag Manager, con «Permitir que Site Kit coloque el código en tu sitio» (Let Site Kit place code on your site) activo. En Ctrl+U verás el script en el <head> y el <noscript> justo tras <body> (wp_body_open, prioridad -9999, según su código).

Dos trampas. La primera: Site Kit no ve dentro del contenedor y no apaga su gtag por ti. La segunda: el ajuste «Exclude Analytics» (Excluir de Analytics) se deja en «Users that can write posts» (usuarios que pueden escribir entradas), nunca en «All logged-in users» (todos los usuarios con sesión), que es el valor por defecto. Un cliente registrado también tiene sesión: en una tienda, esa opción deja fuera de GA4 todos los pedidos de clientes con cuenta.

Esquema: Instalar Google Tag Manager en WordPress: módulo Tag Manager de Site Kit con el interruptor de colocar el código
Esquema: El módulo Tag Manager de Site Kit con el interruptor que coloca el código. Si Site Kit imprime también el gtag, el contenedor no lleva etiqueta de Google.

Vía B · GTM4WP (si necesitas capa de datos de WooCommerce o Contact Form 7)

GTM4WP (versión 2.0.x; comprueba en su ficha los requisitos de PHP y de WordPress) es el plugin de Google Tag Manager para WordPress que rellena el dataLayer con los datos de WooCommerce y Contact Form 7. Ajustes → Google Tag Manager → pestaña «General» → ID y «Container code placement». Ese desplegable decide dónde va el bloque <noscript>; el script principal de <head> lo coloca el plugin en las tres primeras opciones, y «Off» retira las dos partes y deja solo la capa de datos.

Tiene cuatro opciones:

  1. «Footer of the page (compatible with all WP themes, no Search Console verification)»: la opción por defecto; funciona, pero más abajo de donde Google pide.
  2. «Manually coded after the opening body tag»: pegas <?php if ( function_exists( 'gtm4wp_the_gtm_tag' ) ) { gtm4wp_the_gtm_tag(); } ?> justo después del <body> en el tema.
  3. «Automatically after the opening body tag (theme must support wp_body_open)»: la que Google recomienda si tu tema llama a ese gancho (wp_body_open); Hello Elementor, Astra, GeneratePress y los temas de bloques lo hacen.
  4. «Off – container code turned off, data layer only»: cuando el contenedor ya lo imprime Site Kit y solo quieres el dataLayer del plugin.

Cambia el valor por defecto a la tercera.

Esquema: Ajustes de GTM4WP en WordPress: colocación del código del contenedor
Esquema: El desplegable «Container code placement» de GTM4WP: la tercera opción, tras la apertura de <body>, es la que pide Google.

Vía C · Elementor Pro → Código personalizado

Elementor → Código personalizado → Añadir nuevo: «GTM head» en <head> con prioridad 1, «GTM noscript» en <body> – Inicio, condición «Todo el sitio» (Entire Site). Si usas encabezados del Theme Builder, comprueba en Ctrl+U que el bloque de <body> – Inicio se imprime; si no, pásalo a <body> – Fin. El código vive en la base de datos de Elementor: documéntalo.

CriterioSite KitGTM4WPElementor Pro (Código personalizado)
Qué instalaContenedor (script + noscript)Contenedor + capa de datosSolo lo que pegues
Dónde pone el <noscript>wp_body_open (prioridad -9999)Pie de página (por defecto), wp_body_open o a mano<body> – Inicio (o Fin)
Capa de datos (WooCommerce / CF7)NoSí, las dosNo
consent defaultSí, con WP Consent APISí, casilla propiaNo
Entornos y server-sideNoSíNo
Dónde vive el códigoLo genera el pluginLo genera el pluginBase de datos de Elementor
Cuándo elegirlaYa usas Site KitTienda o CF7Ni Site Kit ni GTM4WP
TrampaNo ve dentro del contenedor; exclusión de usuariosCon Site Kit, uno de los dos en Off; el pie viene por defectoComprobar en Ctrl+U que <body> – Inicio se imprime

Sin plugin, y si tu web no es WordPress

Sin plugin, Google Tag Manager va en un mu-plugin (un plugin imprescindible que WordPress carga siempre desde wp-content/mu-plugins) enganchado a wp_head y wp_body_open; nunca en header.php, que una actualización del tema borra. Siempre desde googletagmanager.com, nunca desde un subdominio propio sin certificado válido (el caso, en la sección de errores). Un diseño web profesional se entrega con esto montado desde el primer día.

Si tu web no es WordPress, cambia el sitio donde lo pegas, no el código. Instalar Google Tag Manager en Wix solo pide el ID, desde sus integraciones de marketing. Google Tag Manager en Shopify o en PrestaShop se pega en dos partes en la plantilla del tema o se añade por módulo. Google recomienda en WordPress, Shopify o Wix una integración que no obligue a tocar el código de cada página; para el contenedor vale el mismo criterio: la integración del CMS antes que pegar código a mano. La comprobación es la misma en todos: Ctrl+U y un solo gtm.js.

Quién imprime el gtag: Site Kit o la etiqueta de Google del contenedor, nunca los dos

Opción A, la que recomienda Site Kit (para conservar sus dimensiones personalizadas): Site Kit imprime el gtag y el contenedor de Google Tag Manager no lleva etiqueta de Google; apúntalo en la ficha. Así, en una web de servicios basta con las tres etiquetas de clic y los clics de teléfono y correo entran en GA4 igual. Con las dos habría dos gtag("config") en el código fuente y dos page_view por carga.

Opción B, instalar Google Analytics con Google Tag Manager: Etiquetas → Nueva → Etiqueta de Google → ID G-XXXXXXXXXX → activador «Inicialización: todas las páginas», y en Site Kit → Ajustes → Analytics → Editar apaga «Colocar el código de Google Analytics». La antigua configuración de GA4 se convirtió sola en 2023.

Si heredas los dos y no puedes quitar uno, activa en la etiqueta de Google la opción «Ignorar instancias duplicadas de configuración en la página». Está en la pestaña «Etiquetas de Google» → nombre de la etiqueta → pestaña «Administrar» → Gestión de etiquetas de Google → Gestionar la etiqueta de Google. Google la activa sola cuando fusionas dos etiquetas de Google en una (la opción «Combinar» de esa misma gestión); en el resto de casos compruébala tú. Con ella se procesa el primer config y los ajustes de los siguientes se pierden, pero evita contar dos veces.

Es una salida de emergencia, no un diseño: Site Kit imprime el gtag, el contenedor lleva su etiqueta de Google con la opción activada porque de ella cuelgan los eventos, y la pestaña Red enseña un solo page_view. Fuera de ese caso, un solo emisor, y que sea el que sabe a quién excluir.

Si tu tienda mide con Google Analytics for WooCommerce, Site Kit queda con el snippet apagado para no imprimir un segundo gtag. Aun así, un add_to_cart puede contarse dos veces por otra razón: si la plantilla del tema dispara el evento de jQuery y el plugin lo recoge otra vez. Una auditoría que «ve eventos» no basta: hay que contarlos.

Situación de partidaQuién imprime el gtagEtiqueta de Google en el contenedorResultado en la pestaña Red
Site Kit con Analytics conectadoSite KitNo (a propósito)Un gtag/js, un page_view
Google Analytics for WooCommerce activoEl plugin de WooCommerce; Site Kit con el snippet apagadoNoUn page_view, un add_to_cart
Web sin ningún gtagEl contenedorSí, con G-XXXXXXXXXXUn gtag/js cargado por gtm.js
Snippet a mano en un plugin de cabeceraQuítalo; Site Kit o el contenedorSegún lo anteriorUn config, sin visitas del administrador
Esquema: Gestión de etiquetas de Google en Tag Manager con la opción Ignorar instancias duplicadas de configuración en la página activada
Esquema: La casilla «Ignorar instancias duplicadas de configuración en la página», dentro de la gestión de la etiqueta de Google.

Cómo compruebas que Google Tag Manager está instalado una vez

Ctrl+U: un gtm.js?id=GTM- en el <head>, un ns.html?id=GTM- tras <body> con el mismo ID y un solo gtag("config" con tu G- o GT-. Pestaña Red: gtm.js responde 200 y sale un page_view por carga y propiedad. Consola: window.google_tag_manager existe. El contenedor vacío no mide nada todavía: es normal.

Paso 4. Consentimiento antes de la primera etiqueta: Consent Mode v2 con Complianz o CookieYes

Antes de crear una sola etiqueta en Google Tag Manager, la web tiene que decirle a Google «todo denegado» en las primeras líneas de la página y «concedido» solo cuando el visitante acepta. Si el banner se pinta bien pero no manda ese aviso, mides sin permiso y Google descarta la señal para Ads en el EEE.

El consent default va antes que el contenedor, en las primeras líneas del <head>

Un solo emisor del default, con prioridad 1 en wp_head; después, quien cargue el gtag (Site Kit o el contenedor con su etiqueta de Google); al final, el banner, que envía el update. Lo que llega tarde no sirve de default.

Si el único default lo imprime un plugin con prioridad muy baja (por ejemplo Google for WooCommerce, al final del <head>), llega después del gtag: el primer page_view sale sin señal y las cookies _ga ya están creadas. Dos default en la misma página se pisan: elige un solo emisor entre el modo de consentimiento de Site Kit, Complianz, la casilla de GTM4WP o un mu-plugin de diez líneas. El de Site Kit está en Ajustes → Configuración de administrador («Admin Settings») → Modo de consentimiento y exige el plugin WP Consent API. El bloque, según la guía de consentimiento de Google:

<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',
  'functionality_storage': 'granted',
  'personalization_storage': 'denied',
  'security_storage': 'granted',
  'wait_for_update': 500
});
</script>
TipoQué controlaQué etiquetas lo miranValor por defecto en el EEE
analytics_storageCookies de medición (_ga)Etiqueta de Google, eventos de GA4denied
ad_storageCookies publicitariasConversiones y remarketing de Google Ads, píxelesdenied
ad_user_dataEnvío de datos de usuario a Google para publicidadConversiones mejoradas de Adsdenied
ad_personalizationPublicidad personalizadaRemarketing de Adsdenied
functionality_storageFunciones del sitio (idioma, carrito)Ninguna de Googlegranted
personalization_storageRecomendaciones y preferenciasNinguna de Googledenied
security_storageAutenticación y antifraudeNinguna de Googlegranted

Los cuatro primeros son obligatorios en el EEE desde marzo de 2024 para que Ads acepte la señal. En Google Tag Manager, Administrador → Configuración del contenedor → Ajustes adicionales → Habilitar resumen de consentimiento (ajustes de consentimiento en Google Tag Manager). La etiqueta del CMP (la plataforma de consentimiento: Complianz, CookieYes…) usa el activador «Inicialización de consentimiento: Todas las páginas», que viene creado en todo contenedor web.

Básico o avanzado: no son intercambiables

El avanzado carga el gtag antes de aceptar y solo lo marca como denegado (envíos sin cookies, que Google modela); el básico no carga nada hasta que el visitante decide (básico frente a avanzado). Si quien te audita exige que no se descargue ningún script, es el básico. Bloquear Google Tag Manager no lo bloquea todo: Google Fonts servido desde Google hace peticiones a Google aunque el visitante rechace, y puede bastar por sí solo para obligar a declarar una categoría de cookies en el banner. Aloja las fuentes en tu servidor.

Complianz con Google Tag Manager

Asistente → Consentimiento → Estadísticas → «Sí, y Google Tag Manager dispara este script» → Consent Mode v2: Sí. Esta opción exige Complianz Premium: con la versión gratuita el asistente no muestra la pregunta de Consent Mode. Con Premium y la integración de Site Kit desactivada, Complianz imprime contenedor y default, y ni Site Kit ni GTM4WP deben imprimirlos (guía de Complianz).

Con Complianz Free, o si Site Kit imprime el gtag, el camino es el que documenta Site Kit, no Complianz. El default lo pone el modo de consentimiento de Site Kit (activado en Ajustes → Configuración de administrador, con el plugin WP Consent API instalado). Complianz, que integra esa API también en su versión gratuita, solo manda el update. Los dos caminos son excluyentes: si en Complianz tienes activada la integración con Site Kit, las opciones de configuración de estadísticas desaparecen a propósito. Es un fallo típico de una web nueva: Site Kit imprime GA4 sin condicionarlo al banner porque nadie activó el modo de consentimiento.

Dos detalles más de Complianz: instala el paquete de idioma español antes de generar el banner, y para los terceros que no entienden el consentimiento usa sus eventos cmplz_event_* como «Evento personalizado» del activador.

Esquema: Complianz: asistente de estadísticas con el contenedor y Consent Mode v2 activados
Esquema: El asistente de Complianz con «Google Tag Manager» y Consent Mode v2 en «Sí»: esta pregunta solo aparece en la versión Premium.

CookieYes con Google Tag Manager: el interruptor solo funciona con la cuenta conectada

CookieYes → Google Consent Mode → activar → Publish Changes solo funciona con la web conectada a su cuenta. Con el plan gratuito sin conectar, aceptar no envía ningún update: el banner lanza cookieyes_consent_update y nadie lo escucha; GA4 acaba avisando de «señales de consentimiento inactivas».

Tres salidas: conectar la cuenta, WP Consent API más el modo de consentimiento de Site Kit, o un puente de diez líneas que lea la cookie cookieyes-consent y llame a gtag('consent','update') (documentación de CookieYes). La plantilla «CookieYes CMP» de la galería no vale con el plugin de WordPress.

Con Cookiebot y Google Tag Manager, la plantilla oficial «Cookiebot CMP» de la galería se encarga del default y del update con el activador «Inicialización de consentimiento: Todas las páginas»; la prueba es la misma, gcs=G100 y G111. Consentmanager y CookieScript también tienen plantilla y se comprueban igual. Real Cookie Banner no la necesita: gestiona default y update desde el propio plugin (Cookies → Ajustes → Google Consent Mode).

Cómo compruebas que el consentimiento está bien

Incógnito, pestaña Red filtrada por collect: sin tocar el banner, gcs=G100 en cada /g/collect y cero cookies _ga en Aplicación → Cookies; al aceptar, G111 y aparecen _ga y _ga_*; al rechazar (otra ventana), ninguna. El 204 no vale como prueba, y con muy pocas visitas al día los eventos denegados ni llegan a modelarse. Un CMP «activado» que no pinta nada o un bloqueador que no bloquea incumplen el consentimiento aunque el panel diga lo contrario. Cuenta las cookies antes de aceptar: cero.

Esquema: Parámetro gcs en la pestaña Red: G100 antes de aceptar y G111 después, comprobación de Consent Mode v2
Esquema: Dos peticiones a /g/collect: gcs=G100 antes de aceptar y gcs=G111 después. Esa es la prueba, no el código 204.

En Tag Assistant, la pestaña «Consentimiento» muestra los cuatro tipos en «Denegado» al cargar (columna «Valor predeterminado en la página») y en «Concedido» al aceptar (columna «Valor actualizado en la página»); en GA4 → Administrar → Recogida y modificación de datos → Configuración del consentimiento no debe quedar el aviso de señales inactivas. Un matiz de lectura: el primer page_view de una recarga puede salir con G100 aunque ya aceptaras, porque el CMP aplica el update desde su JS después del gtag; no es fallo.

Esquema: Pestaña Consentimiento de Tag Assistant en la vista previa de Google Tag Manager con los cuatro tipos denegados antes de aceptar
Esquema: La pestaña Consentimiento de Tag Assistant: los cuatro tipos en «Denegado» en la columna del valor predeterminado.

Paso 5. El contenedor mínimo: clics de teléfono, correo, WhatsApp y formulario como eventos clave

Configurar Google Tag Manager para medir contactos son cuatro etiquetas «Google Analytics: evento de GA4», cada una con su activador: clic en enlaces tel:, mailto: y wa.me o api.whatsapp.com, y el mensaje de éxito del formulario. Márcalas como eventos clave en GA4 el mismo día y sabrás cada mes cuántas personas te contactan y por dónde.

Antes: activa las variables integradas que vas a usar

En Google Tag Manager, Variables → Configurar y marca Click URL, Click Text, Click Classes, Click ID, Page Path y Form ID. Sin Click URL activada, el activador no tiene nada que filtrar.

Tres etiquetas de clic: tel:, mailto: y wa.me

Son la misma etiqueta con distinto evento y condición. Etiquetas → Nueva → «Google Analytics: evento de GA4» (etiqueta de evento de GA4), ID G-XXXXXXXXXX, evento click_telefono, parámetros link_url = {{Click URL}} y metodo_contacto = telefono. Activador: Clic → Solo enlaces → Algunos clics → Click URL empieza por tel:, con «Esperar etiquetas» y «Comprobar la validación» desactivados (activadores de clic). Nombre: «GA4 – Evento – click_telefono», carpeta «Contacto».

Esquema: Etiqueta de evento de GA4 click_telefono en Google Tag Manager con activador de clic en enlaces que empiezan por tel:
Esquema: La etiqueta click_telefono con sus parámetros y, debajo, el activador «Click URL empieza por tel:».

click_email es idéntica con mailto:. En click_whatsapp la condición es Click URL coincide con la expresión regular wa\.me|api\.whatsapp\.com|whatsapp:\/\/: los botones de Elementor usan api.whatsapp.com/send; los enlaces a mano, wa.me. Si cambias el botón por un chatbot de WhatsApp con IA, revisa la etiqueta: el activador ya no coincide con el nuevo enlace y hay que rehacerlo (y renombrar el evento, por ejemplo a chat_click, para que siga describiendo lo que mide). Una etiqueta de clic a WhatsApp puede sobrevivir meses después de retirar el botón. Cada vez que cambies un canal de contacto, revisa el contenedor; la etiqueta que no dispara no avisa.

Etiqueta (nombre en Google Tag Manager)Evento de GA4ActivadorCondiciónParámetrosEvento clave
GA4 – Evento – click_telefonoclick_telefonoClic → Solo enlacesClick URL empieza por tel:link_url, metodo_contacto = telefonoSí, una vez por sesión
GA4 – Evento – click_emailclick_emailClic → Solo enlacesClick URL empieza por mailto:link_url, metodo_contacto = emailSí, una vez por sesión
GA4 – Evento – click_whatsappclick_whatsappClic → Solo enlacesClick URL coincide con la expresión regular wa\.me|api\.whatsapp\.com|whatsapp:\/\/link_url, metodo_contacto = whatsappSí, una vez por sesión
GA4 – Evento – generate_lead (Elementor)generate_leadEvento personalizado formulario_enviado o Visibilidad del elemento.elementor-message-success, una vez por páginaform_nameSí, una vez por sesión
GA4 – Evento – generate_lead (CF7)generate_leadEvento personalizadogtm4wp.contactForm7MailSentform_idSí, una vez por sesión
HTML – ClarityningunoTodas las páginasLa etiqueta requiere consentimiento adicional para activarse: analytics_storage—No

Formularios: el activador que sí mide el envío (Elementor y Contact Form 7)

Ni el activador «Envío de formulario» de Google Tag Manager ni el form_submit de la medición mejorada de GA4 valen como evento clave. El activador «Envío de formulario» se dispara cuando el usuario intenta enviar; con «Comprobar la validación» marcada, solo si el navegador da el formulario por válido, que no es lo mismo que el servidor lo acepte. Elementor y Contact Form 7 envían por JavaScript sin salir de la página, así que el activador nunca sabe si el mensaje llegó. El form_submit de la medición mejorada tiene el mismo límite: registra el envío, no si fue válido.

Por eso conviene sustituir form_submit como evento clave por generate_lead, con activador Visibilidad del elemento sobre .elementor-message-success, una vez por página. Y si la propiedad de GA4 es compartida con otras webs, filtra por hostName antes de fiarte de cualquier recuento.

Esquema: Activador de visibilidad del elemento .elementor-message-success para medir el formulario de Elementor
Esquema: El activador de visibilidad sobre .elementor-message-success, limitado a una vez por página: solo salta cuando el envío llega.

La alternativa con Elementor Pro es escuchar su evento submit_success (documentado por la comunidad, no por Elementor) con un dataLayer.push, en Elementor → Código personalizado:

<script>
jQuery(document).on('submit_success', '.elementor-form', function (e, r) {
  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({
    event: 'formulario_enviado',
    form_name: this.getAttribute('name') || this.id || 'sin-nombre'
  });
});
</script>

Después, la etiqueta generate_lead con activador «Evento personalizado» formulario_enviado. Con Contact Form 7 y Site Kit basta activar «Plugin conversion tracking», que emite contact por sí solo; con GTM4WP, «Evento personalizado» gtm4wp.contactForm7MailSent, que solo salta con envíos correctos.

Chats, mapas de calor y otros terceros: HTML personalizado con consentimiento adicional

Una etiqueta de HTML personalizado (un mapa de calor, un chat) no sabe nada del banner: en Configuración avanzada → Configuración de consentimiento elige «La etiqueta requiere consentimiento adicional para activarse» y añade analytics_storage. Así, un mapa de calor como Clarity no dispara hasta que el visitante acepta. Cuando Google Tag Manager avise al publicar de «etiquetas no configuradas para pedir consentimiento», revísalas una a una: las de Google, «No se requiere ningún consentimiento adicional»; las de terceros, «La etiqueta requiere consentimiento adicional para activarse». Cada tercero nuevo entra en la política de cookies.

Márcalos como eventos clave en GA4 el mismo día, una vez por sesión

Los nombres de evento del contenedor y los eventos clave de GA4 tienen que ser la misma lista: es común marcar como clave un evento (contact) que nunca llega, mientras el que sí llega (form_submit) no está marcado.

GA4 → Administrar → Visualización de datos → Eventos → «Marcar como evento clave» en los cuatro nombres (eventos clave); si aún no han llegado, Administrar → Visualización de datos → Eventos clave → Nuevo evento clave, o por API, sin esperar al primero. Recuento: una vez por sesión, para que tres clics al teléfono no sean tres contactos. Desmarca lo que no dispara nunca o no es tuyo; purchase puede figurar en una web sin carrito y no se deja quitar: déjalo. El form_submit de la medición mejorada se queda como red, no como evento clave.

Esquema: Eventos clave de GA4 click_telefono, click_email, click_whatsapp y generate_lead con recuento una vez por sesión
Esquema: Eventos clave en GA4 con los cuatro nombres del contenedor y el recuento «Una vez por sesión».

Cómo compruebas que los clics y el formulario miden

En la vista previa de Google Tag Manager del paso 6, al pinchar en el teléfono la etiqueta se dispara con Click URL = tel:+34…. En DebugView (Administrar → Visualización de datos → DebugView) click_telefono llega con sus parámetros, como cuenta la guía de Google Analytics 4. Un envío real del formulario produce un generate_lead; uno con un campo vacío, ninguno. A las 24-48 horas, en Administrar → Visualización de datos → Eventos clave los cuatro tienen el interruptor activo y coinciden con los que llegan.

Paso 6. Prueba con Tag Assistant, publica la versión y deja la ficha escrita

Pulsa Vista previa en Google Tag Manager y haz tú mismo lo que quieres medir: llamar, escribir, enviar el formulario, aceptar y rechazar el banner. Cuando cada etiqueta se dispare una sola vez, Enviar → Publicar y crear versión; después, exporta el JSON y apunta la ficha.

Vista previa: Tag Assistant carga siempre tu espacio de trabajo

Vista previa (arriba a la derecha en Google Tag Manager) abre Tag Assistant: pegas la URL, pulsas Conectar y la web carga con el aviso «Conectado». Es el borrador; el mundo sigue con la versión publicada.

Tag Assistant se organiza en pestañas: «Etiquetas» (activadas o bloqueadas), «Variables» (Click URL en cada clic), «Capa de datos» (cada dataLayer.push), «Consentimiento» y «Errores» (los fallos de JavaScript del contenedor). En «Consentimiento», la columna «Valor predeterminado en la página» debe marcar «Denegado» al cargar y la columna «Valor actualizado en la página» pasa a «Concedido» al aceptar. En DebugView de GA4 los eventos entran solos: la vista previa añade debug_mode. Se comparte desde Más acciones → Compartir.

La extensión Tag Assistant del paso 1 abre este mismo depurador en una pestaña. Si no conecta (bloqueador de anuncios, una política de seguridad de contenido o CSP estricta, el propio banner), prueba en incógnito sin extensiones.

Esquema: Vista previa de Google Tag Manager en Tag Assistant con las etiquetas activadas al hacer clic en el teléfono y la pestaña Consentimiento
Esquema: Tag Assistant conectado: al pulsar el teléfono, la etiqueta aparece en «Etiquetas activadas» y la pestaña Consentimiento muestra el estado.

Enviar → Publicar y crear versión (y la caché de 15 minutos)

Enviar → Publicar y crear versión → nombre («v2 · clics tel/mail/wa + formulario + consentimiento») y descripción → Publicar. Si avisa de etiquetas sin consentimiento configurado, revísalas una a una. Volver atrás: Versiones → Acciones → Configurar como la última versión.

Publicas en Google Tag Manager, recargas y la etiqueta nueva no aparece: gtm.js se cachea 15 minutos en el navegador (max-age=900). Verifica en vista previa, que carga siempre el espacio de trabajo, o espera un cuarto de hora. En GA4 tampoco hay corte limpio: los navegadores con el script en caché siguen enviando la configuración antigua durante horas.

Si has separado una etiqueta de Google agrupada, comprueba antes de publicar que la nueva tiene destinos.

Esquema: Publicar y crear versión del contenedor con nombre y descripción de la versión
Esquema: El diálogo «Enviar cambios» con nombre y descripción de la versión: lo que leerá quien abra el contenedor dentro de un año.

Exporta el contenedor y escribe la ficha: qué lleva y qué NO lleva a propósito

En Google Tag Manager, Administrador → Exportar contenedor → versión publicada → Descargar. Guárdalo fuera de la web como GTM-XXXXXXX_vN_AAAA-MM-DD.json y deja una ficha que entienda quien no estuvo esa tarde:

  1. ID del contenedor.
  2. Quién imprime el contenedor y con qué opción.
  3. Quién imprime el gtag, con qué ID, y si el contenedor lleva etiqueta de Google («no, a propósito: la imprime Site Kit»).
  4. CMP y quién emite default y update.
  5. Versión publicada, fecha y nota.
  6. Usuarios con permiso de Publicar.
  7. Fecha y resultado de la verificación del consentimiento (paso 4).

Si entró un tercero, versiona también la política de cookies.

Esquema: Exportar contenedor de Google Tag Manager en JSON como copia de seguridad
Esquema: Exportar contenedor con la versión publicada seleccionada: el JSON es la copia de seguridad que guardas fuera de la web.

Cómo compruebas que la versión publicada está bien

En la pestaña Versiones de Google Tag Manager, la nueva figura como publicada, con su nombre y su nota; el JSON está guardado fuera de la web; y la ficha responde a los siete puntos sin abrir el contenedor. Que además mide, y una sola vez, se comprueba en la sección siguiente.

Cómo saber que Google Tag Manager mide una sola vez

Ventana de incógnito y cinco comprobaciones de que Google Tag Manager mide una sola vez: código fuente, consola, pestaña Red, DebugView y Tiempo real. Prepárate: al medir solo a quien acepta, las sesiones bajan.

La comprobación de 10 minutos que repetimos en cada web

Ningún comprobador en línea sustituye esto; repítelo tras cada cambio:

  1. Ctrl+U: un gtm.js?id=, un ns.html?id= con el mismo ID y un gtag/js por destino (dos con distinto ID no es error si son Site Kit y el AW- de WooCommerce; dos con el mismo, sí).
  2. Consola: existen window.google_tag_manager y dataLayer. Si faltan, Google Tag Manager no ha cargado y con él ninguna etiqueta de Google: es fácil diagnosticar «sin Consent Mode v2» cuando lo que falla es que el contenedor ni se carga (la sección de errores lo explica).
  3. Red, filtro collect: gcs como en la tabla. El 204 no demuestra nada: un envío denegado también lo devuelve, así que la prueba es el gcs, nunca el código de respuesta.
  4. DebugView: cada evento con sus parámetros.
  5. Informes → Tiempo real: click_telefono en menos de un minuto.

En una tienda añade dos pruebas: un pedido de invitado hasta el pago, marcado para que no cuente, y el mismo número de pedidos antes y después del cambio; luego, un barrido de las páginas principales sin errores de PHP. Si auditas una web ajena, las preguntas son tres y distintas: si hay dataLayer con eventos, si carga el contenedor y si se envía el consentimiento.

Estadogcs en /g/collectCookies _gaTag Assistant → ConsentimientoSi no lo ves
Sin decidirG100NingunaDenegadoEl default llega tarde o falta (paso 4)
AceptarG111_ga y _ga_*ConcedidoEl CMP no envía el update
RechazarG100NingunaDenegadoHay un emisor fuera del contenedor (plugin o snippet)
Recarga tras aceptarPrimer page_view G100, resto G111_gaConcedidoNormal: el CMP aplica el update desde su JS después del gtag
Esquema: Tiempo real de GA4 mostrando el evento click_telefono enviado desde el contenedor
Esquema: Informe Tiempo real de GA4 con click_telefono en la tarjeta de eventos, menos de un minuto después del clic.

Al arreglar el consentimiento las cifras bajan: no es avería

Al activar bien el consentimiento, las sesiones medidas bajan: solo cuenta quien acepta, y parte del tráfico que se contaba antes eran rastreadores automáticos, que no aceptan cookies. Avisa antes de publicar a quien mire los informes: la bajada es normal. Los bloqueadores de anuncios paran gtm.js en parte del tráfico: por eso GA4 casi siempre cuenta menos sesiones que clics tiene Search Console.

Lecturas que engañan los primeros días

El día en curso llega incompleto y, el día del cambio, las sesiones de la mañana aún se midieron con la configuración vieja: juzga por Tiempo real o por horas, nunca por el total diario. Los navegadores con el script en caché siguen enviando la versión vieja: es el efecto de la caché del paso 6.

Si envías eventos desde el servidor (Measurement Protocol), la URL de depuración acepta cualquier secreto y no sirve de prueba: la prueba es ver el evento en Tiempo real. Desconfía también del informe vacío con explicación plausible: puede esconder un filtro roto.

Al limpiar etiquetas la propiedad puede hundirse: en una propiedad que compartía etiqueta con otras webs, la inmensa mayoría de las sesiones no eran suyas. Filtra por hostName y contrasta con Search Console. Y no todo lo que entra es una persona: 50 sesiones cuya página de entrada es una ruta de archivos de Windows son un rastreador. El diagnóstico de etiquetas avisa si una etiqueta deja de enviar datos 48 horas.

Tienda, Google Ads y píxel de Meta desde Google Tag Manager (nunca desde un plugin)

Espera a que el contenedor mínimo de Google Tag Manager lleve una semana midiendo bien. Después: purchase una sola vez y solo con la clave del pedido correcta, conversión de Ads de una sola fuente y píxel de Meta por el contenedor con consentimiento.

La capa de datos (dataLayer) de Google Tag Manager: qué es y cuándo hace falta

La capa de datos de Google Tag Manager (el dataLayer) es el buzón de JavaScript window.dataLayer donde tu web deja datos y eventos para que el contenedor los lea. En una web de servicios casi nunca hace falta; en una tienda, siempre.

Se declara antes del snippet (capa de datos). Si un evento aparece en dataLayer y nunca llega a GA4, el dataLayer.push está mal formado: Google Tag Manager solo dispara el «Evento personalizado» con un objeto que lleve la clave event (dataLayer.push({event: 'nombre'})), y el nombre distingue mayúsculas. Míralo en la pestaña «Capa de datos» de Tag Assistant y en la pestaña Red, no en la consola.

El purchase se construye en servidor, solo si la clave del pedido cuadra

En una tienda online con WooCommerce el purchase lo escribe PHP en la página de gracias, solo si hash_equals confirma la clave del pedido. Una marca guardada en el pedido la primera vez que se emite evita que recargar la página lo cuente dos veces. Si se emite con solo el número de pedido y los números son correlativos, basta recorrerlos para ver los pedidos de otros clientes, con su importe: es un fallo que han tenido plugins que leían el ID del pedido sin comprobar la clave.

El push de compra, con la estructura de comercio electrónico de GA4:

<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
  event: "purchase",
  ecommerce: {
    transaction_id: "1001",
    value: 120.00,
    tax: 20.83,
    shipping: 5.00,
    currency: "EUR",
    items: [{ item_id: "SKU-001", item_name: "Producto", price: 115.00, quantity: 1 }]
  }
});
</script>

Lo genera un mu-plugin enganchado a woocommerce_thankyou; GTM4WP lo trae hecho, con el SKU del catálogo como item_id (el mismo identificador que usas para el feed, como cuenta la guía de SEO para ecommerce). En Google Tag Manager: etiqueta «Google Analytics: evento de GA4», nombre purchase, datos de comercio electrónico desde la capa de datos, activador «Evento personalizado» purchase. Si hay pedidos y ningún purchase en GA4, rara vez es un problema del plugin de medición: casi siempre falla la página de gracias, que es donde se emite el evento. Antes de reinstalar nada, haz un pedido real con DebugView abierto.

Esquema: Evento purchase en la capa de datos visto en Tag Assistant con transaction_id, value e items, tienda WooCommerce
Esquema: El objeto purchase en la pestaña Capa de datos de Tag Assistant: transaction_id, value e items, con datos de prueba.

Una sola fuente por conversión: deduplicar y cubrir a quien no vuelve de Bizum

El purchase de Google for WooCommerce va a Ads (AW-); los de Google Analytics for WooCommerce y del «Plugin conversion tracking» de Site Kit van a GA4: si lo emite Google Tag Manager, apaga los otros. GA4 deduplica por transaction_id; en Ads, una sola conversión de compra principal (las de Shopping se gestionan aparte, desde Google Merchant Center). Añade la pasarela (Redsys, PayPal) y tu propio dominio a la lista de referencias no deseadas del flujo de GA4; si no, la vuelta desde el banco se queda con la atribución de la compra.

El purchase del navegador se pierde en las compras en las que el cliente no vuelve a la web: con Bizum confirma en la app del banco, y con otras pasarelas puede cerrar la ventana antes de la página de gracias. Si tu tienda cobra sobre todo por Redsys o Bizum, merece la pena una red de seguridad: un evento enviado desde el servidor con Measurement Protocol unos minutos después, con el mismo transaction_id, solo si el navegador no lo mandó y con el consentimiento leído del CMP.

Conversión de Google Ads: etiqueta, vinculación y conversiones mejoradas

Antes de vincular Google Ads con Google Tag Manager, lee las conversiones y vinculaciones que ya existen: la conversión falsa por URL y la propiedad vacía del paso 1 salieron de ahí.

Luego, en Google Tag Manager, etiqueta «Seguimiento de conversiones de Google Ads» con el ID y la etiqueta de conversión (Ads → Objetivos → Conversiones → «Usar Google Tag Manager»). Si el contenedor carga una etiqueta de Google en todas las páginas no necesitas la «Vinculación de conversiones»; y los contenedores con etiquetas de Google Ads cargan esa etiqueta de Google por sí solos. Las conversiones mejoradas (variable «Datos proporcionados por los usuarios») solo compensan si inviertes en Ads de forma continuada; en una pyme suele bastar con importar los eventos clave de GA4.

El píxel de Meta: plantilla oficial con consentimiento ad_storage, no un plugin

Si haces publicidad en redes sociales, el píxel de Meta (el «píxel de Facebook» de toda la vida) se instala desde Google Tag Manager con la plantilla oficial de Meta, en la galería. Ruta: Plantillas → Buscar en la galería → «Meta». Marca «La etiqueta requiere consentimiento adicional para activarse» con ad_storage.

Un plugin de píxel creaba la cookie _fbp desde el servidor antes de que el visitante decidiera. Además guardaba en claro en la base de datos su token de la API de conversiones, el tipo de descuido que cuentan las vulnerabilidades de plugins de WordPress. Sin él, la web sirve cero cookies antes de aceptar. Es frecuente que el píxel se inicialice más de una vez por página (el plugin, el tema y un snippet) y que cada compra llegue duplicada a Meta: cuenta fbq('init', no fbq('track'. Cada tercero nuevo cambia la tabla de cookies.

Esquema: Galería de plantillas: plantilla oficial de Meta Pixel con consentimiento adicional ad_storage
Esquema: La plantilla oficial de Meta en la galería; el consentimiento adicional ad_storage se marca en la configuración de la etiqueta.

Errores en webs reales: herencias, cachés y lado del servidor

Casi ningún problema de medición que arreglamos estaba dentro de Google Tag Manager: estaba en lo que había alrededor. Estos son los que más se repiten, con su cifra y su comprobación.

Al heredar: una etiqueta de Google agrupada mide varias webs a la vez

Lo primero al heredar una web es abrir la pestaña «Etiquetas de Google» del espacio de trabajo de Google Tag Manager, entrar en cada etiqueta y, en su pestaña «Administrar» → Gestión de etiquetas de Google → Gestionar la etiqueta de Google, leer los destinos. En una cuenta que ha gestionado varias webs, una misma etiqueta puede agrupar identificadores de distintos clientes: una tienda acaba enviando eventos a propiedades que ni aparecen en su código fuente, y una propiedad acaba midiendo varias webs a la vez. Comprobación: exploración de GA4 por hostName.

Un destino solo vive en una etiqueta: al separar una etiqueta agrupada, la nueva nace sin destinos («no hay ningún destino vinculado») y el arreglo es moverlos, nunca duplicarlos; compruébalo nada más guardar. Un truco que Google no documenta: en el gtag/js?id= servido, el campo "55":[] significa que no mide nada. Si el AW- llegó por Google for WooCommerce, se quita en Google Ads → Gestor de datos, no desconectando el plugin.

Esquema: Destinos de una etiqueta de Google en la gestión de etiquetas de Google del contenedor: un destino solo puede estar en una etiqueta
Esquema: Los destinos de una etiqueta de Google: cada ID de GA4 o de Ads solo puede vivir en una etiqueta.

Restos de Universal Analytics, snippets desactivados y dos contenedores en la misma web

Lo que ya no existe no se deja «por si acaso»: Universal Analytics, la antigua etiqueta de configuración de GA4, variables sin referencias, snippets «desactivados» que un shortcode sigue imprimiendo y un segundo contenedor. Es habitual que el script de Universal Analytics (cerrado en 2023) siga cargándose en la portada, con su peso inútil, junto a una variable UA- huérfana, un snippet a medio escribir o un contenedor cargado dos veces. Comprobación: Ctrl+U y contar los GTM-.

Una web clonada a partir del WordPress de otro proyecto suele heredar dos contenedores de Google Tag Manager, el suyo y el del proyecto original, con etiquetas (remarketing incluido) sin condición de dominio: las visitas alimentan Analytics y píxeles que no son suyos. Google pide un contenedor por dominio; si uno sirve a varios, cada activador lleva condición de Page Hostname.

Un banner bien diseñado tampoco garantiza nada si la etiqueta carga sin condición. Si una etiqueta de Universal Analytics que nadie retiró cuando Google cerró el servicio en 2023 sigue cargándose en el <head> sin condición ni Consent Mode v2, el banner no sirve de nada: riesgo legal a cambio de ningún dato. Primero se retira lo viejo y luego se hace que el banner obedezca. Comprobación: rechaza y mira la pestaña Red, recordando las peticiones de Google Fonts del paso 4.

Cachés y optimizadores que rompen Google Tag Manager o el consentimiento

Excluye googletagmanager.com y los ficheros del banner de cualquier opción que retrase o difiera JavaScript: si el contenedor espera a que el visitante mueva el ratón, las visitas cortas no cuentan y el consent default sale después del gtag. Una actualización del optimizador puede reactivarlo; por eso se revisa en cada mantenimiento web WordPress.

OptimizadorOpción que rompe la mediciónQué excluir / qué hacer
WP RocketRetrasar la ejecución de JavaScriptExclusiones con un clic → Google Tag Manager y Google Analytics; en «Archivos JavaScript excluidos», complianz, cmplz y cky
LiteSpeed Cache«Load JS Deferred» en Delayed; «Localize Resources» activado con URL de Google añadidas a manoAñadir gtag, dataLayer y las rutas del CMP a «JS Deferred / Delayed Excludes» (gtm.js ya viene); no localizar googletagmanager.com
Cloudflare Rocket LoaderRetrasa todos los <script>data-cfasync="false" en el snippet o desactivar Rocket Loader (con Site Kit el snippet no se edita)
AutoptimizeCombinar y minificar JSExcluir complianz, cmplz y cookie-law-info en «Exclude scripts from Autoptimize»
Caché de página (WP Rocket, LiteSpeed, WP Fastest Cache)Ninguna: compatibleEl consent default inline es igual para todos; no cachees páginas que decidan en PHP según la cookie de consentimiento

En LiteSpeed, si alguien añadió googletagmanager.com a «Localize Resources», quítalo: sirve copias locales que envejecen. Desde la 4.6 (marzo de 2022) la lista solo trae Twitter y el píxel de Meta, y la localización viene desactivada.

Comprobación: purgar, incógnito y, en la pestaña Red, gtm.js se pide sin mover el ratón y el primer /g/collect lleva gcs.

Esquema: Exclusiones de un clic de WP Rocket para Google Tag Manager y Google Analytics al retrasar la ejecución de JavaScript
Esquema: En WP Rocket, al retrasar JavaScript, Google Tag Manager y Google Analytics van en las exclusiones de un clic; el CMP se añade a mano.

Google Tag Manager server side (etiquetado del lado del servidor): qué es, qué cuesta y cuándo compensa

El etiquetado del lado del servidor (Google Tag Manager server side) es un segundo contenedor en tu servidor. El navegador envía los eventos a un subdominio tuyo y ese contenedor los reenvía a GA4, Google Ads y terceros, con control sobre lo que sale. La «Pasarela de etiquetas de Google para anunciantes» es otra cosa: carga la etiqueta de Google y envía sus datos por una ruta de tu propio dominio, que los reenvía a Google tal cual; ni filtra ni reenvía a terceros.

Cuesta dinero y mantenimiento: Google recomienda Cloud Run, con un mínimo de dos instancias y un coste mensual por instancia que debes consultar en su guía, más un dominio propio y alguien que lo vigile. Compensa en tiendas con volumen e inversión en Ads; en una web de servicios con unas pocas visitas al día, no.

Si lo montas, el certificado del subdominio es lo primero que vigilas. Si Google Tag Manager se carga desde un subdominio propio (lo que Google llama first-party) y su certificado no cubre ese nombre, el navegador rechaza la conexión y GA4, Ads, Shopping y el píxel dejan de recibir señales sin que ningún panel avise. Comprobación: en la consola, window.google_tag_manager no existe (el punto 2 de «Cómo saber que mide una sola vez»).

Checklist: instalado, con consentimiento y sin duplicar

Quince casillas en tres bloques para cerrar el montaje, auditar un contenedor de Google Tag Manager heredado o estrenar una web: cada línea acaba con su comprobación en cursiva.

Antes de crear nada

  1. Inventario: quién imprime qué. Hoja sin huecos.
  2. Eventos clave, conversiones de Ads y vinculaciones revisados. Sin conversiones desconocidas.
  3. Cuenta y contenedor del negocio. Administrador lo confirma.
  4. Agencia con permiso de Publicar. Nunca tu contraseña.

Instalación y consentimiento

  1. Google Tag Manager impreso una vez. Un gtm.js, un ns.html.
  2. Site Kit excluye solo a quien escribe entradas. Pedidos contados.
  3. Decidido quién imprime el gtag. Un page_view por carga.
  4. consent default primero, único, cuatro tipos de Ads. Antes del contenedor, ad_user_data dentro.
  5. G100 sin aceptar, G111 al aceptar, sin _ga al rechazar. Incógnito, cero cookies antes.

Eventos, tienda y mantenimiento

  1. Tres clics y formulario. Cada uno dispara una vez.
  2. Terceros con consentimiento adicional. Ningún aviso al publicar.
  3. Eventos clave «una vez por sesión». Misma lista que el contenedor.
  4. Tienda: purchase en servidor, una fuente, referencias no deseadas, píxel por el contenedor. Mismos pedidos antes y después.
  5. Optimizadores excluyen googletagmanager.com y CMP. Purga, incógnito, gtm.js carga.
  6. Versión con nota, JSON, ficha, política al día; revisar al cambiar un canal. La etiqueta muda no avisa.

Preguntas frecuentes sobre Google Tag Manager

¿Qué es Google Tag Manager y para qué sirve?

Es el panel gratuito de Google para instalar y gobernar las etiquetas de tu web (Analytics 4, Google Ads, píxeles) sin tocar el código. No mide nada por sí mismo: sirve para medir clics de teléfono, correo y WhatsApp, formularios y compras, y para cargar terceros solo con consentimiento del visitante.

¿Google Tag Manager es gratis? ¿Qué es Tag Manager 360?

Sí. La versión gratuita de Google Tag Manager no tiene coste ni cuota por etiquetas ni por tráfico, y es la que usa cualquier pyme. Tag Manager 360 es la edición de pago para grandes empresas, dentro de Google Marketing Platform, con soporte contratado y funciones de equipo; si no sabes si la necesitas, no la necesitas.

¿Cuál es la diferencia entre Google Tag Manager y Google Analytics 4?

Google Analytics 4 mide y guarda: páginas vistas, eventos, informes. Google Tag Manager no mide: decide qué etiquetas se cargan y cuándo, y GA4 es una de ellas. Search Console mira lo que pasa en Google, no en tu web. Puedes usar GA4 sin Tag Manager; al revés también, aunque sin GA4 el contenedor solo sirve para cargar terceros.

¿Necesito Google Tag Manager si ya tengo Site Kit o el gtag de Analytics?

Depende de qué quieras contar. Si te basta con visitas y un formulario que ya emite su evento, Site Kit lo cubre. Si quieres saber quién te llama, te escribe por WhatsApp o rellena un formulario de Elementor, o cargar un tercero solo cuando el visitante acepte, sí; y entonces uno de los dos deja de imprimir el gtag.

¿Cómo instalo Google Tag Manager en WordPress, con Elementor o sin plugin?

Para instalar Google Tag Manager en WordPress, elige por lo que ya tienes: con Site Kit conectado, que lo coloque él; con tienda o Contact Form 7, GTM4WP; con Elementor Pro, Código personalizado. Sin plugins, el snippet va en un mu-plugin, que sobrevive a las actualizaciones del tema. Nunca dos instaladores a la vez ni el código pegado en header.php.

¿Dónde está el ID del contenedor y dónde va el código?

Arriba a la derecha del espacio de trabajo de Google Tag Manager y en la pantalla de instalación de Administrador, junto al código. El código tiene dos partes: la primera, lo más arriba posible en head; la segunda, nada más abrir body. No confundas el GTM- del contenedor con el G- de GA4 ni con el AW- de Google Ads.

¿Cómo saber si una web tiene Google Tag Manager? ¿Qué es Google Tag Manager Assistant?

Pulsa Ctrl+U y busca gtm.js?id=GTM-; en la pestaña Red, un gtm.js por contenedor y un page_view por propiedad. Google Tag Manager Assistant no existe como tal: es el nombre con el que se busca Tag Assistant, la extensión de Chrome que lista las etiquetas de Google de cualquier web y sirve de depurador en la vista previa.

¿Cómo configuro Consent Mode v2 con Complianz o CookieYes en Google Tag Manager?

El consent default va antes de las etiquetas, de un solo emisor; el banner envía después el update. En Complianz, Consent Mode v2 exige Premium; con la gratuita, el default lo pone el modo de consentimiento de Site Kit y Complianz manda el update. En CookieYes, el interruptor exige la cuenta conectada. Prueba: gcs=G100 antes de aceptar, G111 después.

¿Qué es la capa de datos (dataLayer) y cuándo la necesito?

Es una lista de JavaScript, window.dataLayer, el buzón donde la web deja datos y eventos que Google Tag Manager lee. Un dataLayer.push con event formulario_enviado dispara un evento personalizado. Para clics de teléfono no hace falta; para formularios de Elementor o el purchase de una tienda, sí. Va antes del snippet y distingue mayúsculas.

¿Qué es el etiquetado del lado del servidor (server side) y cuándo compensa?

Es un contenedor de Google Tag Manager en tu servidor que recibe los eventos y los reenvía a Google y a terceros. Tiene coste mensual de servidor (Google recomienda un mínimo de dos instancias de Cloud Run) más alguien que vigile el subdominio y su certificado; compensa cuando la inversión en Ads justifica ese coste, no en una web con pocas visitas al día.

Si prefieres que lo dejemos montado nosotros

Ya tienes Google Tag Manager instalado una sola vez, el consentimiento verificado, los contactos como eventos clave en GA4 y una versión publicada que no cuenta nada dos veces, más la copia y la ficha del contenedor.

Google Tag Manager es gratis; la tarde de seguir este tutorial y montarlo bien, no. Si todo esto se te hace largo, como agencia SEO en Huelva lo dejamos hecho a pymes de aquí y de toda España. Inventario, contenedor en tu cuenta, consentimiento comprobado por gcs, clics y formulario como eventos clave, ficha y JSON, y revisión en cada mantenimiento. Contacta con IP10.

Más guías y tutoriales de marketing digital en el blog de IP10.

Volver al blog

Sigue leyendo

Guía de Google Analytics 4 en 7 pasos de IP10: esquema de un informe con usuarios, eventos y eventos clave

Herramientas Digitales43 min

Google Analytics 4: guía en 7 pasos para que mida de verdad

Google Analytics 4 es la herramienta gratuita de Google que mide qué hace la gente en tu web: de dónde llega, qué páginas ve y si contacta, llama o compra. Funciona por eventos, se instala con una etiqueta y sustituyó a Universal Analytics en julio de 2023. La versión de pago, Analytics 360, es para grandes volúmenes.

vulnerabilidades de WordPress

Herramientas Digitales4 min

Vulnerabilidades de WordPress: 4 plugins en riesgo grave

Cada semana se descubren decenas de fallos de seguridad en el ecosistema de WordPress, y la última oleada confirma que ningún sitio está del todo a salvo. Las nuevas vulnerabilidades de WordPress detectadas afectan a más de noventa plugins y a cinco temas, e incluyen cuatro fallos clasificados como críticos que permiten a un atacante…

IA para CMOs aplicada a flujos de trabajo de dirección de marketing

Herramientas Digitales5 min

IA para CMOs: 10 flujos clave para liderar marketing

La IA para CMOs ya no es una opción experimental: es la palanca estratégica que separa a los líderes que orquestan equipos de quienes siguen atrapados en la operativa diaria. Un estudio reciente de Gartner concluye que solo el 15 % de los CEOs considera que sus responsables de marketing dominan la inteligencia artificial. Esa…