Analytics & Measurement Skill
Measurement rules for lead generation sites. GTM + GA4 focused.
Core Rules (Non-Negotiable)
- Every conversion MUST have a measurable event — Form submit, phone click, WhatsApp = tracked
- GTM is the only tag container — No inline GA4, no direct scripts
- One GTM container per site — No multiple containers
- Consent before tracking — GDPR: no GA4 until cookie accepted
- Event naming convention MUST be followed — See naming rules below
- Every event MUST have context — Location, element, value where applicable
- Test before deploy — GTM Preview + GA4 DebugView MUST pass
- Production and staging MUST be separated — Different GA4 properties or filtered
Event Types
| Type | Purpose | Use as KPI? | |------|---------|-------------| | Conversion | Business outcome (lead, sale) | ✅ Yes | | Micro | Supports analysis (scroll, click) | ❌ No |
Conversion events: form_submit, phone_click, whatsapp_click, calculator_complete Micro events: cta_click, scroll_depth, video_play, calculator_start
Only conversion events may be used as primary KPIs. Micro events support optimization, not reporting.
Environment Policy
- Production and staging MUST use separate GA4 properties (or filtered views)
- Staging data MUST NOT pollute production analytics
- Debug mode MUST be disabled in production
- Test events MUST be filtered out before reporting
Forbidden (STOP)
STOP and fix if any of these occur:
Implementation
- ❌ GA4/Ads script outside GTM
- ❌ Multiple GTM containers
- ❌ Tracking before consent (GDPR violation)
- ❌ Hardcoded Measurement ID in code
- ❌ Staging data in production property
Events
- ❌ Double-firing events (same action = multiple events)
- ❌ Auto-events without explicit need (enhanced measurement spam)
- ❌ Event without naming convention
- ❌ Conversion without event
- ❌ Micro event used as KPI
Privacy (Non-Negotiable)
- ❌ PII in event parameters (email, phone, name, address)
- ❌ Tracking without consent where required
- ❌ IP not anonymized (GA4 does this by default)
- ❌ User ID without consent
Quality
- ❌ Deploy without GTM Preview test
- ❌ Event names with spaces or capitals
- ❌ Parameters without documentation
Event Naming Convention
Format: [action]_[object] (lowercase_snake_case)
- action: click, submit, view, start, complete
- object: form, cta, video, phone, whatsapp
Parameter rules: lowercase_snake_case, max 40 chars, no PII
See events.md for full event list with parameters.
Required Events
| Event | Trigger | Page Type |
|-------|---------|-----------|
| page_view | Page load | All |
| scroll_depth | 25%, 50%, 75%, 90% | All |
| cta_click | CTA button click | Landing |
| phone_click | tel: link click | Landing |
| whatsapp_click | WhatsApp link | Landing |
| form_start | First form interaction | Landing |
| form_submit | Successful submission | Landing |
| calculator_start | First step | Calculator |
| calculator_complete | Result shown | Calculator |
| video_play | Play clicked | Video |
See events.md for parameters and implementation. See gtm-setup.md for GTM container configuration.
Conversions (Mark in GA4)
| Event | Conversion? | Send to Ads? |
|-------|-------------|--------------|
| form_submit | ✅ Yes | ✅ Yes |
| phone_click | ✅ Yes | ✅ Yes |
| whatsapp_click | ✅ Yes | ✅ Yes |
| calculator_complete | ✅ Yes | ✅ Yes |
| cta_click | ❌ No | ❌ No |
| scroll_depth | ❌ No | ❌ No |
Server-Side Tracking
For ad blocker bypass and enhanced conversions, use server-side GTM via Cloudflare:
Browser → Web GTM → Cloudflare Worker → sGTM → GA4 + Google Ads
Requirements:
- First-party subdomain (e.g.,
data.yourdomain.com) - Cloudflare Worker as proxy
- Server-Side GTM container
- Enhanced conversions: SHA256 hashed PII only
See server-side.md for full implementation.
References
Required
- events.md — Full event documentation
- gtm-setup.md — GTM configuration guide
Conditional
- server-side.md — Cloudflare + sGTM + Ads setup
- debugging.md — Testing and troubleshooting
Definition of Done
Core (Zero Tolerance)
- [ ] GTM is only tag container
- [ ] Consent blocks tracking until accepted
- [ ] Staging and production separated
- [ ] 0 double-firing events
- [ ] 0 PII in parameters
- [ ] All events follow naming convention
Conversions (MUST fire correctly)
- [ ]
form_submit,phone_click,whatsapp_clickfire once per action - [ ] All marked as conversions in GA4
- [ ] Sending to Google Ads (if enabled)
Testing
- [ ] All events tested in GTM Preview
- [ ] All events visible in GA4 DebugView
- [ ] GTM container exported as backup
Server-Side (If Enabled)
- [ ] Cloudflare Worker + sGTM deployed
- [ ] Enhanced conversions SHA256 hashed