Cross-Domain Tracking in Umami
Umami takes a fundamentally different approach to cross-domain tracking compared to traditional analytics platforms. Rather than linking user sessions across domains (which raises privacy concerns and requires complex cookie sharing), Umami treats each domain as a separate website in its privacy-first design. This approach aligns with Umami's core philosophy of respecting user privacy while still providing valuable analytics insights.
Privacy-First Architecture
Why Umami Doesn't Link Cross-Domain Sessions
Umami's decision to avoid cross-domain session linking is intentional and rooted in privacy principles:
- No Personal Identifiers: Umami doesn't store IP addresses, user agents, or other personally identifiable information
- No Cross-Site Tracking: Each domain maintains its own isolated analytics data
- GDPR/CCPA Compliant: Separate domain tracking eliminates many privacy compliance concerns
- Visitor Anonymity: Users can't be tracked as they move between different domains
Privacy Benefits:
- No third-party cookies shared across domains
- No persistent user IDs across different websites
- Reduced fingerprinting surface area
- Compliance-friendly data collection
- Visitor consent requirements simplified
Implementation Strategy
Option 1: Separate Websites (Recommended)
Create individual website entries in Umami for each domain you want to track:
Setup in Umami Dashboard:
Website 1: example.com
- Website ID: abc123
- Domain: example.com
- Tracking Code: <script async src="https://analytics.example.com/script.js" data-website-id="abc123"></script>
Website 2: shop.example.com
- Website ID: def456
- Domain: shop.example.com
- Tracking Code: <script async src="https://analytics.example.com/script.js" data-website-id="def456"></script>
Website 3: docs.example.com
- Website ID: ghi789
- Domain: docs.example.com
- Tracking Code: <script async src="https://analytics.example.com/script.js" data-website-id="ghi789"></script>
Install Different Tracking Codes:
<!-- On example.com -->
<script async src="https://analytics.example.com/script.js" data-website-id="abc123"></script>
<!-- On shop.example.com -->
<script async src="https://analytics.example.com/script.js" data-website-id="def456"></script>
<!-- On docs.example.com -->
<script async src="https://analytics.example.com/script.js" data-website-id="ghi789"></script>
Benefits of Separate Websites:
- Clean separation of analytics for each domain
- Independent reporting and dashboards
- Different team members can have access to specific domains
- Clear traffic attribution
- No data mixing or confusion
Drawbacks:
- Can't track individual user journeys across domains
- No unified visitor counts
- Need to manually compare data across websites
- Duplicate management overhead
Option 2: Combined Tracking (Same Website ID)
If you want to track multiple domains as a single website (for example, www.example.com and example.com):
Use Same Website ID on Multiple Domains:
<!-- On www.example.com AND example.com -->
<script async src="https://analytics.example.com/script.js" data-website-id="abc123"></script>
When to Use Combined Tracking:
- Tracking www vs. non-www versions of the same domain
- Tracking HTTP and HTTPS versions during migration
- Consolidating subdomain traffic into parent domain stats
- Temporary tracking during domain migrations
Important Considerations:
- Page URLs will include full domain names
- Referrer data will show cross-domain navigation as external referrers
- Sessions are still not linked - visits appear as separate sessions
- Can create confusion in reporting if domains serve different purposes
Tracking Referrals Between Domains
While Umami doesn't link sessions across domains, you can still see referral traffic:
Automatic Referrer Tracking:
When users navigate from one of your domains to another, Umami captures the referrer:
User Journey:
1. Visits example.com → Tracked by Website ID abc123
2. Clicks link to shop.example.com → New session on Website ID def456
- Referrer: example.com
View Referrers in Dashboard:
- Navigate to the destination website (e.g., shop.example.com)
- View "Referrers" report
- Your other domain will appear as an external referrer
Custom Referrer Tracking with UTM Parameters:
For more detailed tracking between your domains, use UTM parameters:
<!-- On example.com, link to shop.example.com -->
<a href="https://shop.example.com/products?utm_source=main_site&utm_medium=header_link&utm_campaign=product_launch">
Visit Shop
</a>
This allows you to:
- Identify specific links driving traffic between domains
- Track campaign effectiveness across domains
- Measure navigation patterns
- Understand content effectiveness
Reporting Across Multiple Domains
Dashboard Strategies
Strategy 1: Individual Domain Dashboards
Monitor each domain separately:
Dashboard View 1: example.com
- Pageviews: 50,000
- Unique Visitors: 10,000
- Top Pages: /home, /about, /contact
Dashboard View 2: shop.example.com
- Pageviews: 30,000
- Unique Visitors: 7,500
- Top Pages: /products, /checkout, /cart
Strategy 2: Combined Manual Analysis
Export data from each website and combine:
Total Network Traffic:
- Combined Pageviews: 80,000 (example.com + shop.example.com)
- Combined Unique Visitors: 17,500*
(* Note: This is additive, not deduplicated - some visitors may have visited both)
Strategy 3: Shared Dashboard Access
Create a shared view for stakeholders:
- Give team members access to all relevant website IDs
- Create documentation showing which website ID corresponds to which domain
- Build external dashboards (using Umami API) to combine data
Using the Umami API for Multi-Domain Insights
For advanced cross-domain reporting, use the Umami API:
Fetch Stats for Multiple Websites:
// Fetch data for all your websites
const websiteIds = ['abc123', 'def456', 'ghi789'];
const stats = await Promise.all(
websiteIds.map(id =>
fetch(`https://analytics.example.com/api/websites/${id}/stats`, {
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
}).then(r => r.json())
)
);
// Combine statistics
const totalPageviews = stats.reduce((sum, site) => sum + site.pageviews.value, 0);
const totalVisitors = stats.reduce((sum, site) => sum + site.uniques.value, 0);
console.log(`Total Pageviews Across All Domains: ${totalPageviews}`);
console.log(`Total Visitors Across All Domains: ${totalVisitors} (may include duplicates)`);
Build Custom Multi-Domain Dashboard:
// Create aggregated report
async function getMultiDomainReport() {
const websites = [
{ id: 'abc123', name: 'Main Site' },
{ id: 'def456', name: 'Shop' },
{ id: 'ghi789', name: 'Docs' }
];
const report = [];
for (const website of websites) {
const stats = await fetch(
`https://analytics.example.com/api/websites/${website.id}/stats?start_at=${startDate}&end_at=${endDate}`,
{ headers: { 'Authorization': 'Bearer YOUR_API_TOKEN' } }
).then(r => r.json());
report.push({
domain: website.name,
pageviews: stats.pageviews.value,
visitors: stats.uniques.value,
bounceRate: stats.bounces.value
});
}
return report;
}
Best Practices
- Document Website IDs: Maintain a clear mapping of which website ID corresponds to which domain
- Consistent Naming: Use descriptive names for each website in Umami dashboard
- Team Access: Grant appropriate access permissions for each website/domain
- UTM Parameters: Use UTM codes for links between your domains to track cross-domain navigation
- API Integration: Build custom dashboards if you need consolidated multi-domain views
- Accept Limitations: Understand that individual user journeys across domains won't be tracked
- Privacy Documentation: Document your privacy-first approach in your privacy policy
Common Use Cases
Multi-Brand Companies:
Company owns:
- brand-a.com (Website ID 1)
- brand-b.com (Website ID 2)
- corporate.com (Website ID 3)
Each brand gets its own analytics, but corporate team can access all three for portfolio view
SaaS with Separate Domains:
Service structure:
- marketing.example.com (Website ID 1) - Marketing site
- app.example.com (Website ID 2) - Application
- docs.example.com (Website ID 3) - Documentation
Track conversion from marketing → app signup separately
E-Commerce with Regional Sites:
Regional sites:
- shop-us.example.com (Website ID 1)
- shop-eu.example.com (Website ID 2)
- shop-asia.example.com (Website ID 3)
Compare performance across regions without mixing data
Alternatives to Cross-Domain Tracking
If you need to understand user behavior across domains, consider:
- Conversion Tracking: Use UTM parameters and track conversions when users move between domains
- Funnel Analysis: Build funnels using referrer data to understand cross-domain drop-off
- Event Tracking: Track custom events when users click links to other domains
- Server-Side Session Management: Use your own backend to correlate sessions if needed (while keeping Umami tracking separate)
- Custom Analytics: Build your own cross-domain tracking system that respects privacy but meets your specific needs
Privacy Policy Implications
When tracking multiple domains separately, your privacy policy should state:
We use Umami Analytics to understand how visitors use our websites. Each of our
domains (example.com, shop.example.com, docs.example.com) collects analytics data
independently. We do not track individual users across our different websites.
Umami does not use cookies, does not collect personal information, and all data
is anonymized.
This transparency reinforces user trust and demonstrates your commitment to privacy.