Skip to main content

Overview

The same tag that collects website events also injects personalised content in the browser. Content is placed through on-site integrations: a CSS selector, an emplacement and trigger conditions, all configured from the Browser Extension and stored on the Workflow — no markup or deploy on your side. Installation, the window.reel API and identity resolution are covered in Website Collection — there is nothing extra to install for personalisation.
Server-rendered personalisation is usually the better default: the Server Side SDK returns content in the initial HTML, with no layout shift and no dependency on the visitor’s network.

On-site integrations

Integrations are resolved when the tracker is served, not at runtime: the script service lists every Workflow that has a web entrypoint integration for the company and embeds them, base64-encoded, into the rlvt file. The file is then cached for 60 seconds instead of the default 300, so extension changes propagate quickly. Each integration is attached on tracker boot, on load, and on every window.reel.loadZones() call — call loadZones() after client-side navigation in an SPA. The Runner is called with the identity returned by window.reel.getClientId(), falling back to rlvt_tmpId:
The response headers drive the injection: text/html responses are injected into a shadow root attached to the target element, with the .rlvt-body font size scaled to the container width so the Content stays responsive. image/png and image/gif responses are injected as an <img> wrapped in an <a> pointing at the same URL with mode=click, which is what records the click.
Content is injected into a shadow root: your page stylesheets do not apply to it, and it is not reachable with document.querySelector. Query the target element’s shadowRoot instead.

Reacting to injections

The tracker also re-attaches integrations on the abtasty_executedCampaign event when AB Tasty is present, so integrations survive campaigns that rewrite the DOM.

Debugging

The tracker skips any element carrying data-rlvt-ssr, which is how the Server Side SDK marks the content it already rendered. The attribute must sit on the element itself, not on a wrapper.