Configure a atribuição de receita para rastrear quais canais de marketing geram vendas reais. Guia de implementação passo a passo.
Pré-requisitos
Antes de começar:
- Script de rastreamento do Zenovay instalado
- Acesso ao código de checkout/compra
- Meta de receita habilitada
Configuração Básica
Rastreamento Simples de Receita
Rastreie a receita quando uma compra é concluída:
// On order confirmation page or in success callback
zenovay('revenue', 99.99, 'USD');
É isso para o rastreamento básico!
Com Nome de Meta
Associe a uma meta específica:
zenovay('goal', 'purchase', {
value: 99.99
});
Implementação Completa
Objeto de Receita Completo
Inclua todos os dados relevantes:
zenovay('revenue', 149.99, 'USD', {
// Recommended
order_id: 'ORD-12345',
// Optional - for detailed analysis
items: [
{
id: 'SKU-001',
name: 'Product Name',
price: 49.99,
quantity: 2,
category: 'Electronics'
},
{
id: 'SKU-002',
name: 'Accessory',
price: 50.00,
quantity: 1,
category: 'Accessories'
}
],
// Optional metadata
coupon: 'SAVE10',
shipping: 9.99,
tax: 12.50
});
Implementação por Plataforma
Shopify
Para lojas Shopify:
- Vá a Configurações → Checkout
- Adicione à "Página de status do pedido":
{% if first_time_accessed %}
<script>
zenovay('revenue', {{ total_price | money_without_currency }}, '{{ currency }}', {
order_id: '{{ order_number }}',
items: [
{% for item in line_items %}
{
id: '{{ item.sku }}',
name: '{{ item.title | escape }}',
price: {{ item.final_price | money_without_currency }},
quantity: {{ item.quantity }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
});
</script>
{% endif %}
WooCommerce
Para WordPress/WooCommerce:
- Adicione a
functions.phpdo seu tema ou a um plugin:
add_action('woocommerce_thankyou', 'zenovay_track_revenue');
function zenovay_track_revenue($order_id) {
$order = wc_get_order($order_id);
?>
<script>
zenovay('revenue', <?php echo $order->get_total(); ?>, '<?php echo $order->get_currency(); ?>', {
order_id: '<?php echo $order_id; ?>'
});
</script>
<?php
}
React/Next.js
No componente de sucesso do checkout:
import { useEffect } from 'react';
function OrderConfirmation({ order }) {
useEffect(() => {
if (order && window.zenovay) {
window.zenovay('revenue', order.total, order.currency, {
order_id: order.id,
items: order.items.map(item => ({
id: item.sku,
name: item.name,
price: item.price,
quantity: item.quantity
}))
});
}
}, [order]);
return <div>Thank you for your order!</div>;
}
Rastreamento do Lado do Servidor
Enterprise PlanoPara rastreamento seguro do lado do servidor, use o ponto de extremidade de rastreamento com seu código de rastreamento:
// Node.js example - use the tracking endpoint directly
app.post('/api/order/complete', async (req, res) => {
const order = await processOrder(req.body);
await fetch('https://api.zenovay.com/e/YOUR_TRACKING_CODE', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Forwarded-For': req.headers['x-forwarded-for'] || req.socket.remoteAddress,
},
body: JSON.stringify({
type: 'revenue',
url: req.headers.referer || 'https://yoursite.com/checkout',
revenue: order.total,
order_id: order.id,
currency: 'USD'
}),
});
res.json({ success: true });
});
Configuração de Atribuição
Modelo de Atribuição
O Zenovay não o obriga a se comprometer com um único modelo antecipadamente. Abra o painel do seu site, vá para a aba Receita, e mude o modelo diretamente no cartão Atribuição. Cinco modelos estão disponíveis:
- Last Touch (padrão)
- First Touch
- Linear
- Position-Based
- Time-Decay
Você pode alterar o modelo a qualquer momento para ver os mesmos dados sob uma lente diferente — não há uma configuração separada de "modelo padrão" ou "janela de atribuição" para configurar primeiro.
Escolhendo um modelo de atribuição
O cartão Atribuição da aba Revenue permite alternar entre cinco modelos por relatório. Escolha o que corresponde à sua pergunta:
| Modelo | Quando usar |
|---|---|
| Last-Touch (padrão) | Você quer saber o que fecha as vendas |
| First-Touch | Você quer saber o que impulsiona a descoberta |
| Linear | Você quer uma divisão equilibrada e neutra ao longo da jornada |
| Position-Based | Você quer recompensar a descoberta (40%) e o fechamento (40%) |
| Time-Decay | Você tem ciclos de venda mais curtos — interações recentes pesam mais |
O modelo escolhido é salvo na URL, então uma recarga o mantém. Se a maioria das conversões de um período veio de uma única sessão, os modelos multi-touch parecerão muito semelhantes ao Last-Touch — isso é esperado e se resolve à medida que mais jornadas multi-sessão se acumulam. Para uma análise mais detalhada de como as atribuições de first-touch e last-touch diferem, consulte Atribuição first-touch vs last-touch.
Por que todos os meus modelos de atribuição mostram quase os mesmos números?
Isso é esperado e não é um erro. Quando a maioria das conversões vem de visitantes que tiveram uma única sessão — ou permaneceram em um único canal — antes de converter, cada modelo atribui 100% do crédito a esse canal. Por isso Last-Touch, First-Touch, Linear, Position-Based e Time-Decay parecem quase idênticos.
Os modelos começam a divergir para visitantes que genuinamente transitaram por vários canais e sessões diferentes antes de converter; quanto mais jornadas multi-sessão se acumulam, maiores ficam as diferenças.
Trocar de modelo não alterará o canal de IA — o tráfego de IA é sempre creditado ao seu próprio canal em qualquer modelo.
Dica: para ver a maior diferença entre os modelos, compare First-Touch com Last-Touch — eles divergem sempre que o primeiro e o último canal de um visitante são diferentes.
Uma conversão sem valor monetário ainda conta para a atribuição de conversões; os valores de receita só aparecem quando uma receita está associada à meta.
IA como Canal de Atribuição
O Zenovay exibe IA como um canal de primeira classe no painel de atribuição, ao lado de Direto, Orgânico, Pago, Social e Referência. Quando um visitante que converte é identificado como tráfego de IA, essa conversão é creditada a IA em vez de ser agrupada em Direto ou em um canal UTM.
Expanda a linha IA para detalhá-la por produto de IA:
- Produtos identificados — ChatGPT, Claude, Perplexity, Gemini, Copilot, DeepSeek e outros, quando a visita trouxe um referenciador de IA ou parâmetro UTM reconhecível.
- Provável IA (não especificada) — visitantes que a heurística Dark IA identificou como originados de IA mesmo tendo chegado sem referenciador. Eles não podem ser atribuídos a um produto específico, por isso são agrupados honestamente sob este rótulo em vez de serem adivinhados.
Tenha em mente:
- Esta é uma visão de conversões. Um produto de IA que envia visitas mas nenhuma conversão atribuível no período selecionado não aparecerá aqui — use a visão Influência de IA para o tráfego de IA por produto.
- Ver apenas Provável IA (não especificada) é exato, não um dado ausente: significa que as conversões de IA do período foram detectadas por heurística sem um referenciador identificado.
- A atribuição de IA aparece no painel autenticado; ela não é exibida intencionalmente em painéis públicos ou compartilhados.
Atribuição Entre Dispositivos
Enterprise PlanoRastreie entre dispositivos:
- Identifique usuários quando fazem login
- Jornada unida automaticamente
- Caminho completo visível
// When user logs in
zenovay('identify', userId);
Configuração de Parâmetros UTM
Rastreamento de Campanha
Certifique-se de que os parâmetros UTM sejam usados:
https://yoursite.com/?utm_source=google
&utm_medium=cpc
&utm_campaign=spring_sale
&utm_content=banner_1
Parâmetros UTM
| Parâmetro | Propósito | Exemplo |
|---|---|---|
| utm_source | Fonte de tráfego | google, facebook |
| utm_medium | Meio de marketing | cpc, email |
| utm_campaign | Nome da campanha | spring_sale |
| utm_content | Variante do anúncio | banner_a |
| utm_term | Palavras-chave | blue shoes |
Configuração de Testes
Modo de Depuração
Ative o registro de depuração:
zenovay('debug');
Em seguida, rastreie uma compra de teste e verifique o console.
Compra de Teste
- Faça um pedido de teste
- Verifique o console do navegador
- Verifique na visão em tempo real
- Confirme no relatório de receita
Lista de Verificação de Verificação
- Valor de receita correto
- ID do pedido registrado
- Itens rastreados (se enviados)
- Fonte atribuída corretamente
- Moeda correta
Tratamento de Casos Extremos
Receita Recorrente
Para assinaturas:
// Track initial purchase
zenovay('revenue', 29.99, 'USD', {
order_id: 'SUB-001',
type: 'subscription',
interval: 'monthly'
});
// Track renewals
zenovay('revenue', 29.99, 'USD', {
order_id: 'SUB-001-RENEWAL',
type: 'subscription_renewal',
original_order: 'SUB-001'
});
Reembolsos
Trate os reembolsos adequadamente:
// Track refund
zenovay('revenue', -49.99, 'USD', {
order_id: 'REFUND-ORD-12345',
type: 'refund',
original_order: 'ORD-12345'
});
Remessas Parciais
Se a receita for reconhecida no envio:
// Track each shipment
zenovay('revenue', 50.00, 'USD', {
order_id: 'ORD-12345-SHIP-1',
parent_order: 'ORD-12345'
});
Qualidade de Dados
Prevenir Duplicatas
Certifique-se de que a receita não seja rastreada duas vezes:
// Using localStorage to prevent duplicates
function trackOrderOnce(order) {
const tracked = localStorage.getItem(`tracked_${order.id}`);
if (tracked) return;
zenovay('revenue', order.total, 'USD', {
order_id: order.id
});
localStorage.setItem(`tracked_${order.id}`, 'true');
}
Validar Antes de Enviar
Verifique a qualidade dos dados:
function trackRevenue(orderData) {
// Validate
if (!orderData.value || orderData.value <= 0) {
console.warn('Invalid order value');
return;
}
if (!orderData.order_id) {
console.warn('Missing order ID');
return;
}
// Track
zenovay('revenue', orderData.value, orderData.currency || 'USD', {
order_id: orderData.order_id
});
}
Solução de Problemas
Receita Não Aparece
Se a receita não for exibida:
-
Verifique se o rastreamento é acionado
- Modo de depuração ativado?
- Erros no console?
-
Verifique a configuração da meta
- Meta de receita criada?
- Meta ativa?
-
Verifique o tempo
- Depois que a página carrega completamente?
- No callback correto?
-
Valide os dados
- O valor é um número?
- Não é $0?
Atribuição Faltando
Se a fonte não for creditada:
- Verifique se os parâmetros UTM estão presentes
- Verifique se o referenciador não está bloqueado
- Tente um modelo de atribuição diferente no cartão Atribuição da aba Revenue
- Confirme que a visita que converte foi rastreada em primeiro lugar (verifique a visão em tempo real)
Os Valores Não Correspondem
Se os totais diferirem da contabilidade:
- Compare os intervalos de datas
- Verifique os reembolsos
- Verifique o tratamento da moeda
- Procure por pedidos ausentes
Considerações de Segurança
Limitações do Rastreamento do Lado do Cliente
Tenha em mente:
- Os valores podem ser manipulados
- Não é para fins de faturamento
- Apenas para análise
Lado do Servidor para Precisão
Para precisão crítica:
- Implemente rastreamento do lado do servidor
- Verifique contra o backend
- Use para relatórios
Conectar um Processador de Pagamento (Servidor para Servidor)
Se você já processa pagamentos por um processador compatível, pode conectar sua conta ao Zenovay em vez de alterar o código do seu checkout. O Zenovay recebe webhooks do processador, atribui cada pagamento capturado à sessão de origem e alimenta automaticamente o painel de receita — sem precisar de chamadas zenovay('revenue', …) no lado do cliente.
A aba Configurações de Receita permite conectar Stripe, PayPal e Paddle. Cada um tem um guia de configuração passo a passo:
| Processador | Guia de configuração | O que é rastreado |
|---|---|---|
| Stripe | Integração de receita do Stripe | Capturas, reembolsos, faturas de assinatura |
| PayPal | Integração de receita do PayPal | Capturas e reembolsos |
| Paddle | Integração de receita do Paddle | Capturas e reembolsos |
Escolha seu processador na aba Configurações de Receita, cole suas credenciais, e o Zenovay faz o resto.
Quando preferir a ingestão por webhook ao rastreador JS:
- Precisão no servidor — as cargas dos webhooks são assinadas pelo processador e não podem ser alteradas por navegadores ou bloqueadores de anúncios.
- Sem alterações no código do checkout — abra o painel do seu site, vá para a aba Receita das configurações, escolha seu processador, e cole suas credenciais.
- Reembolsos tratados automaticamente — quando um reembolso é emitido no painel do seu processador, o Zenovay o registra.
Quando continuar usando o rastreador JS:
- Você precisa de dados por item (
items[]) que o processador não inclui nos webhooks. - Seu processador não está na lista acima.
- Você quer que o pedido apareça na visão de visitantes em tempo real assim que o cliente chega à página de sucesso (os webhooks chegam alguns segundos depois).
Você pode usar as duas abordagens no mesmo site — o Zenovay deduplica pelo order_id, então o mesmo pedido não é contado em dobro.