Ir al contenido principal
Zenovay
Pro Plan15 minutesIntermedio

Configuración de la atribución de ingresos

Configura el seguimiento y la atribución de ingresos — conecta compras con fuentes de tráfico con una implementación paso a paso. Explora la configuración de ingresos y las mejores prácticas.

revenueattributionsetuptracking
Última actualización:
Pro Plan

Configura la atribución de ingresos para rastrear qué canales de marketing generan ventas reales. Guía de implementación paso a paso.

Requisitos previos

Antes de comenzar:

  • Script de seguimiento de Zenovay instalado
  • Acceso al código de pago/compra
  • Objetivo de ingresos habilitado

Configuración básica

Seguimiento simple de ingresos

Rastrea los ingresos cuando se completa una compra:

// On order confirmation page or in success callback
zenovay('revenue', 99.99, 'USD');

¡Eso es todo para el seguimiento básico!

Con nombre de objetivo

Asocia con un objetivo específico:

zenovay('goal', 'purchase', {
  value: 99.99
});

Implementación completa

Objeto de ingresos completo

Incluye todos los datos 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
});

Implementación por plataforma

Shopify

Para tiendas Shopify:

  1. Ve a Configuración → Pago
  2. Añade a la "Página de estado del 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:

  1. Añade a la functions.php de tu tema o a un 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

En tu componente de éxito del pago:

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>;
}

Seguimiento del lado del servidor

Enterprise Plan

Para un seguimiento seguro del lado del servidor, usa el endpoint de seguimiento con tu código de seguimiento:

// 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 });
});

Configuración de atribución

Modelo de atribución

Zenovay no te obliga a comprometerte con un único modelo de antemano. Abre el panel de tu sitio web, ve a la pestaña Ingresos, y cambia el modelo directamente en la tarjeta Atribución. Hay cinco modelos disponibles:

  • Last Touch (predeterminado)
  • First Touch
  • Linear
  • Position-Based
  • Time-Decay

Puedes cambiar el modelo en cualquier momento para ver los mismos datos desde una perspectiva diferente — no hay una configuración separada de "modelo predeterminado" o "ventana de atribución" que debas configurar primero.

Elegir un modelo de atribución

La tarjeta Atribución de la pestaña Revenue te permite cambiar entre cinco modelos por informe. Elige el que coincida con tu pregunta:

ModeloCuándo usarlo
Last-Touch (predeterminado)Quieres saber qué cierra las ventas
First-TouchQuieres saber qué impulsa el descubrimiento
LinearQuieres una distribución equilibrada y neutral en el viaje
Position-BasedQuieres recompensar el descubrimiento (40%) y el cierre (40%)
Time-DecayTienes ciclos de venta más cortos — las interacciones recientes pesan más

El modelo elegido se guarda en la URL, así que una recarga lo conserva. Si la mayoría de las conversiones de un período provienen de una única sesión, los modelos multi-touch se verán muy similares a Last-Touch — eso es esperado y se resuelve a medida que se acumulan más recorridos multi-sesión. Para un análisis más detallado de cómo las atribuciones de first-touch y last-touch difieren, consulta Atribución first-touch vs last-touch.

¿Por qué todos mis modelos de atribución muestran casi los mismos números?

Esto es lo esperado y no es un error. Cuando la mayoría de las conversiones provienen de visitantes que tuvieron una única sesión — o permanecieron en un único canal — antes de convertir, cada modelo le otorga a ese canal el 100% del crédito. Por eso Last-Touch, First-Touch, Linear, Position-Based y Time-Decay se ven prácticamente idénticos.

Los modelos empiezan a diferenciarse para los visitantes que genuinamente transitaron por varios canales y sesiones distintos antes de convertir; cuanto más recorridos multi-sesión se acumulen, mayores serán las diferencias.

Cambiar de modelo no modificará el canal de IA — el tráfico de IA siempre se acredita a su propio canal bajo cualquier modelo.

Consejo: para ver las mayores diferencias entre modelos, compara First-Touch con Last-Touch — divergen siempre que el primer y el último canal de un visitante sean distintos.

Una conversión sin valor monetario sigue contando para la atribución de conversiones; las cifras de ingresos solo aparecen cuando hay un ingreso asociado al objetivo.

IA como canal de atribución

Zenovay muestra IA como un canal de primer nivel en el panel de atribución, junto a Directo, Orgánico, Pago, Social y Referido. Cuando un visitante que convierte se identifica como tráfico de IA, esa conversión se atribuye a IA en lugar de mezclarse con Directo o con un canal UTM.

Despliega la fila IA para desglosarla por producto de IA:

  • Productos identificados — ChatGPT, Claude, Perplexity, Gemini, Copilot, DeepSeek y otros, cuando la visita incluía un referente de IA o un parámetro UTM reconocible.
  • Probable IA (sin especificar) — visitantes que la heurística Dark IA identificó como impulsados por IA aunque llegaron sin referente. No se pueden vincular a un producto concreto, así que se agrupan con honestidad bajo esta etiqueta en lugar de adivinarlos.

Ten en cuenta:

  • Esta es una vista de conversiones. Un producto de IA que envía visitas pero ninguna conversión atribuible en el período seleccionado no aparecerá aquí — usa la vista Influencia de IA para el tráfico de IA por producto.
  • Ver solo Probable IA (sin especificar) es exacto, no un dato que falte: significa que las conversiones de IA del período se detectaron por heurística sin un referente identificado.
  • La atribución de IA aparece en el panel autenticado; no se muestra de forma intencionada en los paneles públicos o compartidos.

Atribución entre dispositivos

Enterprise Plan

Rastrea entre dispositivos:

  1. Identifica usuarios cuando inician sesión
  2. El recorrido se une automáticamente
  3. Ruta completa visible
// When user logs in
zenovay('identify', userId);

Configuración de parámetros UTM

Seguimiento de campañas

Asegúrate de que se usan los parámetros UTM:

https://yoursite.com/?utm_source=google
                     &utm_medium=cpc
                     &utm_campaign=spring_sale
                     &utm_content=banner_1

Parámetros UTM

ParámetroPropósitoEjemplo
utm_sourceFuente de tráficogoogle, facebook
utm_mediumMedio de marketingcpc, email
utm_campaignNombre de la campañaspring_sale
utm_contentVariante del anunciobanner_a
utm_termPalabras claveblue shoes

Configuración de pruebas

Modo de depuración

Activa el registro de depuración:

zenovay('debug');

Luego rastrea una compra de prueba y verifica la consola.

Compra de prueba

  1. Realiza un pedido de prueba
  2. Verifica la consola del navegador
  3. Verifica en la vista en tiempo real
  4. Confirma en el informe de ingresos

Lista de verificación de verificación

  • Valor de ingresos correcto
  • ID de pedido registrado
  • Artículos rastreados (si se envían)
  • Fuente atribuida correctamente
  • Moneda correcta

Manejo de casos límite

Ingresos recurrentes

Para suscripciones:

// 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

Maneja los reembolsos correctamente:

// Track refund
zenovay('revenue', -49.99, 'USD', {
  order_id: 'REFUND-ORD-12345',
  type: 'refund',
  original_order: 'ORD-12345'
});

Envíos parciales

Si el ingreso se reconoce al envío:

// Track each shipment
zenovay('revenue', 50.00, 'USD', {
  order_id: 'ORD-12345-SHIP-1',
  parent_order: 'ORD-12345'
});

Calidad de datos

Prevenir duplicados

Asegúrate de que los ingresos no se rastreen dos veces:

// 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

Verifica la calidad de los datos:

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
  });
}

Solución de problemas

Los ingresos no aparecen

Si los ingresos no se muestran:

  1. Verifica que el seguimiento se dispare

    • ¿Está el modo de depuración habilitado?
    • ¿Errores de consola?
  2. Verifica la configuración del objetivo

    • ¿Se creó el objetivo de ingresos?
    • ¿Está activo el objetivo?
  3. Verifica el tiempo

    • ¿Después de que la página se cargue por completo?
    • ¿En la devolución correcta?
  4. Valida los datos

    • ¿El valor es un número?
    • ¿No es $0?

Atribución faltante

Si la fuente no se atribuye:

  1. Verifica que los parámetros UTM estén presentes
  2. Verifica que el referente no esté bloqueado
  3. Intenta un modelo de atribución diferente en la tarjeta Atribución de la pestaña Revenue
  4. Confirma que la visita que convierte se rastreó en primer lugar (verifica la vista en tiempo real)

Los montos no coinciden

Si los totales difieren de la contabilidad:

  1. Compara rangos de fechas
  2. Verifica los reembolsos
  3. Verifica el manejo de monedas
  4. Busca pedidos faltantes

Consideraciones de seguridad

Limitaciones del seguimiento del lado del cliente

Ten en cuenta:

  • Los valores se pueden manipular
  • No es para propósitos de facturación
  • Solo para análisis

Lado del servidor para la precisión

Para una precisión crítica:

  • Implementa el seguimiento del lado del servidor
  • Verifica contra el backend
  • Usa para informes

Conectar un procesador de pagos (servidor a servidor)

Si ya procesa pagos a través de un procesador compatible, puede conectar su cuenta a Zenovay en lugar de modificar el código de su pago. Zenovay recibe webhooks del procesador, atribuye cada pago capturado a la sesión de origen y alimenta automáticamente el panel de ingresos — sin necesidad de llamadas zenovay('revenue', …) del lado del cliente.

La pestaña Configuración de ingresos te permite conectar Stripe, PayPal y Paddle. Cada uno tiene una guía de configuración paso a paso:

ProcesadorGuía de configuraciónQué se rastrea
StripeIntegración de ingresos de StripeCapturas, reembolsos, facturas de suscripción
PayPalIntegración de ingresos de PayPalCapturas y reembolsos
PaddleIntegración de ingresos de PaddleCapturas y reembolsos

Elige tu procesador en la pestaña Configuración de ingresos, pega tus credenciales, y Zenovay se encarga del resto.

Cuándo elegir la ingesta por webhook en lugar del rastreador JS:

  • Precisión en el servidor — las cargas útiles de webhooks están firmadas por el procesador y no pueden ser manipuladas por navegadores ni bloqueadores de anuncios.
  • Sin cambios en el código de pago — abre el panel de tu sitio web, ve a la pestaña Ingresos de configuración, elige tu procesador, y pega tus credenciales.
  • Los reembolsos se gestionan automáticamente — cuando se emite un reembolso en el panel de tu procesador, Zenovay lo registra.

Cuándo seguir usando el rastreador JS:

  • Necesitas datos a nivel de artículo (items[]) que el procesador no incluye en los webhooks.
  • Tu procesador no está en la lista anterior.
  • Quieres que el pedido aparezca en la vista de visitantes en tiempo real en el momento en que el cliente llega a la página de éxito (los webhooks llegan unos segundos después).

Puedes usar ambos enfoques en el mismo sitio — Zenovay deduplica por order_id, así que el mismo pedido no se contabilizará dos veces.

Próximos pasos

¿Fue útil este artículo?