ClickTag implementation for DV360 (Enabler SDK)

Google Display and Video 360 serves rich media creatives through the Enabler SDK. Unlike the standard var clickTag pattern used by CM360, DV360 rich media creatives rely on the Enabler library for initialisation, visibility tracking, and exit handling. This guide covers the full implementation, common pitfalls, and how Adloom detects Enabler-based creatives.

How DV360 Enabler SDK works

The Enabler SDK is a JavaScript library hosted on Google's CDN (s0.2mdn.net). It manages the lifecycle of your creative: initialisation, visibility, polite loading, and click tracking. Instead of a simple window.open(clickTag), you call Enabler.exit() to handle clicks.

The Enabler SDK handles all tracking automatically: impressions, clicks, and custom events are reported back to DV360 without any additional code on your part.

Standard implementation

Here is the recommended pattern for a DV360 Enabler-based creative:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="ad.size" content="width=300,height=250">
  <script src="https://s0.2mdn.net/ads/studio/Enabler.js"></script>
  <script>
    // Wait for Enabler to initialise
    if (Enabler.isInitialized()) {
      init();
    } else {
      Enabler.addEventListener(
        studio.events.StudioEvent.INIT, init
      );
    }

    function init() {
      // Wait for the ad to become visible
      if (Enabler.isVisible()) {
        start();
      } else {
        Enabler.addEventListener(
          studio.events.StudioEvent.VISIBLE, start
        );
      }
    }

    function start() {
      // Start animations here
    }
  </script>
</head>
<body>
  <div id="banner" onclick="Enabler.exit('Click Through', clickTag)">
    <!-- ad content -->
  </div>
</body>
</html>

Key points: the Enabler SDK is loaded from Google's CDN, the creative waits for both isInitialized() and isVisible() before starting, and clicks are handled via Enabler.exit().

Enabler lifecycle

1.
Load SDK: include the Enabler.js script from s0.2mdn.net in your HTML head.
2.
Wait for INIT: check Enabler.isInitialized() or listen for StudioEvent.INIT. Do not call any Enabler methods before this.
3.
Wait for VISIBLE: check Enabler.isVisible() or listen for StudioEvent.VISIBLE. Start animations only after the ad is visible (polite loading).
4.
Handle clicks: use Enabler.exit('exitName', url) or Enabler.exitOverride('exitName', url) in your click handler. Exit names are configured in the Studio UI.

Common errors to avoid

Missing Enabler.js script

The SDK must be loaded from Google's CDN. A missing or incorrect script URL will cause all Enabler calls to fail silently.

// WRONG: local file or wrong URL
<script src="Enabler.js"></script>
<script src="https://cdn.example.com/Enabler.js"></script>

// CORRECT
<script src="https://s0.2mdn.net/ads/studio/Enabler.js"></script>

Skipping the initialisation check

Calling Enabler methods before the SDK is initialised causes errors. Always check Enabler.isInitialized() first.

// WRONG: calling exit without init check
Enabler.exit('Click Through', clickTag);

// CORRECT: always wait for init
if (Enabler.isInitialized()) {
  init();
} else {
  Enabler.addEventListener(
    studio.events.StudioEvent.INIT, init
  );
}

Starting animations before VISIBLE

DV360 requires polite loading: animations must not start until the ad is visible to the user. Starting before isVisible() can cause the creative to be rejected.

Using window.open instead of Enabler.exit

Using window.open(clickTag) bypasses DV360 tracking. Always use Enabler.exit() so clicks are properly tracked and reported.

CM360 compatibility

Since 2024, CM360 and DV360 have unified creative specs. A standard var clickTag creative (CM360 format) also works on DV360 for basic display campaigns. The Enabler SDK is only needed for rich media features like polite loading, expandables, and multi-exit tracking.

If your creative is a simple display banner, you can use the standard CM360 clickTag format and it will work on both platforms. Use the Enabler SDK only when you need rich media features.

How Adloom detects DV360 creatives

Adloom scans your creative's HTML and JavaScript for Enabler SDK patterns. It looks for several indicators:

// Patterns Adloom detects:
Enabler.exit(...)
Enabler.exitOverride(...)
Enabler.isInitialized()
Enabler.isVisible()
studio.events.StudioEvent
2mdn.net/ads/studio/Enabler.js

If any of these patterns are found, Adloom identifies the creative as a DV360 Enabler implementation and validates the full lifecycle: SDK loading, initialisation check, visibility check, and exit call.

Auto-fix limitations

Unlike simpler clickTag formats, the Enabler SDK implementation is complex and tightly coupled to your creative's animation logic. Adloom does not auto-inject the Enabler SDK because doing so requires restructuring the entire creative lifecycle (init, visible, start phases).

If your creative needs to target DV360 with rich media features, Adloom will flag the specific issues found (missing SDK, missing init check, missing exit call) so you can fix them manually or rebuild the creative using Google Web Designer.

How Adloom helps

Detect Enabler SDK usage

Upload your creative and Adloom instantly identifies whether it uses the Enabler SDK, validates the lifecycle (init, visible, exit), and reports any missing steps.

Cross-platform compatibility check

Adloom shows whether your DV360 creative is also compatible with other platforms, or whether a simpler var clickTag version could cover both CM360 and DV360.

Actionable diagnostics

If the Enabler implementation is incomplete, Adloom tells you exactly what's missing: SDK script, init check, visibility check, or exit call, so you know what to fix.

Next steps

in the of your HTML document."},{"@type":"HowToStep","position":2,"name":"Wait for initialisation","text":"Check Enabler.isInitialized() or listen for studio.events.StudioEvent.INIT before making any Enabler calls."},{"@type":"HowToStep","position":3,"name":"Wait for visibility","text":"Check Enabler.isVisible() or listen for studio.events.StudioEvent.VISIBLE before starting animations (polite loading)."},{"@type":"HowToStep","position":4,"name":"Handle clicks with Enabler.exit","text":"Use Enabler.exit(\"Click Through\", clickTag) in your click handler instead of window.open()."},{"@type":"HowToStep","position":5,"name":"Test and validate","text":"Upload your creative to Adloom to validate the Enabler implementation. Adloom checks for SDK loading, init, visibility, and exit calls."}]}