Cross-Site Tracking & Fingerprinting
What This Means
Cross-site tracking occurs when user activity is tracked across multiple websites without consent, typically through third-party cookies or browser fingerprinting techniques. This creates privacy concerns and increasingly violates regulations.
Methods of cross-site tracking:
Third-party cookies:
- Advertising networks track users across sites
- Retargeting pixels follow browsing behavior
- Analytics platforms link activity across domains
- Social media widgets track non-users
Browser fingerprinting:
- Combining device characteristics to create unique ID
- Canvas fingerprinting (hidden graphics rendering)
- Font fingerprinting (installed font detection)
- WebGL fingerprinting (GPU rendering signatures)
- Audio fingerprinting (audio processing analysis)
- Screen resolution, timezone, language combinations
- Plugin and extension detection
Impact:
- GDPR violations: Requires explicit consent for cross-site tracking
- CCPA "Do Not Sell" violations
- Browser blocking (Safari ITP, Firefox ETP, Chrome Privacy Sandbox)
- User trust erosion
- Inaccurate tracking due to browser protections
- Potential legal liability
Real-world examples:
- Facebook tracking non-users across websites
- Google tracking across DoubleClick network
- Retargeting pixels following users site-to-site
- Analytics platforms linking sessions across properties
- Fingerprinting scripts identifying users without cookies
How to Diagnose
1. Third-Party Cookie Detection
Method 1: DevTools inspection
- Open DevTools > Application > Cookies
- Visit your website
- Look for cookies from domains OTHER than your site
- Common cross-site tracking cookies:
IDE(doubleclick.net - Google advertising)test_cookie(doubleclick.net)fr(facebook.com - Meta tracking)_fbp(your-site.com but set by Facebook)personalization_id(twitter.com)li_sugr(linkedin.com)lang(ads-twitter.com)
Method 2: Request inspection
- Open DevTools > Network tab
- Filter by "3rd-party requests"
- Look for:
- Domains different from your site
- Cookies being sent in request headers
- Set-Cookie headers in responses from third-party domains
2. Fingerprinting Script Detection
Check for fingerprinting libraries:
Use DevTools > Sources to search for:
fingerprintjsorFingerprintJSClientJSAugur- Canvas fingerprinting:
canvas.toDataURL - Audio fingerprinting:
AudioContext - WebGL fingerprinting:
getParameter(RENDERER)
Use browser extensions:
Privacy Badger:
- Detects cross-site tracking
- Identifies fingerprinting attempts
- Shows trackers blocked
uBlock Origin:
- Advanced mode shows third-party requests
- Identifies tracking domains
- Shows blocked fingerprinting scripts
Disconnect:
- Visualizes tracker network
- Shows cross-site tracking chains
- Categorizes trackers
3. Online Fingerprinting Tests
Test your site's fingerprinting behavior:
AmIUnique:
- Visit https://amiunique.org/
- Run fingerprinting test
- See what information can be collected
- Check fingerprinting uniqueness score
Cover Your Tracks (EFF):
- Visit https://coveryourtracks.eff.org/
- Test tracker blocking
- Check fingerprinting protection
- See advertisement tracking analysis
BrowserLeaks:
- Visit https://browserleaks.com/
- Run multiple fingerprinting tests
- See canvas, WebGL, audio fingerprints
- Check IP address leakage
4. Cross-Domain Tracking Detection
Test cross-domain scenarios:
Setup: Create test journey across domains
- Your main site: example.com
- Subdomain: shop.example.com
- Different domain: example.co.uk
Track user ID across domains:
- Clear cookies
- Visit site 1
- Note user ID in analytics
- Visit site 2
- Check if same user ID appears
Legitimate cross-domain vs. cross-site:
- Cross-domain: Tracking across YOUR properties (allowed with consent)
- Cross-site: Tracking across DIFFERENT companies' sites (problematic)
5. Safari/Firefox Tracking Prevention Check
Safari Intelligent Tracking Prevention (ITP):
- Open Safari
- Visit your site
- Check Developer > Storage > Cookies
- Third-party cookies should be blocked
- Check for fallback tracking mechanisms
Firefox Enhanced Tracking Protection:
- Open Firefox
- Visit your site
- Click shield icon in address bar
- Check "Cross-site tracking cookies" blocked
- Review blocked trackers list
General Fixes
1. Eliminate Third-Party Tracking Cookies
Migrate to first-party tracking:
Google Analytics (switch to first-party):
- Use Google Tag Manager server-side container
- Route requests through your domain
- Set cookies on your domain only
Meta Pixel (first-party approach):
Example: Server-side GTM setup:
// Browser sends event to YOUR server endpoint
fetch('https://tracking.yourdomain.com/event', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
event: 'page_view',
user_id: 'hashed_user_id',
timestamp: Date.now()
})
});
// Your server forwards to GTM Server Container
// GTM Server then sends to GA4, Meta, etc.
2. Implement First-Party Cookies Only
Cookie configuration best practices:
// Set cookies on your domain only
document.cookie = "session_id=abc123; " +
"Domain=yourdomain.com; " + // First-party only
"Path=/; " +
"Secure; " + // HTTPS only
"SameSite=Lax; " + // Prevent cross-site sending
"Max-Age=86400"; // 1 day expiration
// For strict cross-site protection:
document.cookie = "tracking_id=xyz789; " +
"SameSite=Strict; " + // Never sent cross-site
"Secure";
SameSite attribute values:
| Value | Behavior | Use Case |
|---|---|---|
Strict |
Never sent on cross-site requests | Highly secure, may break some flows |
Lax |
Sent on top-level navigation (clicking links) | Default, good balance |
None |
Sent on all cross-site requests (requires Secure) | Third-party embeds (use cautiously) |
3. Prevent Fingerprinting
Disable fingerprinting scripts:
// Remove fingerprinting libraries
// DON'T use FingerprintJS for user tracking without consent
// If fingerprinting needed for fraud prevention:
// 1. Disclose in privacy policy
// 2. Obtain consent
// 3. Use minimal fingerprinting
// 4. Don't share with third parties
Content Security Policy (CSP) to block fingerprinting:
<meta http-equiv="Content-Security-Policy"
content="script-src 'self' https://trusted-analytics.com;
frame-src 'self';
connect-src 'self' https://trusted-analytics.com;">
Permissions-Policy header:
Permissions-Policy: geolocation=(), microphone=(), camera=()
4. Configure Cross-Domain Tracking Properly
Only for YOUR properties (with user consent):
GA4 cross-domain setup:
// Configure GA4 for legitimate cross-domain tracking
gtag('config', 'G-XXXXXXXXX', {
'linker': {
'domains': ['yourdomain.com', 'shop.yourdomain.com', 'yourdomain.co.uk'],
'accept_incoming': true
}
});
GTM cross-domain auto-linking:
- Open GTM
- Edit GA4 Configuration tag
- Expand "Fields to Set"
- Add field:
linker - Value:
{"domains":["domain1.com","domain2.com"]} - Add field:
accept_incoming - Value:
true
Important: Only link domains YOU control. Explain in privacy policy.
5. Implement Privacy Sandbox Alternatives
Google's Privacy Sandbox (Chrome):
Instead of third-party cookies, use:
Topics API:
- Browser provides interest categories
- No cross-site user identification
- Privacy-preserving interest targeting
FLEDGE (Protected Audience API):
- Retargeting without cross-site tracking
- Auction happens in browser
- User data stays local
Attribution Reporting API:
- Measure conversions without user tracking
- Aggregate reports, not individual level
- Privacy-preserving attribution
Implementation example:
// Topics API (Chrome)
if ('browsingTopics' in document) {
document.browsingTopics().then(topics => {
// Use topics for ad targeting (privacy-preserving)
console.log('User interests:', topics);
});
}
// Attribution Reporting API
// Configure in ad click:
<a href="https://advertiser.com"
attributionsrc="https://ad-tech.com/register-source">
Ad Link
</a>
6. Server-Side Tracking Migration
Benefits of server-side:
- All cookies first-party
- No cross-site tracking by default
- Better control over data
- Improved privacy compliance
- Resilient to browser blocking
Setup: Google Tag Manager Server-Side
Create server container:
- GTM Account > Create Container
- Select "Server" type
- Deploy to Cloud Run, App Engine, or your server
Configure web container to send to server:
// In GTM web container
gtag('config', 'G-XXXXXXXXX', {
'transport_url': 'https://tracking.yourdomain.com',
'first_party_collection': true
});
- Server container forwards events:
- Receives events on your domain
- Sets first-party cookies
- Forwards to GA4, Meta, etc.
- No cross-site tracking
Setup: Meta Conversions API
// Server-side event to Meta
const accessToken = 'YOUR_ACCESS_TOKEN';
const pixelId = 'YOUR_PIXEL_ID';
fetch(`https://graph.facebook.com/v18.0/${pixelId}/events`, {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
data: [{
event_name: 'PageView',
event_time: Math.floor(Date.now() / 1000),
user_data: {
em: hashEmail(email), // Hashed email
client_ip_address: userIP,
client_user_agent: userAgent
},
action_source: 'website'
}],
access_token: accessToken
})
});
7. Update Privacy Policy
Disclose tracking practices:
Cross-Site Tracking
We do not engage in cross-site tracking. Our analytics cookies are first-party only and do not follow you to other websites. We use server-side tracking to measure website performance while protecting your privacy.
We link your activity across our owned properties (example.com and shop.example.com) to provide a consistent experience. This cross-domain tracking:
- Only applies to our websites
- Requires your consent
- Can be disabled in your privacy preferences
- Does not share data with third parties for tracking purposes
Third-Party Services
We use the following services that may collect data:
- Google Analytics (first-party, anonymized)
- [Other services with privacy safeguards]
We have configured these services to minimize data collection and disable cross-site tracking features.
Browser Protections to Understand
Safari Intelligent Tracking Prevention (ITP)
What Safari blocks:
- Third-party cookies (completely blocked)
- First-party cookies from trackers (7-day cap)
- LocalStorage/IndexedDB from trackers (7-day cap)
- Link decoration tracking (strips URL parameters)
What this breaks:
- Cross-site retargeting
- Attribution windows > 7 days
- Third-party login widgets (workaround: Storage Access API)
How to adapt:
- Use first-party cookies only
- Implement server-side tracking
- Reduce attribution window or use modeled conversions
- Request Storage Access API for legitimate cross-site needs
Firefox Enhanced Tracking Protection
Strict mode blocks:
- Cross-site tracking cookies
- Cryptominers
- Fingerprinting scripts
- Social media trackers
Standard mode blocks:
- Known trackers in private browsing
- Third-party cookies from trackers
How to adapt:
- Same as Safari: first-party + server-side
- Don't rely on third-party cookies
- Use privacy-preserving measurement
Chrome Privacy Sandbox
Third-party cookies deprecation (2024-2025):
- Phasing out third-party cookies
- Replacing with Privacy Sandbox APIs
- Topics, FLEDGE, Attribution Reporting
How to prepare:
- Test Privacy Sandbox APIs
- Implement Topics API for interest targeting
- Use Attribution Reporting for conversion measurement
- Migrate to first-party/server-side tracking
Testing Your Privacy Posture
Run privacy audits:
- Ghostery tracker count
- Privacy Badger detection
- uBlock Origin third-party requests
Test in privacy-focused browsers:
- Safari (ITP enabled by default)
- Firefox (Enhanced Protection)
- Brave (Shields up)
Verify no cross-site cookies:
- Check all cookies are your domain
- Verify SameSite attributes
- Test cookie behavior across browsers
Check fingerprinting surface:
- Run AmIUnique test
- Check BrowserLeaks results
- Minimize unique fingerprint data
Platform-Specific Guides
Compliance Checklist
- No third-party tracking cookies without consent
- All cookies have SameSite attribute
- No browser fingerprinting scripts
- Cross-domain tracking disclosed in privacy policy
- Cross-domain tracking only on owned properties
- Server-side tracking configured (if applicable)
- Tested in Safari, Firefox, Brave
- Privacy Sandbox APIs evaluated
- Attribution windows realistic for browser limits
- User opt-out mechanisms working
- Do Not Track signals respected (optional but recommended)