Adobe Analytics implementation QA checklist
last verified · against Adobe Analytics implementation & Web SDK validation docs as of 2026-07
Adobe Analytics implementation QA reference: decode the b/ss image request, c/v/events params, s.t vs s.tl, response codes, and Web SDK /ee validation.
What this is
Adobe Analytics implementation QA is the practice of confirming that every beacon carries the right variables to the right report suite, both before release and after. This reference decodes the /b/ss/ image request and the Web SDK /ee interact call, lists the query parameters, expected response codes, and validation tools, and flags the configuration settings that silently drop hits.
Image request URL anatomy (the /b/ss/ beacon)
Path structure: https://[trackingServer]/b/ss/[reportSuiteID]/[hitSource]/s[randomNumber]?[query]
| Segment | Example | Meaning |
|---|---|---|
[trackingServer] |
example.data.adobedc.net |
Data-collection host. Verify per environment (see note below). |
/b/ss/ |
/b/ss/ |
File-structure segment for images on Adobe data-collection servers; present in every Analytics request. Filter for b/ss in a packet analyzer. |
[reportSuiteID] |
examplersid |
Report suite receiving the hit; comma-separated for multi-suite tagging. |
[hitSource] |
1 |
Controls the order that cookies and other methods use to identify visitors. |
s[randomNumber] |
s234234238479 |
Cache-buster; prevents the browser caching the image request. |
?[query] |
AQB=1…AQE=1 |
The variable payload (see below). |
The tracking-server host varies by implementation: *.data.adobedc.net, the legacy *.sc.omtrdc.net, or a first-party CNAME. Only the adobedc.net example is confirmed on the source page, so QA should verify the configured tracking server per environment rather than assume a fixed host.
Query-string boundary markers
| Param | Value | Meaning |
|---|---|---|
AQB |
AQB=1 |
Marks the beginning of the image-request query string. |
AQE |
AQE=1 |
Marks the end; presence indicates the request was not truncated. |
A hit showing AQB but no AQE was truncated and dropped variables.
Core query parameters
| Param | Populates / meaning |
|---|---|
pageName |
Page dimension. |
g |
Current page URL, up to 255 bytes. |
-g |
Extended page URL used when the URL is longer than 255 bytes. |
r |
Referrer, for traffic-source dimensions. |
mid |
Experience Cloud Visitor ID (ECID). |
v0 |
Tracking code (campaign) dimension. |
events |
Comma-separated list of events on the page; used by most metrics. |
ts |
Custom timestamp set with the hit, typically for offline tracking. |
ts format: dd/mm/yyyy hh:mm:ss w o — month is zero-based, w is the day of week (0 = Sunday), o is the negative GMT offset in minutes.
Variable ranges
| Variable | Query param | Range |
|---|---|---|
| Props (custom traffic variables) | c1…c75 |
c1–c75 |
| eVars (custom conversion variables) | v1…v250 |
v1–v250 |
| Context data variables | c. prefix, .c suffix |
e.g. c.mychannel.c |
Link-tracking parameters
| Param | Value | Meaning |
|---|---|---|
pe |
lnk_o |
Custom (other) link. |
pe |
lnk_d |
Download link. |
pe |
lnk_e |
Exit link. |
pe |
tnt |
Analytics for Target hit. |
pev1 |
linkURL | The link URL. |
pev2 |
link name | The custom link name for s.tl() calls. |
A page view carries no pe parameter; its presence marks a link-tracking hit.
Page hit vs link hit
s.t() |
s.tl() |
|
|---|---|---|
| Hit type | Page view | Link tracking |
pe param |
None | lnk_o / lnk_d / lnk_e |
| Increments page views | Yes | No |
| Returns | Transparent 1x1 gif image | Image request (no page-view increment) |
| Signature | s.t() |
s.tl(linkObject, linkType, linkName, overrideVars) |
s.t() takes all Analytics variables defined on the page, compiles them into an image request, and sends it to Adobe data-collection servers. For s.tl(): the linkObject value this waits up to 500ms for the image request, true navigates with no delay; linkType is a single character o / d / e. When trackDownloadLinks or trackExternalLinks are enabled, AppMeasurement automatically invokes s.tl() for those links.
Expected response codes
| Code | Meaning | QA verdict |
|---|---|---|
200 OK |
Successful data collection (most common). | Healthy |
302 FOUND |
Normal for first-time visitors or comScore integrations. | Healthy |
404 NOT FOUND |
Data did not reach the servers. | True failure |
NS_BINDING_ABORTED |
Browser advanced to the next page before waiting for a response. | Not necessarily an error; expected-but-risky |
Validation tooling
| Tool | Use | Notes |
|---|---|---|
| Packet analyzer (Charles, Fiddler, Wireshark, Observepoint, browser dev tools) | Filter b/ss (AppMeasurement) or /ee (Web SDK). |
Ground-truth network validation. |
| AEP Debugger (Chrome extension) | Tags / Adobe Target / Adobe Analytics / Web SDK-Edge / Auditor tabs. | Analytics tab shows active report suites. Works on any public page; non-public data requires Experience Cloud sign-in in an active tab. |
| AEP Debugger — Auditor tab | Weighted audit tests (0–5 scale), pass/fail, no partial credit. |
Level 4 failures risk unreliable data; Level 5 failures may cause data loss. |
| Assurance — Adobe Analytics view | Post-processed mapping of revars, eVars, props, plus report suite ID and SDK versions; Edge Network + Mobile SDK events. | Shows downstream acceptance the client-side debugger cannot. |
| Legacy bookmarklet debugger | URL-decode, auto-refresh, labeled vs raw query-string views. | Discontinued; replaced by the AEP Debugger. |
The Auditor overview documents the weighting scheme and general categories only; it does not enumerate which individual tests apply to Adobe Analytics versus Web SDK, so specific per-check pass/fail criteria are unverified.
Assurance processing statuses
The status column reports one of: Queued, Processed, Delayed, Error, Unauthorized, Unavailable, No Debug Flag, Expired. Processed means the hit was accepted downstream; Error, Unauthorized, and No Debug Flag indicate it was not cleanly accepted. The source lists the statuses but does not define each individually.
Web SDK / Edge Network validation
| Aspect | AppMeasurement | Web SDK |
|---|---|---|
| Network filter | b/ss (s.gif image request) |
/ee (interact POST) |
| Transport | Image GET, returns 1x1 gif | POST, returns 200 OK with Handle objects |
| Endpoint | [trackingServer]/b/ss/… |
edge.adobedc.net/ee/v2/interact?datastreamId={DATASTREAM_ID} (authenticated: server.adobedc.net/ee/v2/interact) |
| Analytics variables live in | Query string c / v / events |
data.__adobe.analytics |
| Report-suite routing | /b/ss/[rsid]/ path |
Datastream → Add Service → Adobe Analytics → report suite ID |
| ECID | mid parameter |
In the response Preview, NOT in the request identityMap |
Interact request body: { xdm{…}, data{…} } — xdm carries identityMap, eventType, web details, and timestamp; data carries custom properties. Query: datastreamId required, requestId optional (external tracing ID). Use the collect endpoint to batch multiple events.
Web SDK Analytics is configured to look for any properties in the data.__adobe.analytics object and use them for eVars, props, and events; processing-rule / XDM-schema mapping is no longer recommended (as of May 2024). In the AEP Debugger, view mapped variables by expanding the events row: events → 0 → data → __adobe → analytics.
XDM fields that auto-map to Analytics
| XDM field / eventType | Maps to |
|---|---|
web.webPageDetails.name |
s.pageName |
commerce.purchases.value |
Purchase event |
eventType web.webPageDetails.pageView |
Page-view event type |
Report-suite timestamp configuration
| Setting | Behavior | s.visitorID |
|---|---|---|
| Timestamps not allowed | Any hit carrying ts is permanently dropped. |
Supported |
| Timestamps required | Any hit missing ts is permanently dropped. |
Not supported |
| Timestamps optional | Mixes timestamped and non-timestamped hits; default for new report suites. | Do not set s.visitorID on timestamped hits |
Pre-publish QA flow
Install the Experience Platform (CX Enterprise) Debugger → open the dev site → confirm Adobe Analytics data, Tags information, and Experience Cloud Visitor ID (ECID) all appear → then publish the tag library Dev → Staging → Production. Read the report suite ID from the /b/ss/[rsid]/ path (or the datastream’s Analytics service) to confirm data is going to the correct dev vs prod suite.
Gotchas
- Beacon fires with
tsbut never appears in reports → the target suite isTimestamps not allowed(orTimestamps requireddrops any hit missingts) → match the suite’s Timestamps setting to the implementation; useTimestamps optionalwhen mixing offline/mobile and standard hits, and verify it in Admin before QA sign-off. - Out-of-order data, broken time-on-page / visit counts / pathing after enabling timestamped hits →
s.visitorIDis set on already-timestamped hits underTimestamps optional→ do not sets.visitorIDon timestamped data; let ECID and the timestamp handle identity and ordering. - Debugger shows the request but reports show no data → ad blockers or privacy extensions block the
/b/ss/request, or JS errors stop the library loading → disable ad blockers during QA, clear console JS errors, confirm the AppMeasurement file contains real code and is referenced in<head>, then re-check the request returns200. s.tlhits intermittently missing on exit/download links → the browser advanced to the next page before the beacon completed (NS_BINDING_ABORTED); passingtrueskips the delay → passthis(nottrue) so AppMeasurement waits up to 500ms, and treatNS_BINDING_ABORTEDas expected-but-risky, confirming the hit server-side.- First hit of a session returns
302and QA flags a failure →302 FOUNDis normal for first-time visitors and comScore integrations → only404is a true failure; accept200and302as healthy. - After Web SDK migration QA cannot find the
s.gif/b/ssrequest → Web SDK POSTs to the Edge Network interact endpoint, and variables live underdata.__adobe.analytics, not query-string params → filter for/ee, inspect thexdmanddata.__adobe.analyticspayload, and validate in the AEP Debugger (events → 0 → data → __adobe → analytics) or the Assurance Analytics view. - ECID appears missing in the Web SDK request payload → the ECID is returned in the response, not carried in the outgoing
identityMap→ verify the ECID in the response Preview (or the Identity view), not the requestidentityMap. - AEP Debugger shows tags/property data but no solution details, or non-public data is blank → you are not authenticated into Experience Cloud in an active browser tab → sign into Experience Cloud with your Adobe ID in the debugger.
- Page URL truncated around 255 characters →
gcaps the page URL at 255 bytes; longer URLs overflow into-g→ confirm the beacon carries-gfor long URLs and validate the full Page URL dimension, not only thegvalue.
Quick recipes
Decode a captured beacon URL into labeled parameters and flag truncation:
// Paste an Analytics image-request URL to inspect itconst url = "https://example.data.adobedc.net/b/ss/examplersid/1/s234234238479?AQB=1&pageName=home&g=https%3A%2F%2Fexample.com&c1=nav&v0=email_promo&events=event1&AQE=1";const u = new URL(url);const q = u.searchParams;console.log("report suite:", u.pathname.split("/")[3]); // examplersidconsole.log("hit source:", u.pathname.split("/")[4]); // 1console.log("truncated?", q.has("AQB") && !q.has("AQE") ? "YES - dropped vars" : "no");for (const [k, v] of q) console.log(k, "=", decodeURIComponent(v));List the Analytics beacons already fired on the current page (both stacks):
// Run in the browser console after the page loadsperformance.getEntriesByType("resource") .filter(e => e.name.includes("/b/ss/") || e.name.includes("/ee/v2/interact")) .forEach(e => console.log(e.name.includes("/ee/") ? "WebSDK" : "AppMeasurement", e.name));Fix the exit/download link race — pass this, not true:
// linkType: "o" other, "d" download, "e" exit// "this" makes AppMeasurement wait up to 500ms for the beacons.tl(this, "e", "Example exit link");Smoke-test the Edge Network interact endpoint (expect 200 OK with Handle objects):
curl -s "https://edge.adobedc.net/ee/v2/interact?datastreamId=$DATASTREAM_ID" \ -H "Content-Type: application/json" \ -d '{ "xdm": { "eventType": "web.webPageDetails.pageView", "web": { "webPageDetails": { "name": "home" } } }, "data": { "__adobe": { "analytics": { "events": "event1" } } } }'Hardcoded page-view image request (no AppMeasurement library):
<img src="https://example.data.adobedc.net/b/ss/examplersid/1/s1234567890?AQB=1&pageName=home&g=https%3A%2F%2Fexample.com%2F&c1=nav&events=event1&AQE=1" width="1" height="1" alt="" />Related
- Hub: Adobe guides
- AppMeasurement to AEP Web SDK migration reference
- AEP Web SDK configuration reference
Sources
Adobe Experience League and Adobe Developer pages these values were read from:
- Data collection query parameters (read 2026-07-20)
- Implementing with hardcoded image requests (read 2026-07-20)
- Packet analyzers (read 2026-07-20)
- t (the s.t() method) (read 2026-07-20)
- tl (the s.tl() link tracking method) (read 2026-07-20)
- Legacy debugger (read 2026-07-20)
- Adobe Experience Platform Debugger overview (read 2026-07-20)
- Auditor overview (read 2026-07-20)
- Adobe Analytics view in Assurance (read 2026-07-20)
- Interact endpoint (interactive collection) (read 2026-07-20)
- Set up Adobe Analytics using Experience Platform Web SDK (read 2026-07-20)
- Validate Web SDK implementations with Experience Platform Debugger (read 2026-07-20)
- Debug and validate your Web SDK migration (read 2026-07-20)
- Validate a development implementation and publish to production (read 2026-07-20)
- Timestamp configuration (read 2026-07-20)
Flagged rather than guessed: the tracking-server host varies by implementation (data.adobedc.net, legacy sc.omtrdc.net, or a first-party CNAME) and must be verified per environment; the standalone validate/overview landing page returned HTTP 404 and appears to have been restructured, so individual validate sub-pages were confirmed instead; the Auditor’s per-check test list for Analytics vs Web SDK is not enumerated in the docs; and the exact byte threshold that switches g to -g and the precise 500ms s.tl delay across browsers are documented but version-sensitive.
Changelog
- — Initial version, verified against official documentation.