How It Works
The Worker runs on a Cloudflare route that covers your site. For each request it:- Counts one
page_viewper HTML document request, server-side at the edge. - Injects the TinyTrack script into the HTML response, so your source stays untouched.
- Serves the tracker from
/_tinytrack/tracker.jsand takes client events at/_tinytrack/track, first-party on your own domain.
Install
Cloudflare clones the repo and sets up the worker.1
Set your website id
- Go to: Workers & Pages
- Open: tinytrack-cloudflare-worker → Settings → Variables: set
TINYTRACK_WEBSITE_ID(TinyTrack Settings → Tracking)
2
Route it over your site
Domains → Add Route, e.g.
example.com/*.Install (manual)
Prerequisites:- Requires a Cloudflare account with your site’s DNS proxied
- Node.js 18+
- TinyTrack website ID
1
Setup
2
Add tinytrack websiteId secret
3
Deploy
4
Cloudflare configuration
Workers & Pages → tinytrack-cloudflare-worker → Domains → Add Route, e.g.
example.com/*, covering the whole site.Reducing Worker Invocations
Aexample.com/* route sends every request through the worker, including assets it just passes through. The worker only needs to see HTML document requests and /_tinytrack/*. To stop paying invocations for the rest, add routes with the Worker set to None for your high-volume static prefixes.
To add exclusions:
- Go to Cloudflare → Domains
- Go to your domain example.com
- Go to Workers routes
- Add routes you want to exclude with Add Route
- Worker should be None
example.com/_app/immutable/*(SvelteKit)example.com/_next/static/*(Next.js)example.com/assets/*example.com/static/*example.com/images/*example.com/api/*
Configuration
Only
TINYTRACK_WEBSITE_ID is declared in wrangler.jsonc, so it is the only field shown on the one-click deploy setup page. The optional vars fall back to the defaults above; to override one, add it in Workers & Pages → Settings → Variables (kept across deploys, the config sets keep_vars) or to the vars block in wrangler.jsonc.
Already have the TinyTrack script in your HTML? Remove it, or set
INJECT_SCRIPT to "false". Running both causes duplicate client-side events.What Gets Tracked
- Server-side: one
page_viewper HTML request (any status). Static assets,/api/-style paths, prefetches, and non-GET requests are skipped. - Client-side: SPA navigations, outbound clicks, goals, scroll depth, session pings, custom events. The injected script skips the initial pageview, so there is no double counting.
- Bots are recorded for crawler and AI traffic analytics.
Troubleshooting
npx wrangler tailshows live logs; pageview failures log as[TinyTrack] pageview tracking failed.- No data? Check the route covers the page and
TINYTRACK_WEBSITE_IDis set. - Client events missing? Check the browser console for
/_tinytrack/tracker.js(usually CSP or a leftover manual snippet).
Uninstall
Remove the Worker Route and your site instantly serves direct from origin. Thennpx wrangler delete when done. Roll back a bad deploy from Workers & Pages → Deployments → Rollback.