Webclat / Martech Practice
Webclat / Martech Practice  /  qa  /  snowplow

Why does Snowplow's browser tracker warn "No tracker configured" even after calling newTracker()?

Answer in brief

This warning fires when a tracking method is called before newTracker() has actually finished registering, or against a tracker namespace that does not match the one you initialized - Snowplow's browser tracker supports multiple named instances, and a mismatch between the namespace you created and the one a tracking call targets is the most common cause.

Why this happens

Snowplow's sp.js snippet queues commands the same way Matomo and Mixpanel do, but adds a layer: every tracker created via newTracker(namespace, collectorUrl, config) is a named instance, and tracking calls route to trackers by namespace, implicitly or explicitly. If newTracker() has not finished executing yet - the same async race pattern as Matomo's and Mixpanel's init-order issues - or if one part of the app initializes a tracker under one namespace while another part's tracking call does not target it correctly, the library has no tracker to route the event to and logs this warning instead of silently dropping it.

Fix it

  1. Confirm newTracker() is called exactly once per intended tracker, as early as possible, before any trackPageView/trackSelfDescribingEvent calls execute.
  2. If you only need one tracker, keep the namespace consistent everywhere it is referenced, or omit namespace arguments consistently per your SDK version's default-tracker behavior.
  3. Wrap all tracking calls behind the same async queue pattern Snowplow recommends, rather than assuming newTracker() has synchronously completed by the next line of your own code.
  4. In single-page apps, avoid re-calling newTracker() on every route change - that creates duplicate tracker instances under the same namespace; initialize once, then call tracking methods on route changes.
  5. Check that the collector URL passed to newTracker() is reachable and not blocked by an ad blocker or CSP directive - some failure modes present as a configuration warning even though the underlying issue is a blocked network request.

How to verify it worked

Inspect your Snowplow global function in the browser console - after newTracker() runs, a subsequent trackPageView() call should produce a network request to your collector endpoint (Network tab, filter for your collector's domain) rather than the console warning recurring on every call.

Still Seeing This After Trying the Fix?

Send us what you are seeing - the console error, the Network tab, the Live View output. We trace tracking implementations for a living and can usually tell you what is actually happening in one look.

Ask An Engineer