Key takeaways
- The AEP Web SDK (alloy.js) is Adobe's modern implementation method — one tag replaces AppMeasurement, AT.js, and DIL
- Data is structured using XDM (Experience Data Model) schemas, not legacy eVars and props — though Analytics mapping handles the translation
- The Edge Network routes a single request to multiple Adobe products simultaneously, reducing page load impact
- Datastream configuration in AEP controls which services receive data — Analytics, Target, Audience Manager, AEP itself
- Migration from AppMeasurement to Web SDK requires careful event parity validation — do not cut over without a parallel tracking period
In this article
- Why Web SDK? The case for migrating
- How the Web SDK architecture works
- Understanding XDM and its role in Analytics
- Prerequisites before implementation
- Step 1 — Configure your Datastream
- Step 2 — Design your XDM schema
- Step 3 — Install the Web SDK extension in Launch
- Step 4 — Create XDM data elements
- Step 5 — Create page view and event rules
- Migrating from AppMeasurement — what to know
- Validation and debugging
- Common mistakes
The AEP Web SDK — also known as alloy.js — is Adobe's modern implementation method for the entire Experience Cloud. One tag, one network request, multiple Adobe products. If you are still running AppMeasurement, you are running on infrastructure that Adobe has effectively deprecated for new implementations.
I have led several AppMeasurement to Web SDK migrations at enterprise scale. This guide covers the full implementation — from datastream setup to XDM schema design to Adobe Launch configuration — along with the migration considerations that most guides skip.
Why Web SDK? The case for migrating
The business case for migrating to the AEP Web SDK is not just about keeping up with Adobe's roadmap. There are concrete technical advantages:
| Capability | AppMeasurement | AEP Web SDK |
|---|---|---|
| Network requests per page | One per product (AA + AT + AAM = 3+ requests) | Single request to Edge Network for all products |
| Server-side personalisation | Not supported | Supported via Edge decisioning |
| Real-time CDP activation | Requires separate AEP SDK | Native — same tag feeds RTCDP |
| First-party data collection | Limited | Full first-party via Edge Network |
| Cookie handling | Third-party cookies (s_vi) | First-party FPID — more resilient to ITP |
| Future Adobe features | Limited — legacy path | All new features ship here first |
Adobe has not announced an end-of-life date for AppMeasurement, but all new Experience Cloud capabilities are being built exclusively on the Web SDK path. Starting any new implementation on AppMeasurement today means planning a migration in the near future.
How the Web SDK architecture works
Understanding the architecture before touching any configuration prevents a category of mistakes that are very expensive to fix later.
Understanding XDM and its role in Analytics
XDM — Experience Data Model — is a standardized JSON schema system that defines how data is structured when sent through the Web SDK. Instead of assigning values directly to eVar1 or prop5, you send structured objects that map to predefined field groups.
Adobe Analytics still uses eVars and props internally. The translation happens in two ways:
- Automatic mapping — certain XDM fields (like web.webPageDetails.name) automatically populate standard Analytics dimensions (Page Name)
- Manual mapping — custom XDM fields in the _experience.analytics namespace map directly to specific eVars and props, configured in the Analytics report suite settings
Use the _experience.analytics.customDimensions.eVars and props field groups for your custom variables. This gives you direct eVar/prop mapping without ambiguity and keeps your XDM schema organized by Analytics variable rather than by generic field name.
Prerequisites before implementation
- An AEP sandbox (production or development) with Data Collection permissions
- An Adobe Analytics report suite — separate ones for development and production
- Adobe Launch property with appropriate permissions
- A defined XDM schema — do not start implementation without this
- A measurement plan mapping your business KPIs to XDM fields and Analytics variables
Your XDM schema is your data contract. Changes to a published schema require versioning and can break downstream consumers. Design it thoroughly before publishing — this is the most important pre-implementation decision you will make.
Step 1 — Configure your Datastream
The Datastream is the server-side configuration that tells the Edge Network where to route your data. Think of it as the routing table for your Web SDK implementation.
Create a new Datastream in AEP
Navigate to Data Collection → Datastreams in experience.adobe.com. Create one for Development and one for Production. Never share a single Datastream across environments.
Enable Adobe Analytics service
Click Add Service → Adobe Analytics. Enter your Report Suite ID. This is what connects your Web SDK events to Adobe Analytics. Use your development report suite here.
Enable other services as needed
If you are also using Adobe Target, AEP, or Audience Manager, enable those services here. This is the power of the Web SDK — one tag feeds all of them from a single Datastream configuration.
Note your Datastream ID
You will need this when configuring the Web SDK extension in Adobe Launch. Copy it now.
Step 2 — Design your XDM schema
In AEP, navigate to Schemas → Create Schema → XDM ExperienceEvent. This is the schema type for web behavioral data. Add the following field groups as a starting point:
- AEP Web SDK ExperienceEvent — required, adds web interaction fields
- Web Details — page URL, referrer, page name
- Environment Details — browser, device, operating system
- Adobe Analytics ExperienceEvent Full Extension — adds the _experience.analytics namespace for direct eVar/prop mapping
{
xdm: {
// Standard web fields — auto-mapped to Analytics
web: {
webPageDetails: {
name: "Home:Hero", // → Page Name
URL: window.location.href,
isHomePage: true
},
webReferrer: {
URL: document.referrer
}
},
// Custom Analytics variables via _experience namespace
_experience: {
analytics: {
customDimensions: {
eVars: {
eVar1: "Home:Hero", // Page Name
eVar2: "homepage", // Page Type
eVar3: "marketing", // Page Section
eVar10: "logged-out" // Login Status
},
props: {
prop1: "Home:Hero"
}
},
event1to100: {
event1: { value: 1 } // Page View event
}
}
}
}
}
Step 3 — Install the Web SDK extension in Adobe Launch
In your Launch property, go to Extensions → Catalog → search for "Adobe Experience Platform Web SDK". Install it and configure:
- Instance name: alloy (keep the default unless you have a specific reason to change it)
- Datastream ID: paste the ID from Step 1. Set up environment overrides for dev, staging, and production using their respective Datastream IDs
- Identity namespace: configure ECID handling here — leave defaults unless you are implementing a custom identity strategy
- Privacy: configure consent defaults — "in" for all, "pending" if you have a consent management platform, or "out" if you are in a strict consent regime
Use the Datastream ID override feature to point your Development Launch environment to your Development Datastream and your Production environment to your Production Datastream. This prevents test data from reaching your production report suite without needing separate Launch properties.
Step 4 — Create XDM data elements
In Launch, create a data element of type "XDM Object". This is where you build the XDM payload that will be sent with each event.
Name: XDM - Page View Type: XDM Object Schema: [your XDM schema] // Map each field to a data element or value: web.webPageDetails.name = %DL - Page Name% web.webPageDetails.URL = %Page URL% (built-in variable) _experience.analytics .customDimensions.eVars .eVar1 = %DL - Page Name% .eVar2 = %DL - Page Type% .eVar3 = %DL - Page Section% .eVar10 = %DL - Login Status%
Step 5 — Create page view and event rules
The Web SDK uses
sendEventinstead of
s.t()and
s.tl(). The distinction between page views and link events is handled differently:
Your page load rule in Launch:
Name: Page Load — Send Web SDK Event
Event: Core → Library Loaded (Page Top)
Order: 50
Actions:
1. Adobe Experience Platform Web SDK → Send Event
Type: web.webpagedetails.pageViews
XDM Data: %XDM - Page View%
An interaction tracking rule:
Name: Click — CTA Button
Event: Core → Click
Element: .btn-primary
Order: 50
Actions:
1. Adobe Experience Platform Web SDK → Send Event
Type: web.webInteraction.linkClicks
XDM Data: %XDM - CTA Click%
Migrating from AppMeasurement — what to know
If you are migrating an existing AppMeasurement implementation rather than starting fresh, the migration requires careful planning. The most important principle: run both implementations in parallel before cutting over.
Audit your existing AppMeasurement implementation
Document every eVar, prop, event, and plugin currently in use. Create a migration mapping: old variable → new XDM field. Every variable needs to be accounted for before you start.
Run parallel tracking for at least 4 weeks
Send data to separate report suites — one via AppMeasurement, one via Web SDK — and validate that key metrics match. Expect some variance due to timing differences and cookie changes. Document what is acceptable.
Validate event parity
Every custom event tracked in AppMeasurement must be tracked equivalently via Web SDK before cutover. Use the AEP Debugger and Adobe Analytics DebugView to compare event payloads side by side.
Communicate the cutover to stakeholders
Historical data in your Analytics reports will show a transition point when the implementation method changes. Prepare your stakeholders — especially finance and product — for potential metric shifts due to the new first-party cookie (FPID) replacing the legacy s_vi.
The FPID cookie (first-party device ID) introduced by the Web SDK counts visitors differently than the legacy s_vi cookie used by AppMeasurement. Expect a difference in Unique Visitors counts during and after migration. This is expected behaviour, not a bug — brief your stakeholders before the cutover date.
Validation and debugging
Use these tools to validate your Web SDK implementation before promoting to production:
- AEP Debugger Chrome extension — inspect every sendEvent call, view the XDM payload, and see the Edge Network response in real time
- Network tab (Chrome DevTools) — filter by "adobedc.net" to see raw Edge Network requests and responses
- Adobe Analytics DebugView — validates that events are reaching your report suite with correct variable values
- AEP Assurance (Griffon) — enterprise-grade debugging tool that captures every SDK event in a session for detailed inspection
Common mistakes
- Publishing XDM schema changes without versioning. Breaking changes to a schema affect all consumers. Always create a new schema version for breaking changes.
- Using the same Datastream across environments. Development events will appear in your production Analytics reports. Always use environment-specific Datastreams.
- Skipping the parallel tracking period. Every migration I have seen that skipped parallel tracking had metric discrepancies discovered after the cutover — when they were much harder to explain and fix.
- Not accounting for FPID changes. The visitor count methodology change is the most common surprise in Web SDK migrations. Always brief stakeholders before cutover.
- Mixing Web SDK and AppMeasurement on the same page. Both SDKs will fire, sending duplicate data. Remove AppMeasurement completely once Web SDK is validated.