Plataformas
Exemplos prontos para gerenciador de tags, WooCommerce, Shopify, VTEX, Nuvemshop e aplicações single-page.
Google Tag Manager#
Tag global#
Tag de HTML customizado, acionador All Pages:
<script src="https://bridge.moclick.com.br/moclick-SEU-SLUG.js" defer></script>
Tag de conversão#
Tag de HTML customizado, acionador do evento de compra:
<script> window.MoclickConversion = { value: {{DLV - ecommerce.value}}, transaction_id: "{{DLV - ecommerce.transaction_id}}" }; </script>
Crie as variáveis de camada de dados antes de referenciá-las. Em GA4 o caminho é
ecommerce.value e ecommerce.transaction_id. Confirme no
Preview do GTM que as variáveis resolvem — a causa número um de
conversão faltando aqui é variável vazia.
WooCommerce#
Via functions.php do tema filho, ou plugin de snippets:
// Tag global em todas as páginas add_action('wp_head', function () { echo '<script src="https://bridge.moclick.com.br/moclick-SEU-SLUG.js" defer></script>'; }); // Conversão na página de agradecimento add_action('woocommerce_thankyou', function ($order_id) { $order = wc_get_order($order_id); if (!$order) { return; } $value = number_format((float) $order->get_total(), 2, '.', ''); $txid = $order->get_order_number(); printf( '<script>window.MoclickConversion={value:%s,transaction_id:%s};</script>', wp_json_encode((float) $value), wp_json_encode((string) $txid) ); });
Use wp_json_encode para os dois valores. Interpolar direto na string
quebra o JavaScript quando o número do pedido contém apóstrofo, barra ou prefixo
configurado no Woo.
Shopify#
Tag global#
Em Online Store → Themes → Edit code → theme.liquid, dentro do <head>:
<script src="https://bridge.moclick.com.br/moclick-SEU-SLUG.js" defer></script>
Conversão#
Em Settings → Checkout → Order status page, ou como Custom Pixel:
<script src="https://bridge.moclick.com.br/moclick-SEU-SLUG.js" defer></script> <script> window.MoclickConversion = { value: {{ checkout.total_price | divided_by: 100.0 }}, transaction_id: "{{ checkout.order_number }}" }; </script>
checkout.total_price vem em centavos: um pedido de R$ 150,00 chega
como 15000. Sem o divided_by: 100.0 a receita fica cem
vezes maior. Repita a tag global na Order status page — ela é servida fora do tema
e não herda o theme.liquid.
VTEX#
Tag global em Storefront → Configurações → Scripts. A conversão vai no template da página de pedido finalizado:
<script> window.addEventListener("message", function (e) { if (!e.data || e.data.eventName !== "vtex:orderPlaced") return; var o = e.data; window.MoclickConversion = { value: o.transactionTotal, transaction_id: String(o.transactionId) }; }); </script>
Nuvemshop / Tiendanube#
Tag global em Minha loja → Configurações → Códigos externos, marcada para todas as páginas. Conversão no código de confirmação de compra:
<script> window.MoclickConversion = { value: {{ order.total | raw }}, transaction_id: "{{ order.number }}" }; </script>
Aplicações single-page#
Em SPA a página não recarrega, então a tag global carrega uma vez e a observação da conversão fica ativa por 120 segundos. Se o intervalo entre o carregamento e a confirmação puder passar disso, recarregue a tag na rota de confirmação:
function trackMoclickConversion(order) { window.MoclickConversion = { value: order.total, transaction_id: String(order.id) }; // Recarrega a tag para reiniciar a janela de observação. // O cache de 5 min evita nova transferência; a dedup evita duplicata. var s = document.createElement("script"); s.src = "https://bridge.moclick.com.br/moclick-SEU-SLUG.js"; s.defer = true; document.head.appendChild(s); }
Recarregar a tag é seguro: a deduplicação por transaction_id impede
conversão dupla, e a guarda contra registro repetido impede acesso duplicado.
Outra plataforma#
Qualquer plataforma que permita inserir JavaScript em todas as páginas e expor pedido e valor na confirmação é compatível. O requisito é só este:
- A tag global carregada em todas as páginas, incluindo a de confirmação
window.MoclickConversiondefinido na confirmação, com valor em ponto decimal e identificador estável do pedido
Se o valor ou o identificador só existirem no backend, use o Postback S2S.