Comment composer une URL de suivi
La réponse fournit trois sources à combiner :
- 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).
Quel modèle ?
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).
Client/Serveur
- 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.
Exemples pratiques (pseudocode)
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.
Ne déclenchez pas à la fois le C2S et le S2S pour le même événement logique (par exemple, n'envoyez pas à la fois un événement de clic C2S et une notification de clic S2S pour le même clic).
Suivi – Client-serveur (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.
Étapes de mise en œuvre
-
Affichez le contenu de la page de marque renvoyé par l'API.
-
Après la diffusion, déclenchez des pixels d’impression dans le navigateur (toutes les entrées dans
trackingTemplates.client.impressionPixelUrls, sous forme d'images 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.
Pixel d’impression
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" />Étapes :
- Pour chaque chaîne dans
trackingTemplates.client.impressionPixelUrls, ajoutez votreBASEURLau début (par exemple,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. - Déclenchez en tant que
< img src="...">1×1 dans le navigateur (ou équivalent).
Suivi des clics
Option A : cliquer sur Rediriger (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;
Option B : cliquer sur balise d’événement (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>.
Ajouter au panier (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.
Suivi – Serveur-serveur (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.
Quand utiliser le suivi S2S
- Votre architecture nécessite un déclenchement d’événements côté serveur.
- Vous avez besoin d'un suivi dans des environnements où les pixels côté client ne sont pas fiables.
- 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.
Notification d'impression 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).
Notification de clic S2S
Compose: trackingTemplates.server.clickEvent + trackers.click.params (substitute {TS}, {RURL}, and {TCF}), then issue GET or POST.
Notification d'ajout au panier S2S
Compose: trackingTemplates.server.addToCartEvent + trackers.addToCart.params (substitute {TS}, {QTY}, {CONVERSION_VALUE}, and {TCF}), then issue GET or POST.
Paramètres S2S
| Paramètre | Source | Remarques |
|---|---|---|
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 | Module de contenu ou identifiant de ligne. |
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). |
Référence de la macro
| symbole | Description | 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} | Destination de redirection encodée par 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 |
Référence d'encodage d'URL
Lorsque vous encodez {RURL}, utilisez l'encodage en pourcentage standard :
| Caractère | Encoder en tant que |
|---|---|
: | %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)Guide de style
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.
Logo
| Champ | Description | Votre valeur |
|---|---|---|
| logoUrl | URL de votre logo de site (SVG ou PNG) |
Couleurs
| Champ | Description | Votre valeur |
|---|---|---|
| Couleur principale | Couleur principale de la marque (hexadécimal) | |
| Couleur de l'arrière-plan | Couleur de l'arrière-plan de la page (hexadécimal) | |
| Couleur de la surface | Couleur de l'arrière-plan de la carte/de la section (hexadécimal) | |
| Couleur principale du texte | Couleur du texte principal (au format hexadécimal) | |
| Couleur du texte secondaire | Couleur atténuée du texte (hexadécimal) | |
| Texte sur la couleur principale | Couleur du texte utilisée sur les arrière-plans de couleur principal (hexadécimal) | |
| Couleur de la bordure | Couleur de la bordure par défaut (hexadécimal) |
Typographie
| Champ | Description | Votre valeur |
|---|---|---|
| Catégorie de polices d'en-tête | Police d'écriture utilisée pour les titres (par exemple, « Google Sans, sans-serif ») | |
| Catégorie de polices du corps | Police d'écriture utilisée pour le corps du texte (par exemple, « Roboto, sans-serif ») | |
| Taille de la police de base | Taille de la police par défaut (par exemple, 16 px) |
Boutons
| Champ | Description | Votre valeur |
|---|---|---|
| Arrière-plan du bouton principal | Couleur d’arrière-plan pour les boutons principaux | |
| Couleur du texte du bouton principal | Couleur du texte des boutons principaux | |
| Rayon de bordure du bouton principal | Arrondi des angles (par exemple, 8 px) | |
| Style de bouton secondaire | Décrivez l’apparence du bouton secondaire (contour, fantôme, etc.) |
Exigences relatives au contenu du module
Les pages de marque sont composées de modules de contenu. Pour chaque type de module, indiquez les contraintes de contenu requises par votre site. Notre équipe les utilisera pour configurer les règles de validation des modèles.
IMAGE Modules
| Exigence | Description | Votre valeur |
|---|---|---|
| Largeur minimale | Largeur minimale de l’image en pixels (par exemple, 1920) | |
| Hauteur minimale | Hauteur minimale de l’image en pixels (par exemple, 500) | |
| Taille maximale du fichier | Maximum file size in MB (e.g. 10). Must be less than 4MB. | |
| Formats acceptés | Formats d’image acceptés (par exemple, JPG, PNG, GIF, SVG) | |
| Nombre maximum de caractères pour la légende | Nombre maximum de caractères pour la légende de l'image, le cas échéant | |
altCaractère optionnel des balises | Whether alt is required on images. |
TEXT Modules
| Exigence | Description | Votre valeur |
|---|---|---|
| Variante | « en-tête », « slogan », « corps » ou « lignes ». Détermine le style d'affichage du texte. | |
| Alignement | « gauche », « centre » ou « droite ». Détermine l’alignement horizontal du texte. | |
| Configuration des « Lignes » | Configuration for multi-line text configuration (when variant = lines). For each line of text, provide the following:
| |
| Nombre maximum de caractères pour l'en-tête | Nombre maximum de caractères pour le texte de l'en-tête | |
| Description nombre maximal de caractères | Nombre maximum de caractères pour le texte de description | |
| Nombre maximum de caractères pour le corps/le pied de page | Nombre maximum de caractères pour le corps ou le texte du pied de page | |
| Bouton CTA | Obligatoire, facultatif ou inutile ? | |
| Nombre maximum de caractères du CTA | Caractères maximum pour le libellé du bouton CTA |
PRODUCT_GRID Modules
| Exigence | Description | Votre valeur |
|---|---|---|
| Produits minimum | Nombre minimum de produits à afficher (par exemple, 4) | |
| Nombre maximum de produits | Nombre minimum de produits à afficher (par exemple, 12) | |
| Titre de la section | Obligatoire ou facultatif ? | |
| Titre de la section (nombre maximum de caractères) | Nombre maximum de caractères par titre de section | |
| Description de la section | Obligatoire ou facultatif ? | |
| Description de la section (nombre maximum de caractères) | Nombre maximal de caractères pour la description de la section | |
| Bouton CTA | Obligatoire, facultatif ou inutile ? |
IMAGE_GALLERY Modules
Le module Galerie d’images hérite des mêmes propriétés de configuration que le module IMAGE. En outre, il accepte également les propriétés spécifiques à la galerie suivante :
| Exigence | Description | Votre valeur |
|---|---|---|
| Images minimales | Nombre minimum d'images de la galerie (par exemple, 2) | |
| Images maximales | Nombre maximum d'images de la galerie (par exemple, 4) | |
| Titre de la section | Indique si le texte du titre de la section est obligatoire ou facultatif. | |
| Description de la section | Indique si le texte de description de la section est obligatoire ou facultatif. | |
alt Caractère optionnel des balises | Whether alt is required on images. | |
| Caractère facultatif de l'appel à l'action | Si le bouton ou le lien d'appel à l'action est obligatoire, autorisé ou désactivé. | |
| Lignes de texte supplémentaires | For each additional text that is to be associated with each image in the image gallery, provide the following:
|
SPLIT_LAYOUT Modules
Le module Split Layout permet d'afficher deux modules côte à côte. Actuellement, seuls les modules Texte et Image sont pris en charge. En plus des paramètres de configuration individuels pour les modules Texte et Image (décrits dans les sections ci-dessus), les propriétés supplémentaires suivantes sont requises :
| Exigence | Description | Votre valeur |
|---|---|---|
| Ratio de mise en page | Ratio de colonne (50/50, 33/67 ou 67/33) |
Identité et confidentialité
Identifiants acceptables
- Session ID - anonymous session identifier (non-PII)
- Customer ID - retailer customer identifier (non-PII, e.g. loyalty ID hash)
Ne transmettez pas d’adresses e-mail hachées, de numéros de téléphone, ni de données à caractère personnel (PII) dans un paramètre ou une URL.
Exigences en matière de confidentialité
Les détaillants doivent :
- Divulguer le suivi des mesures dans leur politique de confidentialité
- Fournir des liens de désabonnement :
RGPD / Consentement
Passez l'objet regs sur 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.

