First-Party Proxy
About 30% of visitors run an ad-blocker, and many block requests to third-party analytics hosts outright. Serving Snow’s tracker from your own domain makes it first-party. There’s nothing third-party to block, so you recover traffic that would otherwise be invisible.
Snow’s Settings → Proxy tab generates the embed snippet and a copy-paste config for your platform. You don’t have to write anything by hand.
Two modes
Simple: script only (recommended)
Proxy only the sa.js script from your domain. Events go directly from the visitor’s browser to the Snow API.
https://yourdomain.com/sa/sa.js → https://api.snowanalytics.app/sa.jsBecause the browser posts events straight to Snow, the real visitor IP arrives automatically, so locations stay accurate with zero extra setup.
The embed looks like this:
<script defer
src="https://yourdomain.com/sa/sa.js"
data-site="YOUR_SITE_ID"
data-api-url="https://api.snowanalytics.app/api/collect"
data-domain="yourdomain.com"></script>The data-api-url attribute tells sa.js to post events directly to the Snow API instead of deriving the URL from src. That single attribute is what makes Simple mode work.
Trade-off. Events still go to the Snow API domain, so a blocklist targeting that domain could block them. In practice, blocking the script is what kills most analytics, so Simple mode recovers the bulk of lost traffic. Use Full mode if you need events ad-blocker-proof too.
Most users should start here. It’s easier to configure, requires no IP forwarding, and fixes the most common failure mode.
Full: script and events (advanced)
Proxy both the script and the event endpoint through your domain. Nothing third-party at all.
https://yourdomain.com/sa/sa.js → https://api.snowanalytics.app/sa.js
https://yourdomain.com/sa/api/collect → https://api.snowanalytics.app/api/collectThe catch: Snow geolocates each hit from the visitor’s IP. Once events flow through your server, you must forward the real visitor IP, or every visitor will geolocate to your server’s location. That’s the most common first-party proxy bug.
A plain next.config.js rewrite (or an equivalent reverse-proxy rewrite) proxies server-side and drops the visitor IP. For Full mode you need a Route Handler or Worker that re-emits the IP with the right headers. See Forwarding the visitor IP for the full explanation.
Pick a neutral path
/sa is the default prefix, but you can change it in Settings → Proxy. Choose something neutral and avoid obvious names like /analytics or /tracking that blocklists target.
Verify it’s working
After deploying, generate some traffic and open Analytics → Locations (see Locations & Devices).
- Broken: ~100% of visits show as one city, your server’s location.
- Fixed: the distribution matches your real audience.
Your other sites that don’t use a proxy are a useful control. They should show accurate locations regardless.