Tracking & Attribution

Cómo componer una URL de seguimiento

La respuesta proporciona tres fuentes para combinar:

  • Page-level trackers.impression: for example, a page impression uses type: "impression" and params including ts and iabConsentString.
  • Shared trackingTemplates: one set of client(relative) and server (absolute) URL templates, already containing session and placement query parameters.
  • Per-node trackers.click and/or trackers.addToCart on a module, row, or gallery item: type+ params for that specific event (for example, modId, rurl, productCode).

¿Qué plantilla?

Use the node’s tracking.type to look up trackingTypes.<type>. This defines the valid client.* and server.* keys for that interaction (for example, for link: client.clickRedirect, client.clickEvent, server.clickEvent).

Cliente frente a servidor

  • Client (trackingTemplates.client.*): Values are relative paths (including query strings). Prepend your reverse‑proxy base URL (BASEURL).
  • Server (trackingTemplates.server.): Values are absolute URL templates on the Epsilon tracking host. Compose the final URL the same way as C2S: template + "&" + queryString(trackers.<slot>params).
📘

Do not change the template’s host or path, and do not send S2S calls through your reverse proxy.

Ejemplos resueltos (pseudocódigo)

C2S click for a HERO CTA

url = BASEURL + trackingTemplates.client.clickRedirect + "&" + queryString(trackers.click.params)

S2S page impression

url = trackingTemplates.server.impressionEvent + "&" + queryString(trackers.impression.params)

S2S add-to-cart for a product row

url = trackingTemplates.server.addToCartEvent + "&" + queryString(trackers.addToCart.params)

Macro substitution

  • Replace {TS} with the current millisecond timestamp, {RURL} with the URL-encoded destination, and {TCF} with the current TCF v2 string from your CMP before firing.
  • For add-to-cart, also substitute {QTY} with the absolute quantity of that SKU in the cart at fire time (not a delta), and {CONVERSION_VALUE} with the absolute monetary value of those items (quantity × unit price, minus any applied discounts).
📘
  • Only trackingTemplates.client.impressionPixelUrls are true pixels (1×1 GIFs).
  • clickRedirect is a 302 redirect endpoint.
  • clickEvent and addToCartEvent are event beacons that return 204 No Content.
❗️

No active tanto C2S como S2S para el mismo evento lógico (por ejemplo, no envíe un evento de clic de C2S y una notificación de clic de S2S para el mismo clic).

Seguimiento: cliente a servidor (C2S)

C2S tracking is implemented in the browser using composed URLs. Prepend BASEURL to the paths in trackingTemplates.client and append the appropriate trackers.<slot>params (see How to Compose a Tracking URL).

Only client.impressionPixelUrls are pixels (1×1 GIF). The other client templates are not pixels:

  • client.clickRedirect: 302 redirect endpoint. Epsilon logs the click and redirects the browser to the decoded rurl. Use this as a browser navigation target.

  • client.clickEvent: Event beacon returns 204 No Content). Fire using navigator.sendBeacon or fetch({ keepalive: true }). Do not render as <img>.

  • client.addToCartEvent: Event beacon (returns 204). Uses the same firing pattern as clickEvent.

Pasos para la implementación

  1. Renderiza el contenido de la página de marca devuelto por la API.

  2. Tras la representación, active los píxeles de impresión en el navegador (todas las entradas en trackingTemplates.client.impressionPixelUrls, como imágenes de 1×1).

  3. When a user clicks a trackable node, either:
    (a) redirect through the composed client.clickRedirect URL, or
    (b) fire the composed client.clickEvent URL as an event beacon and navigate to the destination yourself.
    Use one or the other per click, not both.

Píxel de impresión

After the brand page renders, fire each path in trackingTemplates.client.impressionPixelUrls as a 1×1 image, (see How to Compose a Tracking URL).

<img src="https://www.retailer.com/epsilon/tracking/v3/impression/pixel/brandpage_djog...?...&ts=1737485823910"
     width="1" height="1" style="display:none" />

Pasos:

  1. Para cada cadena de trackingTemplates.client.impressionPixelUrls, anteponga su BASEURL (p. ej., https://www.retailer.com/epsilon).
  2. Append & + queryString(trackers.impression.params), substituting {TS} with the current millisecond timestamp and {TCF} with the current consent string from your CMP.
  3. Actívelo como una < img src="..."> de 1×1 en el navegador (o equivalente).

Seguimiento de clics

Opción A: haga clic en Redirigir (client.clickRedirect)

Navigate the user through the composed URL. Epsilon logs the click and responds with HTTP 302 to the decoded rurl. This endpoint is GET only, and rurl is required;

Opción B: haga clic en la baliza de eventos (client.clickEvent)

Fire as a beacon and navigate yourself. Accepts GET or POST, returns 204 No Content. Not an image; do not render as<img>.

Añadir al carrito (C2S)

Fire trackingTemplates.client.addToCartEvent as an event beacon (not a pixel) when the user adds a product to cart. Accepts GET or POST, returns 204 No Content.

📘

Do not combine C2S and S2S add‑to‑cart for the same cart action.

Seguimiento: de servidor a servidor (S2S)

S2S tracking is implemented on your backend. Compose URLs the same way as C2S: start from the appropriate trackingTemplates.server string, then append trackers.<slot>params. Server templates are already absolute — there is no BASEURLto prepend. (see How to Compose a Tracking URL).

📘

Do not change the host or path from the server template, and do not send S2S requests through your reverse proxy.

Cuándo usar el seguimiento S2S

  • Su arquitectura requiere la activación de eventos por parte del servidor.
  • Necesitará seguimiento en los entornos en los que no sean fiables los píxeles del lado del cliente.
  • You want to mix strategies - e.g. C2S impressions + S2S add-to-cart. This is supported but never fire both C2S and S2S for the same event.

Notificación de impresiones S2S

After the brand page is rendered, your server issues a GET or POST to the composed impression URL: trackingTemplates.server.impressionEvent + trackers.impression.params (substitute {TS} and {TCF} before sending).

Notificación de clic S2S

Compose: trackingTemplates.server.clickEvent + trackers.click.params (substitute {TS}, {RURL}, and {TCF}), then issue GET or POST.

Notificación S2S de agregar al carrito

Compose: trackingTemplates.server.addToCartEvent + trackers.addToCart.params (substitute {TS}, {QTY}, {CONVERSION_VALUE}, and {TCF}), then issue GET or POST.

Parámetros S2S

ParámetroFuenteNotas
catalogId, sessionId, customerId, dtmId, placementId, lsid, utcOffsettrackingTemplates query stringsPreserve these values as-is when firing the request. Do not remove or modify them.
modIdtrackers.<slot>.paramsMódulo de contenido o identificador de fila.
tstrackers.<slot>.paramsReplace {TS} with the current timestamp in milliseconds before firing the request.
iabConsentStringtrackers.<slot>.paramsReplace {TCF} with the current TCF v2 consent string from the CMP before firing the request. If a value is already provided, use it as-is.
rurltrackers.<slot>.paramsURL-encoded redirect destination. Replace {RURL} when present.
productCode, sellerIdtrackers.<slot>.paramsValues derived from product nodes.
qtytrackers.addToCart.paramsReplace {QTY} with the absolute quantity of the SKU in the cart at the time the request is fired. Do not use the quantity delta.
conValtrackers.addToCart.paramsReplace {CONVERSION_VALUE} with the total monetary value of the items (quantity × unit price, minus any applicable discounts).

Referencia macro

símboloDescripciónFound InSubstitute with
BASEURL (your prefix)Your site's base URL with protocol and proxy path - prepend to each trackingTemplates.client.* path.C2S trackinghttps://www.retailer.com/epsilon
{TS}Cache-busting timestamp (milliseconds)trackers.<slot>.params1737485823910
{RURL}Destino de redirección codificado en URLtrackers.<slot>.params.rurlhttps%3A%2F%2Fwww.retailer.com%2Fprodukt%2F9221200653341
{TCF}IAB TCF v2 consent string placeholder. Present when regs.consent was omitted on the request.trackers.<slot>.params.iabConsentStringCurrent TC string from your CMP, e.g. via __tcfapi getTCDatatcString
{QTY}Absolute quantity of this SKU in the cart at fire time (not a delta; e.g. if the shopper had 1 and adds another, send 2).trackers.addToCart.params.qty2
{CONVERSION_VALUE}Absolute monetary value of those items: quantity × unit price, minus any applied discounts.trackers.addToCart.params.conVal49.99
{RURL_KID}Redirect signing key ID. Present in trackers.click.redirectParams when platform redirect signing is enabled.trackers.click.redirectParams.rurlKidSigning key id returned by the batch sign endpoint
{RURL_SIG}Redirect signing signature. Present in trackers.click.redirectParams when platform redirect signing is enabled.trackers.click.redirectParams.rurlSigEd25519 signature (base64url) returned by the batch sign endpoint

Referencia de codificación de URL

Al codificar {RURL}, utilice la codificación porcentual estándar:

CarácterCodificar como
:%3A
/%2F
?%3F
=%3D
&%26

redirectParams and Redirect Signing

When platform redirect signing is enabled, trackers.click may include a redirectParamsobject alongside params. The keys in 7are merged only into client.clickRedirect URLs — not into clickEventor any server URL.

Two cases:

Embedded link destinations (URL baked into params.rurl): the platform signs the redirect at serve time and emits literal rurlKidand rurlSigvalues in redirectParams. Append these as-is to the clickRedirect URL.

Retailer-controlled redirects (params.rurl is {RURL}): redirectParams contains the macros {RURL_KID} and {RURL_SIG}. Call the batch sign endpoint (redirectSigning.url from the response) to obtain the key id and signature for your destination URL, then substitute before appending.

The top-level redirectSigningobject, when present, provides the batch POST /ads/v3/redirect/sign endpoint URL and the maxUrlsbatch limit. Contact Epsilon to confirm whether redirect signing is enabled for your integration.

clickRedirect composition with redirectParams:

BASEURL + trackingTemplates.client.clickRedirect + "&" + queryString(trackers.click.params) + "&" + queryString(trackers.click.redirectParams)

Guía de estilo

Before enabling Brand Pages on your site, we need to capture your site's visual identity. Fill in the table below with your design values. Our team will use this to configure the brand page preview experience.

Logotipo

CampoDescripciónSu valor
logoUrlURL del logo de su sitio (SVG o PNG)

Colores

CampoDescripciónSu valor
Color primarioColor principal de la marca (hexadecimal)
Color de fondoColor de fondo de la página (hexadecimal)
Color de la superficieColor de fondo de la tarjeta/sección (hexadecimal)
Color de texto primarioColor del texto principal (hexadecimal)
Color del texto secundarioColor de texto atenuado (hexadecimal)
Texto en color primarioColor de texto utilizado en fondos de color primario (hexadecimal)
Color del bordeColor de borde predeterminado (hexadecimal)

Tipografía

CampoDescripciónSu valor
Familia de fuentes para el encabezadoFuente utilizada en el encabezado (por ejemplo, «Google Sans, sans-serif»)
Familia de fuentes del cuerpoFuente utilizada en el cuerpo del texto (por ejemplo, «Roboto, sans-serif»)
Tamaño base de la fuenteTamaño predeterminado de la fuente en el cuerpo del texto (por ejemplo 16px)

Botones

CampoDescripciónSu valor
Fondo del botón principalColor de fondo para los botones primarios
Color del texto del botón principalColor de texto para los botones primarios
Radio de borde del botón principalRedondeo de esquinas (por ejemplo, 8px)
Estilo de botón secundarioDescriba el aspecto de los botones secundarios (contorno, fantasma, etc.)

Requisitos de contenido del módulo

Las páginas de marca se componen de módulos de contenido. Para cada tipo de módulo, indique las restricciones de contenido que exige su sitio. Nuestro equipo las utilizará para configurar las reglas de validación de plantillas.

IMAGE Modules

RequisitoDescripciónSu valor
Anchura mínimaAnchura mínima de imagen en píxeles (por ejemplo, 1920)
Altura mínimaAltura mínima de imagen en píxeles (por ejemplo, 500)
Tamaño máximo de archivoMaximum file size in MB (e.g. 10). Must be less than 4MB.
Formatos aceptadosFormatos de imagen aceptados (p. ej., jpg, png, gif, svg)
Máximo de caracteres del subtítuloNúmero máximo de caracteres para la leyenda de la imagen, si procede
altopcionalidad de etiquetaWhether alt is required on images.

TEXT Modules

RequisitoDescripciónSu valor
Variante«titular», «eslogan», «cuerpo» o «líneas». Determina el estilo en el que se muestra el texto.
Alineación«izquierda», «centro» o «derecha». Determina la alineación horizontal del texto.
Configuración de «líneas»Configuration for multi-line text configuration (when variant = lines). For each line of text, provide the following:
  • name of the text field
  • “required” or “allowed”?
  • whether this is meant to be a hyperlink to another URL
Número máximo de caracteres para el titularNúmero máximo de caracteres para el texto del titular
Número máximo de caracteres para la descripciónNúmero máximo de caracteres para el texto de descripción
Máximo de caracteres del cuerpo/pie de páginaNúmero máximo de caracteres para el cuerpo del texto o el pie de página
Botón de CTA¿Obligatorio, opcional o no necesario?
Número máximo de caracteres para la CTAMáximo de caracteres para la etiqueta del botón CTA

PRODUCT_GRID Modules

RequisitoDescripciónSu valor
Productos mínimosNúmero mínimo de productos para mostrar (por ejemplo, 4)
Máximo de productosNúmero máximo de productos para mostrar (por ejemplo, 12)
Título de la sección¿Obligatorio u opcional?
Número máximo de caracteres para el título de la secciónNúmero máximo de caracteres para el título de la sección
Descripción de la sección¿Obligatorio u opcional?
Descripción de la sección: máximo de caracteresNúmero máximo de caracteres para la descripción de la sección
Botón de CTA¿Obligatorio, opcional o no necesario?

IMAGE_GALLERY Modules

El módulo de Galería de imágenes hereda las mismas propiedades de configuración que el módulo de IMAGEN. Además, también acepta las siguientes propiedades específicas de la galería:

RequisitoDescripciónSu valor
Imágenes mínimasNúmero mínimo de imágenes de la galería (por ejemplo, 2)
Imágenes máximasNúmero máximo de imágenes de la galería (por ejemplo, 4)
Título de la secciónSi el texto del título de la sección es obligatorio u opcional.
Descripción de la secciónSi el texto de la descripción de la sección es obligatorio u opcional.
alt opcionalidad de etiquetaWhether alt is required on images.
Opcionalidad de la llamada a la acciónSi el botón o enlace de llamada a la acción es obligatorio, está permitido o está desactivado.
Líneas de texto adicionalFor each additional text that is to be associated with each image in the image gallery, provide the following:
  • name of the text field
  • “required” or “allowed”?
  • whether the text should function as a hyperlink to another URL

SPLIT_LAYOUT Modules

El módulo de Diseño dividido permite mostrar dos módulos uno al lado del otro. Actualmente, solo se admiten los módulos de Texto e Imagen. Además de los ajustes individuales de configuración para los módulos de Texto e Imagen (descritos en las secciones anteriores), se requieren las siguientes propiedades adicionales:

RequisitoDescripciónSu valor
Relación de diseñoProporción de columna (50:50, 33:67 o 67:33)

Identidad y privacidad

Identificadores aceptables

  • Session ID - anonymous session identifier (non-PII)
  • Customer ID - retailer customer identifier (non-PII, e.g. loyalty ID hash)
❗️

No pase direcciones de correo electrónico con hash, números de teléfono o cualquier otra información de identificación personal en ningún parámetro o URL.

Requisitos de privacidad

Los minoristas deben:

RGPD / Consentimiento

Pase el objeto regsa POST /ads/v3/brand-pages:

  • regs.gdpr: 1 when the request is subject to GDPR (EU/EEA/UK treatment per your policy); 0otherwise.
  • regs.consent: When gdpr is 1, pass the current TCF v2 consent string from your CMP (the same value you would surface to other ad partners). Do not invent or hardcode a string—use what the user’s browser / app has consented to.
  • iabConsentString: This appears in every tracker slot's params, not in trackingTemplates. When regs.consent was provided, the value is the literal TC string and no further action is needed.
  • When regs.consent was omitted, the value is the {TCF}macro — substitute the current TCF v2 string from your CMP at fire time before sending any tracking request.