QA: Cross-Tool Tracking Problems, Answered Once, Correctly
23 canonical questions covering Mixpanel, Matomo, Snowplow, Hotjar, and cross-channel attribution modeling - the tool-agnostic and multi-tool tracking problems that keep getting re-asked because nobody wrote the plain-language answer down.
Each page: the fix in one quotable paragraph, why it actually happens, numbered steps branched by stack where it matters, and how to verify the fix worked at runtime - not just "looks right."
23 Questions, Grouped By Tool
Why does Mixpanel throw "mixpanel object not initialized" even though I called mixpanel.init()?
Mixpanel's async snippet queues calls until mixpanel-2-latest.min.js finishes loading - here is why a track() call fired too early throws this error, and how to guard against it.
Read the fix →02What's the correct Mixpanel call sequence (identify/alias/people.identify) to merge an anonymous user into a known one?
Confusing identify() and alias() is the most common Mixpanel identity bug. Here is the exact call order for signup, login, and profile updates.
Read the fix →03How do I reset Mixpanel's distinct_id on logout so the next user doesn't inherit the previous session's identity?
Skipping mixpanel.reset() on logout folds the next user's activity into the previous person's profile. Here is exactly when to call it.
Read the fix →04What's the checklist for tracking down why specific Mixpanel events never arrive?
Missing Mixpanel events have at least five independent causes that look identical from the reporting UI. Work through them in this order.
Read the fix →05Why doesn't mixpanel.track_links() work on elements that are added to the DOM after page load?
track_links() binds to elements present at call time, not via delegation - here is why dynamically added links never fire, and the delegated-listener fix.
Read the fix →06Is it safe that the Mixpanel client token is publicly visible in my page source, and what's actually at risk?
The Mixpanel project token is designed to be public. Here is what is actually at risk when it is visible, and what to check instead.
Read the fix →07How do I adjust CSP so Mixpanel can load inside a Chrome extension context?
Manifest V3 blocks remotely-hosted scripts by default. Here is how to bundle Mixpanel locally and scope connect-src correctly.
Read the fix →Why does Matomo throw "_paq.push() was used but the tracker was not yet initialized"?
This warning means a command reached the _paq queue, or a tracker method was called directly, before matomo.js finished loading. Here is the fix.
Read the fix →09How do I get Matomo to log a new pageview on every client-side route change in a modern SPA?
Matomo only fires one pageview on script load. Here is the three-call pattern to log every client-side route change correctly.
Read the fix →10How do I get Matomo to recognize the same visitor by User ID across two different domains?
Cookies don't cross domains. Here is how Matomo's User ID feature stitches one visitor across two properties by identity instead.
Read the fix →11Why does Matomo's setCustomVariable (or a specific event action) never show up in reporting?
Call order, scope mismatch, and Custom Variables vs Custom Dimensions confusion are the three real causes. Here is how to tell them apart.
Read the fix →12Why does self-hosted Matomo fail to install/log in behind nginx, Docker, or a managed database?
Three failure classes cover most self-hosted Matomo install problems: nginx rewrite rules, Docker volume permissions, and managed MySQL defaults.
Read the fix →Why does Snowplow's browser tracker warn "No tracker configured" even after calling newTracker()?
Snowplow supports named tracker instances. Here is why a namespace mismatch or an init-order race produces this warning.
Read the fix →14Why does Snowplow reject my event with a schema-validation error, and how do I debug it against Iglu?
Snowplow validates every event against a registered Iglu JSON Schema. Here is how to read a bad row and fix the mismatch.
Read the fix →Why does Hotjar's "Verify installation" check fail, or why does it miss virtual pageviews in a SPA?
The verify check looks for the snippet running right now, and heatmaps are scoped by URL. Here is why SPAs break both, and the stateChange fix.
Read the fix →16Why does Hotjar refuse to load, citing a "suspicious userAgent", on legitimate traffic?
Hotjar's bot-detection heuristics protect billing and data quality but can false-positive on corporate proxies and headless test tools.
Read the fix →17What CSP directives does Hotjar need in order to collect session data without being blocked?
Hotjar's script can load fine while every data-upload request is silently blocked. Here is the full directive list, checked separately.
Read the fix →18What's the correct way to load the Hotjar snippet in a Next.js/Nuxt app without SSR/window errors?
Hotjar's snippet references window directly. Here is how to load it safely with next/script and a Nuxt client-only plugin.
Read the fix →How do I build a Markov-chain removal-effect attribution model on top of exported GA/BigQuery channel data?
Removal-effect attribution measures each channel's real causal contribution from your own user paths. Here is how to build it on BigQuery export.
Read the fix →20What's the reliable way to attribute a mobile app install back to its ad click using the Play Install Referrer or Branch.io?
The Play Install Referrer API replaced a spoofable broadcast intent. Here is why it's trustworthy, and where the iOS ceiling really is.
Read the fix →21Why isn't a URL click ID like fbclid alone sufficient to attribute a conversion back to its ad?
A click ID proves a click happened, once. It says nothing about cross-device journeys, stripped parameters, or expired windows.
Read the fix →22How do I reconstruct a user's full cross-channel journey from raw GA4 BigQuery export tables?
GA4's UI pre-aggregates channel data away. Here is how to rebuild the ordered, session-level touch sequence yourself from raw export.
Read the fix →23How do I calculate conversions under a different attribution model (linear, last-non-direct) than the platform's default?
Most platforms bake in one attribution convention. Here is how to recompute credit under a different rule once you have the journey data.
Read the fix →Not Finding Your Exact Symptom?
Tell us what you are seeing. We trace tracking implementations across every major analytics, tag-management, and product-analytics platform for a living.