# Zaraz Gotchas

## Events Not Firing

**Check:**

1. Tool enabled in dashboard (green dot)
2. Trigger conditions met
3. Consent granted for tool's purpose
4. Tool credentials correct (GA4: `G-XXXXXXXXXX`, FB: numeric only)

**Debug:**

```javascript
zaraz.debug = true
console.log('Tools:', zaraz.tools)
console.log('Consent:', zaraz.consent.getAll())
```

## Consent Issues

**Modal not showing:**

```javascript
// Clear consent cookie
document.cookie = 'zaraz-consent=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;'
location.reload()
```

**Tools firing before consent:** Map tool to consent purpose with "Do not load until consent granted".

## SPA Tracking

**Route changes not tracked:**

1. Configure History Change trigger in dashboard
2. Hash routing (`#/path`) requires manual tracking:

```javascript
window.addEventListener('hashchange', () => {
  zaraz.track('pageview', { page_path: location.pathname + location.hash })
})
```

**React fix:**

```javascript
const location = useLocation()
useEffect(() => {
  zaraz.track('pageview', { page_path: location.pathname })
}, [location]) // Include dependency
```

## Performance

**Slow page load:**

- Audit tool count (50+ degrades performance)
- Disable blocking triggers unless required
- Reduce event payload size (<100KB)

## Tool-Specific Issues

| Tool       | Issue                      | Fix                                  |
| ---------- | -------------------------- | ------------------------------------ |
| GA4        | Events not in real-time    | Wait 5-10 min, use DebugView         |
| Facebook   | Invalid Pixel ID           | Use numeric only (no `fbpx_` prefix) |
| Google Ads | Conversions not attributed | Include `send_to: 'AW-XXX/LABEL'`    |

## Data Layer

- Properties persist per page only - set on each page load
- Nested access: `{{client.__zarazTrack.user.plan}}`

## Limits

| Resource         | Limit        |
| ---------------- | ------------ |
| Request size     | 100KB        |
| Consent purposes | 20           |
| API rate         | 1000 req/sec |

## When NOT to Use Zaraz

- Server-to-server tracking (use Workers)
- Real-time bidirectional communication
- Binary data transmission
- Authentication flows
