Platform
Troubleshooting
Systematic debugging for ingest, CNAME, CAPI, attribution, and consent issues.
Use this guide top-to-bottom: confirm delivery (events arrive), then payload quality (fields correct), then downstream (CAPI, attribution).
Symptom matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| No events at all | Script missing or wrong public_id | Match id= in u.js to dashboard; hard refresh |
| Events in dev, not prod | Origin not in allowlist | Settings → Tracking → Allowed origins |
| 403 on /collect | Origin blocked | Add domain or clear allowlist for testing |
| CORS error in console | Collector URL mismatch | endpoint must match script host / CNAME |
| Duplicate page_views | StrictMode / double mount | Expected in dev — SDK dedupes 1500ms |
| No UTMs on internal pages | By design | UTMs URL-only — see attribution docs |
| Low Meta Event Match Quality | Missing fbp/fbc or fbclid | CNAME + pixel on same domain; preserve fbclid |
| CNAME stuck pending | DNS not propagated or proxied | DNS-only CNAME; verify with dig |
| Events queued never sent | consentMode: required | Call setConsent() after CMP approval |
| Server events 401 | Invalid/expired ingest token | Rotate token in Settings → API keys |
Debug mode
tracker.init({
endpoint: 'https://api.trackrift.com',
publicId: 'YOUR_PUBLIC_ID',
debug: true,
});
// Console: [tracker] init, enqueue, flush, dedupe skip, consent blockNetwork checklist
- Disable ad blockers for testing (or use CNAME).
- Confirm
GET /bootstrapreturns Set-Cookie for _aid. - Confirm
POST /collectreturns 204. - Compare request public_id with dashboard snippet.
- Inspect payload in Events explorer within 30s.
dig +short t.yourdomain.com CNAME
# Should return the Trackrift collector target from dashboardStill stuck?
Export a redacted event JSON from Events → copy payload → compare against OpenAPI schema. Missing page.url or anonymous_id are the most common payload gaps.