Countly Cross-Domain Tracking | Blue Frog Docs

Countly Cross-Domain Tracking

Track users across multiple domains with Countly analytics.

Cross-Domain Overview

Track user journeys that span multiple domains or subdomains while maintaining session continuity.

 


 

Same Device ID Approach

Shared Device ID

Use the same device ID across domains:

// Domain A - Get device ID
const deviceId = Countly.get_device_id();
const link = `https://domain-b.com?cly_device_id=${deviceId}`;
// Domain B - Read and use device ID
const urlParams = new URLSearchParams(window.location.search);
const deviceId = urlParams.get('cly_device_id');

Countly.init({
  app_key: 'YOUR_APP_KEY',
  url: 'https://your-server.com',
  device_id: deviceId || undefined  // Use passed ID or generate new
});

Automatically append device ID to links:

function decorateLinks(selector) {
  document.querySelectorAll(selector).forEach(link => {
    link.addEventListener('click', function(e) {
      const deviceId = Countly.get_device_id();
      const url = new URL(this.href);
      url.searchParams.set('cly_device_id', deviceId);
      this.href = url.toString();
    });
  });
}

// Apply to cross-domain links
decorateLinks('a[href*="other-domain.com"]');

 


 

Subdomain Tracking

For subdomains, configure cookie domain:

Countly.init({
  app_key: 'YOUR_APP_KEY',
  url: 'https://your-server.com',
  storage: 'cookie',
  cookie_domain: '.example.com'  // Note leading dot
});

This allows:

to share the same device ID.

 


 

Multi-App Tracking

Same Countly Server

Track multiple apps with separate app keys:

// Main website
Countly.init({
  app_key: 'WEBSITE_APP_KEY',
  url: 'https://your-server.com',
  device_id: sharedDeviceId
});

// Separate app (e.g., documentation)
// Use same device_id for cross-app tracking

Linking User Across Apps

// When user logs in, sync device ID
function onUserLogin(userId) {
  // Use user ID as device ID for consistency
  Countly.change_id(userId, true);  // true = merge data
}

 


 

Form Handling

Cross-Domain Forms

document.getElementById('cross-domain-form').addEventListener('submit', function(e) {
  const deviceId = Countly.get_device_id();

  // Add hidden field
  const input = document.createElement('input');
  input.type = 'hidden';
  input.name = 'cly_device_id';
  input.value = deviceId;
  this.appendChild(input);
});

 


 

Verification

Testing Cross-Domain Tracking

  1. Visit Domain A
  2. Note device ID: Countly.get_device_id()
  3. Click link to Domain B
  4. Verify same device ID
  5. Check Countly dashboard for unified session

Debugging

// Enable debug mode
Countly.debug = true;

// Log device ID
console.log('Device ID:', Countly.get_device_id());

 


 

Considerations

Privacy

Technical

  • URL parameters may be logged by servers
  • Consider POST instead of GET for sensitive data
  • Clean URLs after reading device ID
// SYS.FOOTER