pixellint

Adobe Analytics sendBeacon still needs a report suite

Short answer

AppMeasurement will sendBeacon when the browser allows it, and fall back to a 1x1 GET. The wire format is still a long query with the report suite in the path. A missing s.events on purchase is a revenue hole.

Validate this snippet Open the rulepack

Host and path are the report suite

Adobe Analytics collection beacons live on omtrdc.net and 2o7.net, whether AppMeasurement used sendBeacon or an image GET. The report suite rides on the path after /b/ss/. Pixellint reads report_suite from that segment: vendor.adobe-analytics.param.report_suite.missing. A comma-separated list of suites is legal. An empty segment is not. This is not google-analytics.com/mp/collect and not /g/collect.

mid is the Experience Cloud ID that ties the hit to a visitor. When present, it must not be empty: vendor.adobe-analytics.param.mid.empty. A hit with no mid still collects; it just does not join the people you paid Adobe to stitch. AppMeasurement sets it when VisitorAPI ran. A handwritten image pixel often forgets it.

https://example.sc.omtrdc.net/b/ss/reportSuite/1/JS-2.22.0/s123456?mid=XXXX&pageName=Thank%20you&events=purchase&v1=T12345&g=https%3A%2F%2Fshop.example%2Fthank-you

sendBeacon versus the image beacon

Adobe Analytics sendBeacon is AppMeasurement posting the same /b/ss/{report_suite}/ hit with navigator.sendBeacon when the browser supports it. On unload, that POST outlives the page. When sendBeacon is blocked (CSP connect-src, older webviews), AppMeasurement falls back to the image GET. Pixellint sees the URL either way. The report suite still has to be in the path. A sendBeacon to your own /analytics proxy that never hits omtrdc.net or 2o7.net is not an Adobe hit.

The 1x1 is still a legal wire format. JS still builds it. Do not hand-edit production query strings to fix an eVar; fix the s object and let AppMeasurement serialize. s.t() is a page view. s.tl() is a link / custom link that does not increment page view. Calling s.t() on every button is how a single thank-you inflates pages. Calling only s.tl() on route change is how a SPA never records a page. Query length still applies. Browsers truncate. A novel of eVars plus a product list is how you mint a silent 414.

pixellint validate url 'https://example.sc.omtrdc.net/b/ss/reportSuite/1/JS-2.22.0/s1?mid=XXXX&pageName=Home' --rulepack vendor/adobe-analytics

SPA route changes need a new pageName

A single s.t() on DOMContentLoaded is a one-page site to Adobe. Fire a page view on route change with the new pageName (and a new URL in g / page URL). The same history problem as gtag config on a SPA. If finance lives in Workspace and only sees the first path, this is why.

Virtual page views still need the report suite in the path. A fetch to your own /analytics proxy that never hits omtrdc.net is not an Adobe hit. Network filter: omtrdc.net or 2o7.net.

Campaigns are not utm_source

cid / Adobe campaign tracking is not utm_source. Keep both if finance lives in GA4 and media lives in Adobe, and write the map. s.campaign, campaign variables, and eVar allocation (most recent versus original) will not match GA4 default session attribution. Arguing about the screenshot without the map is a meeting, not a pixel bug.

Purchase still needs s.events with a purchase event and a value in the documented currency slot. A missing s.events on thank-you is a revenue hole. Adobe will happily store a page view named Thank you.

This pack is the beacon, not AA processing

vendor/adobe-analytics checks host, /b/ss/{report_suite}/, and mid when present. It does not compile your processing rules, classification tables, or Attribution IQ. A valid beacon can still vanish after a processing rule drops internal IP. Staging hits on the production report suite are how QA trains Workspace. Use a staging suite.

Pixellint is not affiliated with Adobe. The pack cites Experience League tracking-server and report-suite docs. If you also send Web SDK / AEP, that is a different edge. Do not assume this pack covers alloy.js.

Check the artifact

Paste the pixel URL or JSON body into the playground. Same engine as pixellint validate. Artifacts you test may be stored; see privacy.