DfGtagManager — Documentación completa
Guía completa del plugin DfGtagManager: contenedor GTM, GA4 Enhanced Ecommerce, Consent Mode v2, Enhanced Conversions hasheadas SHA-256, alineación Google Shopping y server-side GTM.
DfGtagManager es un plugin de Shopware 6.7 que inyecta un contenedor Google Tag Manager, emite los eventos GA4 e-commerce completos, gestiona Consent Mode v2 con el banner de cookies Shopware nativo, envía las Enhanced Conversions hasheadas SHA-256 y alinea el data layer con tu feed Google Merchant Center. Esta documentación cubre la instalación, la configuración completa y la verificación.
Requisitos previos
- Shopware 6.7.0 o más reciente
- PHP 8.2 mínimo
- Acceso SSH o administración Shopware para instalar el ZIP
- Una cuenta de Google Tag Manager (recomendado) o al menos una cuenta Google Analytics 4
- Para las Enhanced Conversions: una cuenta Google Ads con campañas de conversión configuradas
Instalación
Tres métodos posibles según tu entorno.
Desde la administración Shopware
- En el back-office: Extensiones → Mis extensiones → Cargar extensión
- Selecciona el archivo
DfGtagManager.zip - Haz clic en Instalar y luego en Activar
- Vacía la caché: Configuración → Sistema → Caché e índices → Vaciar y regenerar
Desde la línea de comandos (recomendado en producción)
cd /ruta/a/shopware
unzip DfGtagManager.zip -d custom/plugins/
bin/console plugin:refresh
bin/console plugin:install --activate DfGtagManager
bin/console assets:install
bin/console cache:clear
Consejo. Después de assets:install, el archivo df-gtag-manager.js se publica en public/bundles/dfgtagmanager/ y queda accesible vía el asset helper de Twig. No se necesita ningún paso de build webpack o TypeScript.
Configuración
Abre la configuración: Extensiones → Mis extensiones → DataFirefly Google Tag Manager → menú ⋮ → Configurar. Selecciona el sales-channel correspondiente en la parte superior — cada sales-channel puede tener su propia configuración independiente.
Ajustes generales
- Activar plugin: interruptor maestro. Desactívalo para cortar toda inyección sin desinstalar.
- Modo debug: muestra logs prefijados
[DfGtag]en la consola del navegador (add_to_cart, remove_from_cart, consent update…). Actívalo únicamente en entornos de test.
Google Tag Manager
- GTM Container ID: formato
GTM-XXXXXXX. Se recupera en tagmanager.google.com arriba a la derecha de tu contenedor. Déjalo vacío si no usas GTM: el plugin caerá automáticamente al loadergtag.jssi hay un Measurement ID GA4 configurado. - Server-side GTM URL (opcional): URL de tu loader Tag Manager server-side (por ejemplo
https://gtm.tudominio.com, sin barra final). Ver la sección Server-side GTM más abajo.
Google Analytics 4
- GA4 Measurement ID: formato
G-XXXXXXXXXX. Se recupera en GA4 en Administrar → Flujos de datos → Web. Se usa como fallbackgtag.jscuando no hay contenedor GTM configurado, y se envía al dataLayer para los tags GTM. - Enviar evento page_view automático: activado por defecto. Desactívalo si prefieres disparar
page_viewmanualmente desde GTM.
Consent Mode v2
- Activar Consent Mode v2: emite
gtag consent defaultantes de que se cargue GTM, con las siete categorías Consent Mode v2. Ver Consent Mode v2 en detalle. - Estado de consentimiento por defecto:
- Rechazado — recomendado para UE/RGPD. No se deposita ninguna cookie analítica o publicitaria antes de la aceptación del usuario.
- Concedido — a reservar para visitantes fuera de la UE o tiendas para público profesional no sujeto al RGPD.
- Activar url_passthrough: conserva los parámetros
gclid,_gl,dclidentre páginas incluso cuando las cookies están rechazadas. Útil para atribución multi-touch. - Activar ads_data_redaction si rechazado: redacta los identificadores publicitarios enviados a Google Ads cuando el usuario rechaza. Reduce aún más la superficie de tracking.
Enhanced Conversions
- Activar Enhanced Conversions: envía un objeto
user_datacon email, teléfono, nombre, apellido, calle, ciudad, código postal, todo hasheado SHA-256 en el servidor, en las páginas confirm y finish del embudo. Ver Enhanced Conversions en detalle.
Google Shopping / Merchant Center
- Fuente item_id: determina lo que el plugin envía como
item_iden cada item GA4. Este valor debe coincidir con el campoidde tu feed Merchant Center. Tres opciones:- Product number (SKU) — recomendado, el formato más común en los feeds XML/CSV de Merchant Center.
- Shopware UUID — útil si generas tu feed directamente desde la base de datos Shopware.
- EAN / GTIN — útil si tu feed está alineado con códigos de barras internacionales.
- Categoría Google por defecto: valor enviado a
google_product_categorycuando ni el producto ni su categoría definen uno. Formato Google (por ejemploApparel & Accessories > Clothing). - Marca por defecto: usada como fallback en
item_brandcuando el producto no tiene fabricante asignado.
Eventos
Cada evento GA4 se puede activar individualmente. Desmarca los que no quieras.
- view_item — ficha de producto
- view_item_list — página de categoría y resultados de búsqueda
- add_to_cart — clic en el botón de añadir al carrito (listener JavaScript)
- remove_from_cart — eliminación de una línea del carrito u offcanvas
- view_cart — página del carrito
- begin_checkout — página de confirmación del embudo
- purchase — página finish tras el pedido
- search — página de resultados de búsqueda
- login / sign_up — envío de formularios de cuenta
Consent Mode v2 en detalle
Consent Mode v2 es el mecanismo oficial de Google para gestionar el consentimiento del usuario. Desde marzo de 2024, Google Ads lo exige a los anunciantes que se dirigen al Espacio Económico Europeo — sin él, pierdes el acceso al remarketing y a la medición de conversiones.
Orden de carga
El plugin garantiza el siguiente orden en cada página del storefront:
- Inicialización de
window.dataLayery del stubgtag() - Emisión de
gtag consent defaultcon las siete categorías Consent Mode v2 ywait_for_update: 500 - Emisión de
url_passthroughyads_data_redactionsi están activos - Envío de los eventos GA4 de la página (view_item, view_cart…) al dataLayer
- Carga del script GTM (o
gtag.jscomo fallback)
¿Por qué wait_for_update: 500? Esta instrucción le dice a Google que espere hasta 500 ms tras la carga de la página antes de emitir los hits en modo denegado — el tiempo suficiente para que tu banner de cookies recoja la respuesta del usuario y para que el plugin envíe un gtag consent update. Sin ese retraso, todos los hits iniciales se emiten en modo denegado incluso si el usuario acepta inmediatamente.
Integración con el banner de cookies Shopware
El plugin decora CookieProviderInterface y registra dos cookies virtuales en los grupos del banner nativo:
df-gtag-analyticsen el grupo Estadísticas — controlaanalytics_storagedf-gtag-adsen el grupo Marketing — controlaad_storage,ad_user_data,ad_personalization
Cuando el usuario valida sus preferencias, Shopware emite el evento CookieConfiguration_Update. El controlador JavaScript del plugin lo escucha, lee el valor de las dos cookies virtuales y emite inmediatamente el gtag consent update correspondiente.
Compatibilidad con un banner de terceros
Si usas Cookiebot, CookieFirst, OneTrust o Axeptio en lugar del banner nativo Shopware, tienes que emitir tú mismo el gtag consent update desde el banner de terceros con las categorías correctas. El plugin no te lo impide — sólo gestiona el consent default inicial y la escucha del evento Shopware.
Enhanced Conversions en detalle
Las Enhanced Conversions mejoran la precisión de la medición de Google Ads enviando datos de usuario first-party (email, teléfono, nombre, dirección) hasheados SHA-256 en el momento de una conversión. Google entonces reconecta esas conversiones con los usuarios de Google conectados, lo que normalmente recupera del 10 al 30 % de conversiones antes perdidas por bloqueadores de cookies, tracking cross-device o cambios de navegador.
Normalización aplicada
El plugin normaliza cada campo conforme a la especificación Google antes del hashing:
- Email: lowercased, trimmed y luego SHA-256
- Teléfono: E.164 (prefijo de país automático desde el ISO de la dirección de facturación, ejemplo
+34612345678), luego SHA-256 - Nombre, apellido, calle, ciudad: lowercased, trimmed y luego SHA-256
- Código postal: lowercased, trimmed; para EE.UU. se trunca a los 5 primeros dígitos antes del hashing
- País: código ISO-2 en mayúsculas, no hasheado
Payload dataLayer
En los eventos begin_checkout y purchase, el plugin envía:
{
"event": "purchase",
"ecommerce": { ... },
"user_data": {
"sha256_email_address": "...",
"sha256_phone_number": "...",
"address": {
"sha256_first_name": "...",
"sha256_last_name": "...",
"sha256_street": "...",
"sha256_city": "...",
"postal_code": "...",
"country": "ES"
}
}
}
Configuración en GTM
- En tu contenedor GTM, crea o edita tu tag Google Ads Conversion Tracking
- Sección Include user-provided data from your website → Manual configuration
- Crea ocho Data Layer Variables apuntando a:
user_data.sha256_email_address→ mapeado a Email (hashed)user_data.sha256_phone_number→ mapeado a Phone (hashed)user_data.address.sha256_first_name→ First name (hashed)user_data.address.sha256_last_name→ Last name (hashed)user_data.address.sha256_street→ Street (hashed)user_data.address.sha256_city→ City (hashed)user_data.address.postal_code→ Postal codeuser_data.address.country→ Country
- Guarda y publica el contenedor
Atención. Google exige que los valores ya lleguen hasheados desde el sitio — no apliques la variable SHA-256 Hash de GTM a esas variables, salen del plugin ya hasheadas. Un doble hash haría imposible el matching.
Google Shopping y feed Merchant Center
Para que GA4 y Google Ads puedan casar correctamente los eventos e-commerce con tus productos Shopping, cada item del dataLayer debe usar el mismo item_id que el de tu feed Merchant Center.
Campos enviados en cada item
item_id— fuente configurable (SKU / UUID / EAN)item_name— nombre del producto en el idioma activoitem_brand— nombre del fabricante, o marca por defecto si no está definidoitem_categoryaitem_category5— breadcrumb completo empezando por la categoría más profundagoogle_product_category— ver abajoprice,quantity,currencympn— Manufacturer Part Number cuando esté informadogtin— EAN cuando esté informadodiscount— calculado desde la diferencia entre precio tachado y precio de venta
google_product_category por producto
Puedes sobrescribir la categoría Google Shopping para un producto o una categoría vía un custom field:
- En el back-office: Configuración → Sistema → Custom fields → Crear nuevo set
- Nombre técnico:
df_google_product_category, tipo Texto - Asigna ese set a las entidades Producto y/o Categoría
- En cada producto o categoría, informa el valor Google (por ejemplo
Sporting Goods > Athletics > Football > Football Balls)
El plugin busca el valor en este orden: custom field del producto → custom field de su categoría más profunda → valor global por defecto de la configuración.
Server-side GTM
El server-side tagging permite enrutar el tráfico GTM por un dominio que tú controlas, lo que esquiva los bloqueadores del navegador, protege los datos de usuario y mejora la resiliencia frente a cambios en la política de cookies.
Requisitos previos
- Un contenedor server-side GTM configurado (ver documentación Google)
- Un dominio o subdominio dedicado apuntando a tu servidor Tag Manager, por ejemplo
gtm.tudominio.com
Activación
En la configuración del plugin, sección Google Tag Manager, indica Server-side GTM URL con tu dominio sin barra final:
https://gtm.tudominio.com
El script GTM y el iframe noscript apuntarán automáticamente a tu servidor en lugar de www.googletagmanager.com.
Verificación
Google Tag Assistant
- Instala la extensión Chrome Tag Assistant Companion
- Abre tagassistant.google.com, haz clic en Add domain e introduce la URL de tu storefront
- Navega a una ficha de producto, añade al carrito, ve al checkout — cada paso debe aparecer en el asistente con los eventos GA4 correspondientes
GA4 DebugView
En GA4: Administrar → DebugView. Los eventos aparecen en tiempo real en cuanto Debug mode está activo en el plugin o se envía el parámetro debug_mode=true.
Modo debug del plugin
Activa Debug mode en la configuración y abre la consola del navegador. Verás:
[DfGtag] consent update { analytics_storage: "granted", ad_storage: "denied", ... }
[DfGtag] add_to_cart { item_id: "SW10001", item_name: "...", price: 129, quantity: 1 }
[DfGtag] remove_from_cart { ... }
Checklist de validación
- En la home: consent default emitido antes del script GTM (orden de las balizas en el head)
- En una ficha de producto:
view_itemconitem_id,item_brand,item_category,google_product_category - Al añadir al carrito:
add_to_cartcon el mismo item - En el carrito:
view_cartcon todos los items - En la página confirm:
begin_checkoutconuser_datahasheado - En la página finish:
purchasecontransaction_id,value,tax,shipping,currency,itemsyuser_datahasheado - Al aceptar cookies:
consent updatecon las categorías granted
Solución de problemas
Los eventos no aparecen en GA4 DebugView
- Comprueba que el Measurement ID GA4 es correcto en la configuración
- Comprueba que el tag GA4 Configuration está creado y publicado en tu contenedor GTM
- Comprueba que el activador del tag cubre todas las páginas (All Pages)
- Vacía la caché de Shopware y recarga la página en hard reload (Ctrl+F5)
Las Enhanced Conversions no casan
- Comprueba que no se aplica ninguna transformación adicional (variable SHA-256 Hash de GTM) a las variables
user_data— los valores salen ya hasheados - Comprueba el formato E.164 del teléfono en el dataLayer (con prefijo de país empezando por
+) - Comprueba que el campo
countryestá en ISO-2 mayúsculas (ES, noEspaña) - Espera 24 a 48 horas tras la activación: Google Ads necesita ese plazo para la primera sincronización
Consent update no emitido cuando el usuario acepta
- Confirma que el banner en uso es el nativo de Shopware
- Abre la consola del navegador en modo debug y comprueba que el evento
CookieConfiguration_Updatese emite cuando el usuario valida el banner - Comprueba que las cookies
df-gtag-analyticsydf-gtag-adsaparecen en el banner y están marcadas
item_id no coincide con mi feed Merchant Center
- Abre tu feed XML/CSV y mira el campo
<g:id>de un producto - En la configuración del plugin, elige la fuente
item_idque produce exactamente el mismo valor (SKU, UUID o EAN) - Si tu feed usa un prefijo (por ejemplo
shopware_SW10001), tendrás que crear un tag GTM que anteponga el prefijo al valor antes de enviarlo a Google Ads
El plugin no se carga en algunas páginas
- Comprueba que el sales-channel en curso tiene Activar plugin en ON en su configuración específica
- Algunas páginas personalizadas (landing pages CMS custom) pueden no disparar los Page Loaded Events estándar. En ese caso, el contenedor GTM se carga igualmente vía el header pagelet.