DfGtagManager: documentação completa
Guia completo da extensão DfGtagManager: contentor GTM, GA4 Enhanced Ecommerce, Consent Mode v2, Enhanced Conversions em hash SHA-256, alinhamento com o Google Shopping e GTM server-side.
O DfGtagManager é uma extensão Shopware 6.7 que injeta um contentor Google Tag Manager, emite os eventos GA4 de comércio eletrónico completos, gere o Consent Mode v2 com o banner de cookies nativo do Shopware, envia as Enhanced Conversions em hash SHA-256, e alinha o data layer com o seu feed do Google Merchant Center. Esta documentação cobre a instalação, a configuração completa e a verificação.
Pré-requisitos
- Shopware 6.7.0 ou mais recente
- PHP 8.2 no mínimo
- Acesso SSH ou à administração do Shopware para instalar o ZIP
- Uma conta Google Tag Manager (recomendado) ou, no mínimo, uma conta Google Analytics 4
- Para as Enhanced Conversions: uma conta Google Ads com campanhas de conversão configuradas
Instalação
Três métodos possíveis consoante o seu ambiente.
A partir da administração do Shopware
- No back-office: Extensões → As minhas extensões → Carregar a extensão
- Selecione o ficheiro
DfGtagManager.zip - Clique em Instalar e depois em Ativar
- Limpe a cache: Definições → Sistema → Cache e índice → Limpar e regenerar
A partir da linha de comandos (recomendado em produção)
cd /caminho/para/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
Dica. Depois do assets:install, o ficheiro df-gtag-manager.js é publicado em public/bundles/dfgtagmanager/ e fica acessível através do asset helper do Twig. Não é necessário qualquer build de webpack ou TypeScript.
Configuração
Abra a configuração: Extensões → As minhas extensões → DataFirefly Google Tag Manager → menu ⋮ → Configurar. Selecione o sales channel em causa no topo do ecrã: cada sales channel pode ter a sua própria configuração independente.
Definições gerais
- Ativar a extensão: interruptor principal. Desative para cortar toda a injeção sem desinstalar.
- Modo de depuração: mostra registos com o prefixo
[DfGtag]na consola do navegador (add_to_cart, remove_from_cart, consent update e outros). A ativar apenas em ambiente de teste.
Google Tag Manager
- GTM Container ID: formato
GTM-XXXXXXX. Obtém-se em tagmanager.google.com, no canto superior direito do seu contentor. Deixe vazio se não usar o GTM: a extensão passa automaticamente para o loadergtag.jsse estiver preenchido um Measurement ID do GA4. - Server-side GTM URL (opcional): URL do seu loader Tag Manager server-side (por exemplo
https://gtm.oseudominio.com, sem barra final). Ver a secção GTM server-side mais abaixo.
Google Analytics 4
- GA4 Measurement ID: formato
G-XXXXXXXXXX. Obtém-se no GA4 em Admin → Fluxos de dados → Web. Usado como alternativagtag.jsse não houver contentor GTM configurado, e enviado para o dataLayer para as tags do GTM. - Enviar o evento page_view automático: ativo por predefinição. Desative se preferir acionar o
page_viewmanualmente a partir do GTM.
Consent Mode v2
- Ativar o Consent Mode v2: emite o
gtag consent defaultantes do carregamento do GTM, com as sete categorias do Consent Mode v2. Ver Consent Mode v2 em detalhe. - Estado de consentimento predefinido:
- Recusado: recomendado para a UE e o RGPD. Nenhum cookie analítico ou publicitário é colocado antes da aceitação do utilizador.
- Concedido: a reservar aos visitantes fora da UE, ou a lojas destinadas a um público profissional não abrangido pelo RGPD.
- Ativar url_passthrough: conserva os parâmetros
gclid,_gl,dclidentre páginas mesmo quando os cookies são recusados. Útil para a atribuição multi-touch. - Ativar ads_data_redaction se recusado: anonimiza os identificadores publicitários enviados ao Google Ads quando o utilizador recusa. Reduz ainda mais a superfície de tracking.
Enhanced Conversions
- Ativar as Enhanced Conversions: envia um objeto
user_datacom email, telefone, nome próprio, apelido, rua, localidade e código postal, todos em hash SHA-256 do lado do servidor, nas páginas confirm e finish do funil. Ver Enhanced Conversions em detalhe.
Google Shopping e Merchant Center
- Origem do item_id: determina o que a extensão envia como
item_idem cada item do GA4. Este valor tem de corresponder ao campoiddo seu feed do Merchant Center. Três opções:- Product number (SKU): recomendado, o formato mais comum nos feeds XML/CSV do Merchant Center.
- Shopware UUID: útil se gerar o seu feed diretamente a partir da base de dados do Shopware.
- EAN / GTIN: útil se o seu feed estiver alinhado com os códigos de barras internacionais.
- Categoria Google predefinida: valor enviado em
google_product_categoryquando nem o produto nem a sua categoria definem uma. Formato Google (por exemploApparel & Accessories > Clothing). - Marca predefinida: usada como alternativa em
item_brandquando o produto não tem fabricante atribuído.
Eventos
Cada evento GA4 pode ser ativado individualmente. Desmarque os que não quiser.
- view_item: página de produto
- view_item_list: página de categoria e resultados de pesquisa
- add_to_cart: clique no botão de adicionar ao carrinho (listener JavaScript)
- remove_from_cart: remoção de uma linha do carrinho ou do offcanvas
- view_cart: página do carrinho
- begin_checkout: página de confirmação do funil
- purchase: página finish depois da encomenda
- search: página de resultados de pesquisa
- login / sign_up: submissão dos formulários de conta
Consent Mode v2 em detalhe
O Consent Mode v2 é o mecanismo oficial da Google para gerir o consentimento do utilizador. Desde março de 2024, o Google Ads exige-o aos anunciantes que visam o Espaço Económico Europeu: sem ele, perde o acesso ao remarketing e à medição das conversões.
Ordem de carregamento
A extensão garante a seguinte ordem em cada página do storefront:
- Inicialização de
window.dataLayere do stubgtag() - Emissão do
gtag consent defaultcom as sete categorias do Consent Mode v2 ewait_for_update: 500 - Emissão de
url_passthrougheads_data_redactionse estiverem ativos - Envio dos eventos GA4 da página (view_item, view_cart e outros) para o dataLayer
- Carregamento do script GTM (ou
gtag.jscomo alternativa)
Porquê wait_for_update: 500? Esta instrução diz à Google para esperar até 500 ms após o carregamento da página antes de emitir os hits em modo recusado, o tempo necessário para o seu banner de cookies recolher a resposta do utilizador e para a extensão enviar um gtag consent update. Sem esse atraso, todos os hits iniciais são emitidos em modo recusado mesmo que o utilizador aceite de imediato.
Integração no banner de cookies do Shopware
A extensão decora a CookieProviderInterface e regista dois cookies virtuais nos grupos do banner nativo:
df-gtag-analyticsno grupo Estatísticas: controlaanalytics_storagedf-gtag-adsno grupo Marketing: controlaad_storage,ad_user_data,ad_personalization
Quando o utilizador valida as preferências, o Shopware emite o evento CookieConfiguration_Update. O controlador JavaScript da extensão escuta esse evento, lê o valor dos dois cookies virtuais, e emite de imediato o gtag consent update correspondente.
Compatibilidade com um banner de terceiros
Se usar o Cookiebot, o CookieFirst, o OneTrust ou o Axeptio em vez do banner nativo do Shopware, tem de emitir você mesmo o gtag consent update a partir do banner de terceiros com as categorias corretas. A extensão não o impede: gere apenas o consent default inicial e a escuta do evento do Shopware.
Enhanced Conversions em detalhe
As Enhanced Conversions melhoram a precisão da medição do Google Ads enviando dados de utilizador first-party (email, telefone, nome, morada) em hash SHA-256 no momento de uma conversão. A Google volta depois a ligar essas conversões aos utilizadores Google com sessão iniciada, o que restaura tipicamente 10 a 30 % de conversões antes perdidas por causa de bloqueadores de cookies, de tracking entre dispositivos ou de mudanças de navegador.
Normalização aplicada
A extensão normaliza cada campo em conformidade com a especificação da Google antes do hash:
- Email: em minúsculas, sem espaços, e depois SHA-256
- Telefone: E.164 (prefixo de país automático a partir do ISO da morada de facturação, exemplo
+351912345678), e depois SHA-256 - Nome próprio, apelido, rua, localidade: em minúsculas, sem espaços, e depois SHA-256
- Código postal: em minúsculas, sem espaços; nos EUA, truncado aos 5 primeiros dígitos antes do hash
- País: código ISO-2 em maiúsculas, sem hash
Payload do dataLayer
Nos eventos begin_checkout e purchase, a extensão envia:
{
"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": "PT"
}
}
}
Configuração no GTM
- No seu contentor GTM, crie ou edite a sua tag Google Ads Conversion Tracking
- Secção Include user-provided data from your website → Manual configuration
- Crie oito variáveis Data Layer Variable a apontar para:
user_data.sha256_email_address→ mapeada em Email (hashed)user_data.sha256_phone_number→ mapeada em 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
- Guarde e publique o contentor
Atenção. A Google exige que os valores já venham em hash do lado do site: não aplique a variável SHA-256 Hash do GTM a estas variáveis, elas saem já em hash da extensão. Um duplo hash tornaria a correspondência impossível.
Google Shopping e feed do Merchant Center
Para que o GA4 e o Google Ads consigam associar os eventos de comércio eletrónico aos seus produtos do Shopping, cada item do dataLayer tem de usar o mesmo item_id do feed do Merchant Center.
Campos enviados em cada item
item_id: origem configurável (SKU / UUID / EAN)item_name: nome do produto no idioma ativoitem_brand: nome do fabricante, ou marca predefinida se não estiver preenchidoitem_categoryaitem_category5: breadcrumb completo a partir da categoria mais profundagoogle_product_category: ver abaixoprice,quantity,currencympn: Manufacturer Part Number se estiver preenchido no produtogtin: EAN se estiver preenchidodiscount: calculado a partir da diferença entre o preço riscado e o preço de venda
google_product_category por produto
Pode substituir a categoria Google Shopping de um produto ou de uma categoria através de um campo personalizado:
- No back-office: Definições → Sistema → Campos personalizados → Criar um novo conjunto
- Nome técnico:
df_google_product_category, tipo Texto - Atribua esse conjunto às entidades Produto e/ou Categoria
- Em cada produto ou categoria, preencha o valor Google (por exemplo
Sporting Goods > Athletics > Football > Football Balls)
A extensão procura o valor por esta ordem: campo personalizado do produto → campo personalizado da sua categoria mais profunda → valor global predefinido da configuração.
GTM server-side
O tagging server-side permite encaminhar o tráfego do GTM por um domínio que controla, o que contorna os bloqueadores do navegador, protege os dados do utilizador, e melhora a resistência a mudanças nas políticas de cookies.
Pré-requisitos
- Um contentor GTM server-side configurado (ver a documentação da Google)
- Um domínio ou subdomínio dedicado a apontar para o seu servidor Tag Manager, por exemplo
gtm.oseudominio.com
Ativação
Na configuração da extensão, secção Google Tag Manager, preencha o Server-side GTM URL com o seu domínio sem barra final:
https://gtm.oseudominio.com
O script GTM e o iframe noscript passam a apontar automaticamente para o seu servidor em vez de www.googletagmanager.com.
Verificação
Google Tag Assistant
- Instale a extensão do Chrome Tag Assistant Companion
- Abra tagassistant.google.com, clique em Add domain e introduza o URL do seu storefront
- Navegue numa página de produto, adicione ao carrinho, vá ao checkout: cada passo tem de aparecer no assistente com os eventos GA4 correspondentes
GA4 DebugView
No GA4: Admin → DebugView. Os eventos aparecem aí em tempo real assim que o modo de depuração estiver ativo na extensão ou o parâmetro debug_mode=true for enviado.
Modo de depuração da extensão
Ative o Modo de depuração na configuração e abra a consola do navegador. Verá:
[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 validação
- Na página inicial: consent default emitido antes do script GTM (ordem das etiquetas no head)
- Numa página de produto:
view_itemcomitem_id,item_brand,item_category,google_product_category - Ao adicionar ao carrinho:
add_to_cartcom o mesmo item - No carrinho:
view_cartcom todos os itens - Na página confirm:
begin_checkoutcomuser_dataem hash - Na página finish:
purchasecomtransaction_id,value,tax,shipping,currency,itemseuser_dataem hash - Na aceitação dos cookies:
consent updatecom as categorias granted
Resolução de problemas
Os eventos não aparecem no GA4 DebugView
- Verifique que o Measurement ID do GA4 está correto na configuração
- Verifique que a tag GA4 Configuration está mesmo criada e publicada no seu contentor GTM
- Verifique que o acionador da tag cobre mesmo todas as páginas (All Pages)
- Limpe a cache do Shopware e recarregue a página com hard reload (Ctrl+F5)
As Enhanced Conversions não correspondem
- Verifique que não é aplicada qualquer transformação adicional (variável SHA-256 Hash do GTM) às variáveis
user_data: os valores já saem em hash - Verifique o formato E.164 do telefone no dataLayer (com prefixo de país a começar por
+) - Verifique que o campo
countryestá mesmo em ISO-2 maiúsculo (PT, e nãoPortugal) - Espere 24 a 48 horas depois da ativação: o Google Ads precisa desse prazo para a primeira sincronização
O consent update não é emitido quando o utilizador aceita
- Confirme que o banner usado é mesmo o nativo do Shopware
- Abra a consola do navegador em modo de depuração e verifique que o evento
CookieConfiguration_Updateé mesmo emitido quando o utilizador valida o banner - Verifique que os cookies
df-gtag-analyticsedf-gtag-adsaparecem no banner e estão mesmo marcados
O item_id não corresponde ao meu feed do Merchant Center
- Abra o seu feed XML/CSV e veja o campo
<g:id>de um produto - Na configuração da extensão, escolha a origem do
item_idque produz exatamente o mesmo valor (SKU, UUID ou EAN) - Se o seu feed usar um prefixo (por exemplo
shopware_SW10001), terá de criar uma tag GTM que acrescente esse prefixo ao valor antes do envio ao Google Ads
A extensão não carrega em certas páginas
- Verifique que o sales channel em causa tem mesmo Ativar a extensão em ON na sua configuração específica
- Algumas páginas personalizadas (landing pages CMS próprias) podem não acionar os Page Loaded Events normais. Nesse caso, o contentor GTM é carregado na mesma através do pagelet do cabeçalho.