Cross-domain tracking
Cross-domain tracking
This is for:
DeveloperIn this article, we’ll show you how to set up cross-domain tracking in the Coveo Experimentation Hub by serving an iframe over HTTPS.
Intro
Cross-domain tracking is a method of tracking user journeys across domains (for example, example.com
and otherdomain.com
) and makes it possible to treat a session on separate domains as a single session from the same user.
This is illustrated in the following diagram:
Conventional cross-domain solutions use a third-party cookie to store cross-domain state. However, this is very unreliable and doesn’t work in all browsers. To get around third-party cookie limitations, syncing is done directly between the primary website domains that need to be synced, exploiting a rule that allows third-party cookies on domains that have been visited.
Using this approach, cross-domain tracking is achieved by sharing cookie information between domains, and is done by serving an iframe over HTTPS on each linked domain. In each iframe a script can then be used to transfer state and synchronize cookies so that the two separate cookies from the two domains act as one, allowing full tracking.
Once the iframes are set up, they need to be configured by the Experimentation Hub. Reach out to your CSM when you’re ready. |
Setting up iframes
Each domain that’s to be linked should have an iframe served that:
-
is
HTTPS
-
has a
P3P
header to allow cookie writing in IE, this can simply beP3P: CP="Unspecified"
-
does not contain any headers such as
X-Frame-Options: SAMEORIGIN
that will block the iframe running on different domains -
contains a global variable,
safeDomains
array, specifying all the domains that will be linked. This is very important for security reasons -
contains the Experimentation Hub script containing the syncing logic
https://static.goqubit.com/biscotti-iframe.min.js
For example, to link foo.com and bar.com domains you could serve the following html from https://www.foo.com/xdomain.html
and https://www.bar.com/xdomain.html
:
<!doctype html>
<html>
<head>
<script>
window.safeDomains = ['bar.com', 'foo.com']
</script>
<script src="//static.goqubit.com/biscotti-iframe.min.js"></script>
</head>
</html>
Caveats
-
Setting up cross-domain tracking after data collection has started, will cause some visitor Ids to be merged. This means that a visitor that has 2 visitor Ids across 2 domains will have the data dropped for one of those visitor Ids so that they can be linked
-
On the first session pageview, syncing cookies will cause experiments to run asynchronously, even if smartserve.js is synchronous. This can cause flicker for landing page experiments
Check everything is working
Step 1: Check that the iframes are being loaded
Look at the network panel, using, for example Chrome Devtools, for requests to the specified iframe URLs.
Note
If there are no requests, then there’s something wrong with the configuration. If this is the case, contact your CSM. |
Step 2: If the iframes have loaded
Navigate to a domain and take note of the context.id
sent in any of the events found in window.qubit.jolt.events
(for example, window.qubit.jolt.events[0].context.id
).
Next navigate to another domain and check that events emitted there match the context.id
.
Leading practice
If the context Ids match, you can also check that |
Example:
In our example, we have two domains, foo.com
and bar.com
.
Navigate to foo.com
and check that the context.viewNumber
increments in events in window.__qubit.jolt.events
for every pageview.
Now open a tab on bar.com
and check that context.viewNumber
continues from where it was on foo.com
.
If the context Ids match and the context.viewNumber
increments between domains then your setup is working correctly.