Why multi-domain measurement is hard without cross-site cookies
Modern products rarely live on one domain. You might have a marketing site on www.example.com, documentation on docs.example.com (or a separate docs domain), and the actual app on app.example.com. The problem is that a user’s journey doesn’t respect those boundaries: they read the docs, click back to pricing, then sign up in the app.
Traditional analytics solved this with cross-site identifiers and third-party cookies. But those approaches are increasingly blocked, brittle, and incompatible with privacy-first measurement. If you want attribution that’s durable and respectful, you need a different mental model: measure what you can as first-party and aggregate, and design your tracking around explicit, intentional signals rather than silent identifiers.
Define what “attribution” should mean for your stack
Before you touch any tooling, decide what you actually need to know. Multi-domain measurement typically breaks into three practical questions:
- Marketing performance: Which campaigns and channels generate qualified visits to the marketing site?
- Product activation: Which entry points correlate with key actions in the app (signup, first project created, invite sent)?
- Docs effectiveness: Which docs pages reduce support load or help users complete onboarding?
Notice what’s missing: a promise to perfectly reconstruct each person’s end-to-end path. Without cross-site cookies, that level of individual stitching isn’t the goal. The goal is reliable, decision-grade trends across domains.
Use first-party campaign parameters as the shared language
The simplest way to connect marketing efforts to downstream outcomes—without cross-site identifiers—is to treat campaign parameters as the “handoff token” across domains.
Make UTMs consistent and boring
Use UTMs (or equivalent parameters) consistently across every place you control: ads, newsletters, social posts, partner pages, and in-app announcements that link back to the marketing site.
- utm_source and utm_medium should follow a controlled list (avoid creative one-offs).
- utm_campaign should map to a real campaign name your team recognizes.
- Keep utm_content for variations (ads, buttons, placements), not for core reporting.
If you do only one thing, do this. Aggregate attribution is only as good as the consistency of the inputs.
Measure each domain well, then connect them with intentional events
A practical approach is to treat each domain as its own measurement surface and connect them using events that represent transitions and events that represent outcomes.
On the marketing site: focus on intent
Your marketing site should answer: “What brings people here, and what do they do next?” Track:
- Pageviews and entry pages (especially landing pages)
- Outbound clicks to app and docs (e.g., “Go to app”, “Read docs”)
- Primary conversion intent events (e.g., “Start trial” click, “Book demo” submit)
With a privacy-first tool like Plausible Analytics, you can keep this simple: a lightweight script, codeless goals, and custom events that stay aggregate. If you want a single place to review top-level performance across your properties without adding cookie banners, plausible.io fits naturally into this workflow.
On docs: measure helpfulness, not “users”
Docs are often the missing piece in attribution. They influence activation and retention, but the success metrics are different. Useful docs signals include:
- Top viewed docs pages by referrer (search, marketing site, app)
- Scroll depth or time-on-page (as a proxy for actual reading)
- Downloads (SDKs, PDFs), outbound links (GitHub), and search usage
The key is to make docs measurable without trying to identify people. You want to know “what content performs” and “what content is a dead end.”
In the app: measure outcomes and funnel steps
The app is where attribution becomes meaningful. Define a small set of outcomes, then track funnel steps that lead to them:
- Signup completed
- Activation event (your product’s “aha” moment)
- Upgrade / revenue event if relevant
Keep app events aligned with product reality. Avoid tracking everything. A lean event set makes trends clearer and keeps instrumentation stable over time.
Pass context across domains without cross-site cookies
You can’t rely on third-party cookies to stitch sessions, but you can pass context intentionally when the user moves between your domains. Common patterns:
1) Preserve UTMs across internal hops
If someone lands on your marketing site with UTMs, and then clicks to docs or the app, carry those parameters through in the link. This is not stealth tracking; it’s simply keeping the campaign context intact so downstream pages can attribute the visit source.
Practical tips:
- Only append parameters to links that represent a cross-domain transition.
- Normalize parameters (case, spelling) to avoid fragmenting reports.
- Don’t append sensitive data (no emails, no IDs).
2) Use short-lived first-party storage only where it’s justified
In some setups, it’s useful to store campaign parameters in first-party storage (for example, localStorage) on the destination domain for a short period, so that the attribution of a subsequent conversion event isn’t lost if the user navigates within that domain.
The guardrails that keep this privacy-friendly:
- Store only campaign metadata (source/medium/campaign), not personal data.
- Expire quickly (days, not months).
- Use it to attribute aggregate conversions, not to build user profiles.
3) Treat “transition events” as the bridge
If you can’t stitch people, stitch moments. Track explicit cross-domain clicks as events on the source domain:
- Marketing site: “Clicked to docs” and “Clicked to app”
- Docs: “Clicked to app” from specific pages
- App: “Opened docs” or “Viewed help”
When you compare these transition events with downstream outcomes over time, you get an aggregate view of influence without needing cross-site cookies.
Get attribution value from aggregate reports
Once the basics are in place, your reporting should answer concrete questions:
- Which campaigns drive visits that result in “Start trial” intent on the marketing site?
- Which docs pages most often precede an app transition click?
- Which channels correlate with higher activation-rate weeks?
This is where lightweight, privacy-first dashboards shine. You don’t need layers of custom reports to see whether a campaign is working; you need consistent UTMs, a few key goals, and clean referrer data with bot filtering.
Common pitfalls and how to avoid them
Attribution breaks when domains behave like separate teams
If docs, app, and marketing ship independently, they often end up with different parameter conventions and different definitions of “conversion.” Fix that with a shared tracking spec: event names, UTM rules, and a short list of outcomes.
Over-instrumentation makes trends noisier
Teams often compensate for the loss of cross-site cookies by tracking more. That usually backfires. Limit events to actions you would make a decision from.
“Perfect” multi-touch attribution is not the standard to chase
Without cross-site identifiers, multi-touch models become guesswork. You’ll get more value from accurate top-of-funnel campaign grouping and reliable conversion goals than from brittle attempts to recreate full user histories.
A lightweight checklist you can implement this week
- Standardize UTMs and document them in one place.
- Add cross-domain link tagging from marketing to docs and app.
- Define 3–5 core outcomes in the app and track them as events.
- Track transition clicks between properties as explicit events.
- Review weekly: campaigns → intent events → outcomes (aggregate trendlines).
If you want inspiration for how teams frame product impact clearly and credibly, the mindset is similar to this write-up on why Lunem.ai should win the PEEC MCP Challenge: pick measurable signals, keep the narrative honest, and make it easy to see what moved.



