추적 URL 구성 방법
응답에서 제공하는 조합 가능한 세 가지 소스입니다:
- 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).
어떤 템플릿이 사용되나요?
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 (
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.
작업 예시(의사코드)
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.
동일한 논리적 이벤트에 대해 C2S와 S2S를 모두 실행하지 마십시오(예: 동일한 클릭에 대해 C2S 클릭 이벤트와 S2S 클릭 알림을 중복 전송하지 않습니다).
추적 – 클라이언트-서버(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.
구현 단계
-
API가 반환한 브랜드 페이지 콘텐츠를 렌더링합니다.
-
렌더링 후, 브라우저에서 노출 픽셀을 실행합니다(
trackingTemplates.client.impressionPixelUrls의 모든 항목을 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.
임프레션 픽셀
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" />단계:
trackingTemplates.client.impressionPixelUrls의 각 문자열에BASEURL을 추가하십시오(예: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. - 브라우저(또는 동등한 환경)에서 1×1
< img src="...">으로 실행하십시오.
클릭 추적
옵션 A: 리디렉션 클릭 (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;
옵션 B: 클릭 이벤트 비콘(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>.
장바구니에 추가(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.
추적–서버 간(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.
S2S 추적 사용 시기
- 이 아키텍처는 서버 측 이벤트 발생이 필요합니다.
- 클라이언트 측 픽셀이 신뢰할 수 없는 환경에서는 추적이 필요합니다.
- 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.
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).
S2S 클릭 알림
Compose: trackingTemplates.server.clickEvent + trackers.click.params (substitute {TS}, {RURL}, and {TCF}), then issue GET or POST.
S2S 장바구니 추가 알림
Compose: trackingTemplates.server.addToCartEvent + trackers.addToCart.params (substitute {TS}, {QTY}, {CONVERSION_VALUE}, and {TCF}), then issue GET or POST.
S2S 매개변수
| 매개 변수 | 출처 | 참고 |
|---|---|---|
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 | 콘텐츠 모듈 또는 행 식별자. |
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). |
매크로 참조 안내
| 기호 | 설명 | 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} | 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 |
URL 인코딩 참조
{RURL}을 인코딩할 때 표준 백분율 인코딩을 사용하십시오:
| 문자 | 인코딩으로 설정 |
|---|---|
: | %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)스타일 안내서
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.
로고
| 필드 | 설명 | 귀하의 값 |
|---|---|---|
| 로고 URL | 사이트 로고 URL(SVG 또는 PNG) |
색상
| 필드 | 설명 | 귀하의 값 |
|---|---|---|
| 기본 색상 | 메인 브랜드 색상(16진수) | |
| 배경 색상 | 페이지 배경 색상(16진수) | |
| 표면 색상 | 카드/섹션 배경색(16진수) | |
| 기본 텍스트 색상 | 기본 텍스트 색상(16진수) | |
| 보조 텍스트 색상 | 약화된 텍스트 색상(16진수) | |
| 기본 색상 위의 텍스트 | 텍스트 색상은 기본 색상 배경에서 사용(16진수) | |
| 테두리 색상 | 기본 테두리 색상(16진수) |
타이포그래피
| 필드 | 설명 | 귀하의 값 |
|---|---|---|
| 헤드딩 폰트 계열 | 제목에 사용된 글꼴(예: "Google Sans, sans-serif" | |
| 본문 글꼴 패밀리 | 본문 텍스트에 사용되는 글꼴(예: "Roboto, sans-serif" | |
| 기본 글꼴 크기 | 기본 본문 글꼴 크기 (예: 16px) |
버튼
| 필드 | 설명 | 귀하의 값 |
|---|---|---|
| 기본 버튼 배경 | 기본 버튼의 배경색 | |
| 기본 버튼 텍스트 색상 | 기본 버튼의 텍스트 색상 | |
| 기본 버튼 테두리 반경 | 모서리 둥근 기술(예: 8px) | |
| 보조 버튼 스타일 | 보조 버튼의 모양(아웃라인, 고스트 등)을 설명합니다. |
모듈 콘텐츠 요구사항
브랜드 페이지는 콘텐츠 모듈로 구성되어 있습니다. 각 모듈 유형에 대해 사이트에 필요한 콘텐츠 제약 조건을 제공해 주십시오. 팀에서 이를 사용하여 템플릿 검증 규칙을 구성할 것입니다.
IMAGE Modules
| 요구사항 | 설명 | 귀하의 값 |
|---|---|---|
| 최소 너비 | 최소 이미지 너비(픽셀 단위)(예: 1920) | |
| 최소 높이 | 최소 이미지 높이(픽셀 단위)(예: 500) | |
| 최대 파일 크기 | Maximum file size in MB (e.g. 10). Must be less than 4MB. | |
| 허용되는 형식 | 허용되는 이미지 형식들 (예: jpg, png, gif, svg) | |
| 캡션 최대 문자 수 | 이미지 캡션의 최대 글자 수(해당되는 경우) | |
alt태그 선택 여부 | Whether alt is required on images. |
TEXT Modules
| 요구사항 | 설명 | 귀하의 값 |
|---|---|---|
| 변종이형 | “헤드라인”, “태그라인”, “본문”, 또는 “라인”. 텍스트가 표시되는 스타일을 결정합니다. | |
| 정렬 | “왼쪽”, “가운데” 또는 “오른쪽.” 텍스트의 가로 맞춤을 결정합니다. | |
| "라인" 구성 | Configuration for multi-line text configuration (when variant = lines). For each line of text, provide the following:
| |
| 헤드라인 최대 글자 수 | 헤드라인 텍스트 최대 문자 수 | |
| 설명 최대 문자 수 | 설명 텍스트의 최대 글자 수 | |
| Body/Footer 최대 문자 | 텍스트 본문 또는 바닥글의 최대 문자 수 | |
| CTA 버튼 | 필수입니까, 선택입니까, 아니면 필요하지 않습니까? | |
| CTA 텍스트 최대 글자 수 | CTA 버튼 레이블의 최대 글자 수 |
PRODUCT_GRID Modules
| 요구사항 | 설명 | 귀하의 값 |
|---|---|---|
| 최소 제품광고 | 표시할 최소 제품 수(예: 4개) | |
| 최대 제품 | 표시할 최대 제품 수 (예: 12) | |
| 섹션 제목 | 필수입니까, 선택입니까? | |
| 섹션 제목 최대 문자 수 | 섹션 제목의 최대 문자 수 | |
| 섹션 설명 | 필수입니까, 선택입니까? | |
| 섹션 설명 최대 문자 수 | 섹션 설명의 최대 문자 수 | |
| CTA 버튼 | 필수입니까, 선택입니까, 아니면 필요하지 않습니까? |
IMAGE_GALLERY Modules
이미지 갤러리 모듈은 이미지 모듈과 동일한 구성 속성을 상속합니다. 또한 다음과 같은 갤러리별 속성도 허용:
| 요구사항 | 설명 | 귀하의 값 |
|---|---|---|
| 최소 이미지 | 갤러리 이미지 최소 개수(예: 2개) | |
| 최대 이미지 | 최대 갤러리 이미지 수(예: 4개) | |
| 섹션 제목 | 섹션 제목 텍스트가 필수인지 선택 사항인지 여부를 확인합니다. | |
| 섹션 설명 | 섹션 설명 텍스트가 필수인지 선택인지 여부입니다. | |
alt 태그 선택 여부 | Whether alt is required on images. | |
| 행동 유도 옵션 제공 | 콜 투 액션 버튼 또는 링크가 필요하거나 허용되거나 비활성화되어 있는지 여부입니다. | |
| 추가 텍스트 줄 | For each additional text that is to be associated with each image in the image gallery, provide the following:
|
SPLIT_LAYOUT Modules
분할 레이아웃 모듈을 사용하면 두 모듈을 나란히 표시할 수 있습니다. 현재는 텍스트 및 이미지 모듈만 지원됩니다. 텍스트 및 이미지 모듈에 대한 개별 구성 설정(위의 섹션에 설명됨) 외에도 다음과 같은 추가 속성이 필요합니다:
| 요구사항 | 설명 | 귀하의 값 |
|---|---|---|
| 레이아웃 비율 | 열 비율(50:50, 33:67 또는 67:33) |
신원 및 개인정보 보호
허용 가능한 식별자
- Session ID - anonymous session identifier (non-PII)
- Customer ID - retailer customer identifier (non-PII, e.g. loyalty ID hash)
해시된 이메일 주소, 전화번호 또는 개인 식별 정보(PII)를 어떠한 매개변수나 URL에도 전달하지 마십시오.
개인 정보 보호 요건
소매업체는 다음을 수행해야 합니다:
- 측정 추적을 개인 정보 보호 정책에 공개
- 광고 수신 거부 링크 제공:
개인 정보 보호법(GDPR) / 동의
POST /ads/v3/brand-pages에 regs 객체를 전달합니다:
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.

