Blog
Tagging do lado do servidor para uma loja Shopify ou WooCommerce: o que dispara, o que não dispara e o que instalar
Publicado · 5 min de leitura
Um contentor de servidor não faz uma loja reportar compras. Reencaminha o que o navegador envia, a partir do seu próprio nome de anfitrião em vez do do Google, e isso vale a pena: os bloqueadores de anúncios e o Safari, juntos, eliminam uma parte significativa das conversões de uma loja. Mas a compra tem de ser enviada primeiro, e nas duas plataformas em que corre a maioria das lojas, nada a envia de origem. Este é o artigo que gostaríamos de ter podido entregar a cada cliente no primeiro dia.
Os sete eventos, e a única coisa que têm em comum
O GA4 define sete eventos para um funil de compra: view_item_list, view_item, add_to_cart, remove_from_cart, begin_checkout, add_payment_info e purchase. Os nomes são do GA4, não de nenhuma plataforma — os mesmos sete funcionam para Shopify, WooCommerce e uma loja construída por si.
O que partilham é um mecanismo. Cada um é um envio para o dataLayer da página, exatamente com esse nome, com um objeto ecommerce na forma do GA4. Um acionador do Tag Manager escuta o nome; uma etiqueta de evento do GA4 lê o objeto ecommerce e envia-o. Escreva mal o nome, aninhe o objeto um nível a mais, ou envie-o na página errada, e a etiqueta fica ali para sempre sem um erro. É assim que se parece um envio de compra:
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'purchase',
ecommerce: {
transaction_id: 'ORD-10442',
value: 89.90,
currency: 'EUR',
items: [
{ item_id: 'SKU-118', item_name: 'Trail jacket', price: 89.90, quantity: 1 }
]
}
});O envio prévio de ecommerce: null não é decorativo. Sem ele, os artigos do evento anterior podem passar para o seguinte, e um view_item de há três páginas aparece dentro de um purchase.
Shopify: o tema não vê o checkout
Um contentor instalado num tema do Shopify carrega na montra — páginas de produto, coleções, o carrinho. Não carrega no checkout nem na página de agradecimento, que o Shopify serve a partir do seu próprio domínio e dos seus próprios modelos. Por isso um contentor instalado no tema pode enviar view_item e add_to_cart e nunca, em nenhuma configuração, enviará begin_checkout, add_payment_info ou purchase.
Esses três vêm de um Custom Pixel. A sandbox de píxeis do Shopify expõe os eventos do checkout (checkout_started, payment_info_submitted, checkout_completed) e permite a um píxel enviar para um dataLayer próprio — um pequeno script mapeia cada um para o nome e a forma do evento do GA4 acima. Os eventos da montra continuam a vir do tema, por isso uma configuração completa tem os dois: uma aplicação de dataLayer ou um excerto no tema para a metade de navegação, e um Custom Pixel para a metade do checkout.
Mais uma decisão. O canal Google e YouTube do Shopify pode enviar eventos do GA4 diretamente, fora de qualquer contentor. Se ligar lá uma propriedade do GA4 E encaminhar a mesma propriedade pelo seu contentor, cada compra é contada duas vezes. Escolha um caminho. Se o objetivo é a recolha de primeira parte, o contentor é o caminho, e a ligação ao Analytics do canal fica desligada.
WooCommerce: o núcleo não envia nada
O WooCommerce, por si só, não escreve nenhum dataLayer. Um plugin fá-lo — o GTM4WP é aquele a que a maioria recorre — e a sua opção de comércio eletrónico do GA4 produz os sete eventos na forma certa nas páginas certas: view_item num produto, add_to_cart no botão, begin_checkout na página de pagamento, purchase na página de encomenda recebida.
A falha clássica do WooCommerce é uma compra duplicada, e tem uma causa concreta: a página de encomenda recebida é recarregada. Um visitante atualiza-a, regressa a ela vindo de um fornecedor de pagamento, ou o tema redireciona por ela duas vezes, e o purchase é enviado de novo com o mesmo transaction_id. O GA4 desduplica compras por transaction_id dentro de uma sessão, o que apanha a maioria dos casos, mas não um recarregamento no dia seguinte. A definição do plugin «disparar apenas uma vez por encomenda» vale a pena ser ativada; mantém a marca do lado do servidor, onde um recarregamento não a consegue repor.
O que a SignalHost constrói por si
Diga ao assistente que o site é uma loja e ele acrescenta ao seu contentor web um acionador de evento personalizado e uma etiqueta de evento do GA4 para cada um dos sete eventos — catorze entidades, todas com o prefixo SH para nunca colidirem com nada que já tenha. Cada etiqueta envia o objeto ecommerce diretamente do dataLayer, por isso items, value, currency e transaction_id passam sem uma variável por campo, e cada uma indica o seu ID de medição explicitamente em vez de o herdar.
Nada é instalado na sua loja. Os acionadores escutam; os envios são do plugin ou do píxel. Escolher «sem loja online» deixa de fora as catorze entidades e não muda mais nada — visualizações de página, scroll e o resto dos eventos padrão passam pelo contentor de qualquer forma.
Do lado do servidor não há nada por evento. A etiqueta do GA4 do contentor de servidor reencaminha cada evento que recebe, chame-se como se chamar, por isso um evento novo no seu site não precisa de nenhuma alteração no nosso. Os destinos Meta Conversions API e TikTok Events API, se os ligar, mapeiam eles próprios os mesmos sete nomes; um purchase torna-se um Purchase para a Meta e um CompletePayment para o TikTok, a partir do mesmo envio.
Verificar com uma encomenda de teste
Faça uma encomenda real em modo de teste, ou uma barata que depois reembolse, e observe a lista de eventos da página do contentor. Em sequência deve ver view_item, add_to_cart, begin_checkout, add_payment_info e purchase — cada um uma vez. Um purchase em falta no Shopify significa que o Custom Pixel não está instalado ou não envia; um begin_checkout em falta no WooCommerce significa normalmente que o evento de checkout do plugin está desativado.
Se encaminhar conversões do Google Ads pelo contentor, purchase é o evento de conversão, e o seu valor, moeda e ID de transação são lidos desse mesmo objeto ecommerce. Um envio de compra sem value regista uma conversão que não vale nada — o que é um número real num relatório, e o errado.
