X Ads Cross-Domain Tracking | OpsBlu Docs

X Ads Cross-Domain Tracking

How to track users across multiple domains and subdomains with X (Twitter) Ads. Covers cross-domain configuration, cookie handling, session stitching, and.

Overview

Cross-domain tracking maintains X Pixel attribution across multiple domains in your conversion funnel.

Same Pixel Across Domains

Deploy identical X Pixel on all domains:

<!-- Same on all domains -->
<script>
!function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);
},s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='https://static.ads-twitter.com/uwt.js',
a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script');
twq('config','PIXEL_ID');
</script>
function setXFirstPartyCookie(userId) {
  const expiryDays = 90;
  const date = new Date();
  date.setTime(date.getTime() + (expiryDays * 24 * 60 * 60 * 1000));

  document.cookie = "x_user_id=" + userId + ";expires=" + date.toUTCString() + ";path=/;domain=.example.com;SameSite=Lax;Secure";
}

function getXFirstPartyCookie() {
  const name = "x_user_id=";
  const cookies = decodeURIComponent(document.cookie).split(';');

  for (let cookie of cookies) {
    cookie = cookie.trim();
    if (cookie.indexOf(name) === 0) {
      return cookie.substring(name.length);
    }
  }
  return null;
}

URL Parameter Passing

function appendXParams(url) {
  const xUserId = getXFirstPartyCookie();

  if (xUserId) {
    const separator = url.indexOf('?') > -1 ? '&' : '?';
    url += separator + 'x_uid=' + encodeURIComponent(xUserId);
  }

  return url;
}

// Apply to cross-domain links
document.querySelectorAll('a[href*="checkout.example.com"]').forEach(link => {
  link.href = appendXParams(link.href);
});

Extract on Destination Domain

// Extract X user ID from URL
function extractXUserId() {
  const urlParams = new URLSearchParams(window.location.search);
  const xUserId = urlParams.get('x_uid');

  if (xUserId) {
    setXFirstPartyCookie(xUserId);
  }
}

// Call on page load
extractXUserId();

Server-Side Handling

// Node.js example
const express = require('express');
const app = express();

app.get('/checkout', (req, res) => {
  const xUserId = req.query.x_uid || req.cookies.x_user_id;

  if (xUserId) {
    res.cookie('x_user_id', xUserId, {
      maxAge: 90 * 24 * 60 * 60 * 1000,
      domain: '.example.com',
      httpOnly: false,
      sameSite: 'lax',
      secure: true
    });
  }

  res.render('checkout');
});

Best Practices

  • Deploy same pixel ID across all domains
  • Use first-party cookies for attribution
  • Pass user ID via URL for critical flows
  • Test cross-domain tracking thoroughly
  • Monitor pixel health across all domains