Cómo componer una URL de seguimiento
La respuesta proporciona tres fuentes para combinar:
- Page-level
trackers.impression: for example, a page impression usestype: "impression"andparamsincludingtsandiabConsentString. - Shared
trackingTemplates: one set ofclient(relative) andserver(absolute) URL templates, already containing session and placement query parameters. - Per-node
trackers.clickand/ortrackers.addToCarton a module, row, or gallery item:type+paramsfor 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.impressionPixelUrlsare true pixels (1×1 GIFs).clickRedirectis a 302 redirect endpoint.clickEventandaddToCartEventare 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 usingnavigator.sendBeaconorfetch({ keepalive: true }). Do not render as<img>. -
client.addToCartEvent: Event beacon (returns 204). Uses the same firing pattern asclickEvent.
Pasos para la implementación
-
Renderiza el contenido de la página de marca devuelto por la API.
-
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). -
When a user clicks a trackable node, either:
(a) redirect through the composedclient.clickRedirectURL, or
(b) fire the composedclient.clickEventURL 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:
- Para cada cadena de
trackingTemplates.client.impressionPixelUrls, anteponga suBASEURL(p. ej.,https://www.retailer.com/epsilon). - Append
&+queryString(trackers.impression.params), substituting{TS}with the current millisecond timestamp and{TCF}with the current consent string from your CMP. - 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)
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)
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ámetro | Fuente | Notas |
|---|---|---|
catalogId, sessionId, customerId, dtmId, placementId, lsid, utcOffset | trackingTemplates query strings | Preserve these values as-is when firing the request. Do not remove or modify them. |
modId | trackers.<slot>.params | Módulo de contenido o identificador de fila. |
ts | trackers.<slot>.params | Replace {TS} with the current timestamp in milliseconds before firing the request. |
iabConsentString | trackers.<slot>.params | Replace {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. |
rurl | trackers.<slot>.params | URL-encoded redirect destination. Replace {RURL} when present. |
productCode, sellerId | trackers.<slot>.params | Values derived from product nodes. |
qty | trackers.addToCart.params | Replace {QTY} with the absolute quantity of the SKU in the cart at the time the request is fired. Do not use the quantity delta. |
conVal | trackers.addToCart.params | Replace {CONVERSION_VALUE} with the total monetary value of the items (quantity × unit price, minus any applicable discounts). |
Referencia macro
| símbolo | Descripción | Found In | Substitute with |
|---|---|---|---|
BASEURL (your prefix) | Your site's base URL with protocol and proxy path - prepend to each trackingTemplates.client.* path. | C2S tracking | https://www.retailer.com/epsilon |
{TS} | Cache-busting timestamp (milliseconds) | trackers.<slot>.params | 1737485823910 |
{RURL} | Destino de redirección codificado en URL | trackers.<slot>.params.rurl | https%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.iabConsentString | Current TC string from your CMP, e.g. via __tcfapi getTCData → tcString |
{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.qty | 2 |
{CONVERSION_VALUE} | Absolute monetary value of those items: quantity × unit price, minus any applied discounts. | trackers.addToCart.params.conVal | 49.99 |
{RURL_KID} | Redirect signing key ID. Present in trackers.click.redirectParams when platform redirect signing is enabled. | trackers.click.redirectParams.rurlKid | Signing 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.rurlSig | Ed25519 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ácter | Codificar 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
| Campo | Descripción | Su valor |
|---|---|---|
| logoUrl | URL del logo de su sitio (SVG o PNG) |
Colores
| Campo | Descripción | Su valor |
|---|---|---|
| Color primario | Color principal de la marca (hexadecimal) | |
| Color de fondo | Color de fondo de la página (hexadecimal) | |
| Color de la superficie | Color de fondo de la tarjeta/sección (hexadecimal) | |
| Color de texto primario | Color del texto principal (hexadecimal) | |
| Color del texto secundario | Color de texto atenuado (hexadecimal) | |
| Texto en color primario | Color de texto utilizado en fondos de color primario (hexadecimal) | |
| Color del borde | Color de borde predeterminado (hexadecimal) |
Tipografía
| Campo | Descripción | Su valor |
|---|---|---|
| Familia de fuentes para el encabezado | Fuente utilizada en el encabezado (por ejemplo, «Google Sans, sans-serif») | |
| Familia de fuentes del cuerpo | Fuente utilizada en el cuerpo del texto (por ejemplo, «Roboto, sans-serif») | |
| Tamaño base de la fuente | Tamaño predeterminado de la fuente en el cuerpo del texto (por ejemplo 16px) |
Botones
| Campo | Descripción | Su valor |
|---|---|---|
| Fondo del botón principal | Color de fondo para los botones primarios | |
| Color del texto del botón principal | Color de texto para los botones primarios | |
| Radio de borde del botón principal | Redondeo de esquinas (por ejemplo, 8px) | |
| Estilo de botón secundario | Describa 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
| Requisito | Descripción | Su valor |
|---|---|---|
| Anchura mínima | Anchura mínima de imagen en píxeles (por ejemplo, 1920) | |
| Altura mínima | Altura mínima de imagen en píxeles (por ejemplo, 500) | |
| Tamaño máximo de archivo | Maximum file size in MB (e.g. 10). Must be less than 4MB. | |
| Formatos aceptados | Formatos de imagen aceptados (p. ej., jpg, png, gif, svg) | |
| Máximo de caracteres del subtítulo | Número máximo de caracteres para la leyenda de la imagen, si procede | |
altopcionalidad de etiqueta | Whether alt is required on images. |
TEXT Modules
| Requisito | Descripción | Su 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:
| |
| Número máximo de caracteres para el titular | Número máximo de caracteres para el texto del titular | |
| Número máximo de caracteres para la descripción | Número máximo de caracteres para el texto de descripción | |
| Máximo de caracteres del cuerpo/pie de página | Nú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 CTA | Máximo de caracteres para la etiqueta del botón CTA |
PRODUCT_GRID Modules
| Requisito | Descripción | Su valor |
|---|---|---|
| Productos mínimos | Número mínimo de productos para mostrar (por ejemplo, 4) | |
| Máximo de productos | Nú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ón | Nú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 caracteres | Nú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:
| Requisito | Descripción | Su valor |
|---|---|---|
| Imágenes mínimas | Número mínimo de imágenes de la galería (por ejemplo, 2) | |
| Imágenes máximas | Número máximo de imágenes de la galería (por ejemplo, 4) | |
| Título de la sección | Si el texto del título de la sección es obligatorio u opcional. | |
| Descripción de la sección | Si el texto de la descripción de la sección es obligatorio u opcional. | |
alt opcionalidad de etiqueta | Whether alt is required on images. | |
| Opcionalidad de la llamada a la acción | Si el botón o enlace de llamada a la acción es obligatorio, está permitido o está desactivado. | |
| Líneas de texto adicional | For each additional text that is to be associated with each image in the image gallery, provide the following:
|
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:
| Requisito | Descripción | Su valor |
|---|---|---|
| Relación de diseño | Proporció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:
- indicar el seguimiento de las mediciones en su política de privacidad
- proporcionar enlaces de exclusión:
RGPD / Consentimiento
Pase el objeto regsa POST /ads/v3/brand-pages:
regs.gdpr:1when the request is subject to GDPR (EU/EEA/UK treatment per your policy);0otherwise.regs.consent: Whengdpris1, 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 intrackingTemplates. Whenregs.consentwas provided, the value is the literal TC string and no further action is needed.- When
regs.consentwas omitted, the value is the{TCF}macro — substitute the current TCF v2 string from your CMP at fire time before sending any tracking request.

