Most Adobe Launch implementations I audit do not fail because of the tool. They fail because nobody wrote down what should be collected, the data layer arrives after the rules fire, and the person who built the property left with the only copy of the naming logic. Six months later, nobody trusts the numbers in Adobe Analytics, and every new tag request turns into archaeology.
Adobe Launch is now called Tags in Adobe Experience Platform (Adobe’s own docs say “formerly known as Adobe Experience Platform Launch”), and it lives under Data Collection > Tags. The building blocks have not changed much: properties, extensions, data elements, rules, libraries, environments. What changed is the context around them: the Web SDK and the Edge Network, datastreams, event forwarding, and stricter publishing permissions. This guide is the checklist I use, followed by the details behind each line.
The Adobe Launch (Tags) implementation checklist
Before you start
- Write the tracking plan: business questions, events, variables, owners.
- Decide the library: Adobe Analytics extension (AppMeasurement) or Web SDK extension (Edge Network).
- If Web SDK: create the schema and the datastream before touching Tags.
- Check access: who gets Develop, Approve, Publish on the property.
- Agree on naming conventions for rules, data elements and libraries.
Property and environments
- One property per group of sites that share templates and the same data needs.
- List every domain in the property settings.
- Decide on “Run rule components in sequence” and “Return an empty string for missing data elements” on day one.
- Install the production embed code in production only. Development and staging codes stay on non-production hosts.
- Pick asynchronous or synchronous loading on purpose, then test with that exact mode.
Data layer and data elements
- A data layer populated by the site, not scraped from the DOM.
- One data element per business variable, with a default value and a clear storage duration.
- Custom code data elements always end with a
return.
Rules
- Rules triggered by data layer events or Direct Call events, not by “Library Loaded” with a hope that data is ready.
- Rule order kept simple (1 to 100, default 50).
- One rule per business event, several actions per rule when needed.
Adobe Analytics or Web SDK
- Analytics extension: report suites set per environment, Set Variables then Send Beacon (s.t() for page views, s.tl() for links), Clear Variables after.
- Web SDK extension: datastream per environment, Send event action, data object or XDM chosen with Customer Journey Analytics in mind.
Publishing and QA
- Every change goes through a library: Development, Submitted, Approved, Published.
- Test with Adobe Experience Platform Debugger on the development build before submitting.
- For Web SDK, follow the hit beyond the browser with Edge Trace / Assurance.
- Verify the data in reports, not only in the network tab.
Governance
- Separate rights: the person who builds is not always the person who publishes.
- Notes on every non-obvious rule and data element.
- A living document of the data layer, rules and extensions.
- Know how to republish a previous library if a release goes wrong.
Before you start: plan first, click later
The tracking plan is the contract: for each event, the business question, the user action, the variables, and who pushes it into the data layer. If you cannot fill that table, you are not ready to open Tags.
The second decision is the library. Adobe’s Analytics implementation guide describes two families. The Adobe Analytics extension loads AppMeasurement and sends hits straight to Analytics. The Adobe Experience Platform Web SDK extension “sends data to the Adobe Experience Cloud from web properties, through the Adobe Experience Platform Edge Network”. With the Web SDK, a datastream holds the server-side configuration: which Adobe services (Analytics, Target, Experience Platform) receive the data. Adobe describes the Web SDK extension as “typically the recommended path for new Web SDK implementations”. Starting from scratch, evaluate it first. With a large AppMeasurement setup that works, migration is a project of its own.
Third: permissions. Tags has three property rights that matter for publishing: Develop (create libraries and build to development), Approve (build to staging and approve) and Publish (push an approved library to production). Adobe is explicit: “these rights are not inclusive”. Giving external consultants Develop only is a healthy setup, and the example in Adobe’s own permissions guide.
Property and environments
A property is the container for rules, data elements, extensions, environments and libraries. A web property can be deployed on several domains, so the real question is how to group sites. Adobe’s guidance: if the HTML templates are the same and the data you collect is similar, one property can manage several sites. If teams, regions or data needs are very different, split them. One thing the original version of this article got wrong: do not name a property “MySite – Production”. Production is an environment inside the property, not a property.
When you create a web property, two advanced settings deserve a decision upfront, because changing them later changes runtime behaviour:
- Run rule components in sequence: conditions and actions wait for the previous one to finish. Each condition and action then gets a timeout (2,000 ms by default), and a failing or timed-out action removes the following actions of that rule from the queue.
- Return an empty string for missing data elements: a reference to a data element that does not exist returns an empty string instead of
undefined.
On creation, Tags adds a default host, three environments (Development, Staging, Production) and the default extensions. You can add development environments for parallel work. Each environment holds one library build at a time.
Embed codes are where I find the most damage. Each environment has its own embed code. Adobe warns that the production embed code supports browser caching while development and staging codes do not, so “you should not use development or staging embed codes in high-traffic or production contexts”. The loading mode matters too. Asynchronous deployment uses one script tag in the <head>. Synchronous deployment uses two: one in the <head> and one just before </body>. And if you switch hosts or change the archive setting, the embed code changes and must be updated in the HTML by hand.
Data layer and data elements
Data elements are the variables of Tags. You reference them as %Data Element Name% in rule fields, and with _satellite.getVar() in custom code. Each one has a few settings that are easy to skip and expensive to forget:
- Default value: Adobe suggests a value such as “none” or “n/a” so that empty values look the same in reports.
- Force lowercase and clean text (remove line breaks and extra spaces).
- Storage duration: None, Page view, Session (session storage, until the tab is closed) or Visitor (local storage, no end date).
For the data layer itself, Adobe ships the Adobe Client Data Layer extension. By default it creates an array called adobeDataLayer, and its event types let a rule listen to all data changes, all events, or one specific event. The site pushes, Tags listens:
// Page code, pushed by the site once the data is known
window.adobeDataLayer = window.adobeDataLayer || [];
window.adobeDataLayer.push({
event: "product-view",
product: {
id: "SKU-123",
category: "skincare"
}
});
For a custom code data element, the editor needs a return. Without it, the data element resolves to undefined, then Tags falls back to a stored value, then to the default value. That fallback chain explains many “why does this variable keep last page’s value” tickets.
// Custom code data element: "Site Section"
var parts = window.location.pathname.split("/");
return parts[1] || "home"; // without this return, the value is undefined
Rules
A rule is “if events and conditions, then actions”. Several events in one rule are joined with OR. Several conditions are joined with AND. An exception is a NOT condition. Actions run in the order you set, and one rule can trigger several tools at once, so there is no need for a separate rule per vendor.
The timing trap is the classic one. Adobe’s asynchronous deployment guide says that a rule using Library Loaded “might execute before your data layer is fully loaded”, and recommends Custom Event or Direct Call events triggered by page code once the data layer is ready. It also says that Page Bottom brings little value when the library loads asynchronously, and that page code should no longer call _satellite.pageBottom(). A Direct Call rule listens for an identifier that you fire from the page:
// Fired by the site when a form is really submitted (after validation)
if (window._satellite) {
_satellite.track("form-submit-success");
}
Rule order: every rule has an order number, 50 by default, and lower numbers run first. Adobe recommends staying between 1 and 100 and keeping the scheme simple. Also remember that rules start in order but do not always finish in order: if rule A does something asynchronous, rule B can start before A is done.
Performance detail: actions of Library Loaded and Page Top rules are bundled into the main library; other actions load later, only when needed. Everything on Library Loaded means a heavier main file.
Adobe Analytics extension or Web SDK
With the Adobe Analytics extension
In the extension configuration, choose how the library is managed (“Manage the library for me” is the simplest) and set report suites for Development, Staging and Production separately, so test traffic does not land in production data. In rules, the extension offers three actions: Set Variables, Send Beacon and Clear Variables. Set Variables does not send anything; Adobe states it plainly: “You cannot send the beacon with the set variables action”. Send Beacon lets you pick s.t() (counts a page view) or s.tl() (does not). In my experience, a Clear Variables action after each link beacon is what stops values leaking into the next hit.
With the Web SDK extension
The main action is Send event, which “sends event data to the Edge Network”. The datastream decides where the data goes next. For Adobe Analytics, the Edge Network accepts an XDM object, a data object or context data. Adobe’s advice matters if Customer Journey Analytics is on the roadmap: it “advises against using the Adobe Analytics schema field group” and recommends your own schema plus datastream mapping, or the data object, so you are not locked into props and eVars. If you migrate from AppMeasurement, the data object is the smoother path.
Event forwarding
Event forwarding reuses rules, data elements and extensions, but runs on Adobe’s servers: it sends events received by the Edge Network to other endpoints. Data elements use {{name}} instead of %name%, and actions always run in sequence. It is a paid feature (Real-Time CDP Connections, Prime or Ultimate): check your contract first.
Publishing: libraries, states and rights
Nothing reaches the site until it is in a library and built. A library holds the changes (rules, data elements, extension configurations), and at build time those changes are combined with everything already submitted, approved or published upstream. A library moves through four states: Development, Submitted, Approved, Published. Development maps to the development environment, Submitted and Approved to staging, Published to production.
Three rules from Adobe’s docs save time:
- A library is approved or rejected as a whole. You cannot approve half of it.
- Data elements depend on extensions, and rules depend on both. If a dependency is missing from the library, the build fails.
- To remove something, you disable it and publish the disabled state. Deleting a library does not remove its build from the environment.
The Active Library setting lets you save rules, data elements and extensions straight into the library you are working on, and build from there. It makes iteration much faster in development.
How to QA a Tags implementation
Adobe Experience Platform Debugger
The Debugger is a Chrome extension that shows which tag property, environment and build run on a page, and which report suites are active. Three features I use on every audit:
- Replace embed codes: in the Debugger, open the Launch section, then Configuration, and replace the page’s embed code with your development one. It only runs locally (“does not change the deployed embed code on your site”), which is perfect when there is no staging site.
- Logs: shows tag and Web SDK messages; “Show Code” displays the condition code that decides whether a rule fires.
- Web SDK console logging: toggled from the Web SDK screen. The Web SDK extension has no debug option of its own; you can also add
?alloy_debug=trueto a URL to enable it for your browser session only.
Assurance and Edge Trace
The browser only shows what leaves the page. With the Web SDK, the real question is what the Edge Network sent to Analytics or Platform. Adobe’s Web SDK tutorial shows the path: sign in to the Debugger, open Logs, select the Edge tab, then Connect. This enables Edge Trace, which starts an Assurance session in the background. Assurance itself was built for mobile apps with the Mobile SDK, where it is the main validation tool.
Then check the reports
A green network request is not a correct report. After release, compare a few days of real data with expectations: page views per page type, conversions versus the back office, empty values on key variables.
Pitfalls I see most often
- Development or staging embed codes left in production. No browser caching, and the site runs whatever is in the dev library.
- Library Loaded rules reading a data layer that is not there yet. Missing values that look random in reports.
- Switching synchronous to asynchronous without retesting. Adobe warns that rule behaviour can change between the two modes.
- Set Variables without Send Beacon, or Send Beacon without Clear Variables on link tracking.
- One person with all rights and no review. Fast at first, then nobody knows what went live and why.
- Custom code everywhere. A 200-line JavaScript rule belongs in the data layer or in a private extension (an
extension.jsonmanifest, CommonJS library modules, views in an iframe).
Conclusion
Adobe Launch became Tags, but a good implementation still rests on three things: a data layer the site owns, rules that wait for that data, and a publishing flow where someone else looks before it goes live. Run the checklist before each release. If your property fails several lines, start with embed codes and rule timing: that is where most bad data comes from.
Related reading
- Understanding Adobe Analytics: Props, eVars, and Events
- Using Annotations in Adobe Analytics: A Key to Understanding Your Data
- Understanding Datasets, Connections, and Data Views in Adobe Customer Journey Analytics
- Full Guide: What Adobe APIs Are Available and What They Do
Sources
- Adobe Experience League: Tags overview
- Adobe Experience League: Companies and properties
- Adobe Experience League: User permissions for tags
- Adobe Experience League: Environments
- Adobe Experience League: Libraries
- Adobe Experience League: Publishing flow
- Adobe Experience League: Data elements
- Adobe Experience League: Rules
- Adobe Experience League: Republish a library
- Adobe Experience League: Asynchronous deployment
- Adobe Experience League: Core extension overview
- Adobe Experience League: Adobe Client Data Layer extension
- Adobe Experience League: Adobe Analytics extension overview
- Adobe Experience League: Web SDK tag extension overview
- Adobe Experience League: Web SDK extension action types
- Adobe Experience League: Datastreams overview
- Adobe Experience League: Implement Adobe Analytics using tags
- Adobe Experience League: Implement Adobe Analytics with the Edge Network
- Adobe Experience League: Analytics via the Web SDK tag extension
- Adobe Experience League: Event forwarding overview
- Adobe Experience League: Experience Platform Debugger
- Adobe Experience League: Test embed codes with the Debugger
- Adobe Experience League: Debugger Logs tab
- Adobe Experience League: Debugging the Web SDK
- Adobe Experience League: Validate Web SDK with Assurance
- Adobe Experience League: Assurance overview
- Adobe Experience League: Extension development overview