Tracking lab

Outbound links

One external link sent four ways, to see which events survive leaving the page.

Lane C4 · crm-events-beacon (browser)Lane B · Server-side eventsLane C3 · dataLayer events

Try it

  1. 1. sendBeacon to this site's server

    crm-beacon.js hands the event to the browser with navigator.sendBeacon. /crm-beacon identifies you from the site's cookie and publishes a server event.

  2. 2. <a ping>

    No script: the browser itself posts to /crm-beacon as it follows the link. Off by default in Firefox.

    Visit example.com

    Arrives in Chrome, Edge and Safari.

  3. 3. dataLayer push (control)

    The usual route: a dataLayer push that GTM's bridge sends with Klaviyo.js, which uses XMLHttpRequest.

    Visit example.com
    Clicked Outbound Link· dataLayerLane C3 · dataLayer events

    Often lost: the request is cancelled as the page unloads.

  4. 4. dataLayer push, new tab

    The same push, but the link opens in a new tab, so this page stays and the request finishes.

    Visit example.com (new tab)
    Clicked Outbound Link· dataLayerLane C3 · dataLayer events

    Should arrive, at the cost of opening a tab.

Check the endpoint without leaving

Clicked Outbound Link· serverLane B · Server-side events

Uses fetch, so the reply is visible (a real beacon's reply is ignored by the browser).

Your clicks in this tab

MethodClicksIn Klaviyo
beacon0count on the profile
ping0count on the profile
bridge0count on the profile
bridge-new-tab0count on the profile

On the profile, filter to Clicked Outbound Link and count by Method. Any shortfall against these numbers is events lost as the page left.

How it works

A link to another site unloads this page, and the browser cancels ordinary requests as it goes. Each link goes to the same place but sends its Clicked Outbound Link event a different way, tagged with Method.

  • Rows 1 and 2 are lane C4: the browser hands the event to this site's /crm-beacon, which identifies you from the shop's persona cookie and publishes through crm-events-node (lane B), marked untrusted.
  • Rows 3 and 4 are lane C3: a dataLayer push the GTM bridge sends with Klaviyo.js.

Click each a few times (use Back to return), then compare the tally with what reached the profile in Klaviyo.

Before you click

Identify in the shop first (top strip). Anonymous, /crm-beacon skips events; for rows 3 and 4, Klaviyo.js needs to know you too.

Reading the results

In the console, row 1 logs beacon · handed over, row 2 ping queued, rows 3 and 4 pushed (plus an observed Klaviyo.js call if the bridge got that far). Entries marked trust: browser arrive in Klaviyo with PocTrust: browser.

Every row carries ?via= in DestinationURL.

Full console