Infrared Global — Tracking Plan
GTM Container: GTM-MQV6DTJW GA4 Property: G-PVB9HK2MGT Last Updated: 2026-03-13
Existing GTM Tags (from WordPress era — carry over automatically)
| Tag | Type | Trigger | Status | |-----|------|---------|--------| | G-Analytics Tag | GA4 Event | All Pages | Active | | Google Tag G-PVB9HK2MGT | Google Tag | Initialization - All Pages | Active | | GA4 Event - Click Calendly | GA4 Event | Click Link Calendly | Active | | GA4 Event - Click Link Stripe | GA4 Event | Click Link Stripe | Active | | GA4 Event - Form Submission | GA4 Event | Element Vis DOM Form submission | Active | | LinkedIn Insight | LinkedIn Insight | All Pages | Active | | Meta Tag | Custom HTML (Meta Pixel) | All Pages | Active | | Post Hog | Custom HTML (PostHog) | All Pages | Active |
New DataLayer Events (from Infrared tracking JS)
Every event includes these bot detection signals automatically:
| Signal | Type | Purpose | |--------|------|---------| | `is_likely_human` | boolean | Composite score: true if ≥2 human signals detected | | `human_score` | 0-5 | Count of human behavior signals triggered | | `has_mouse` | boolean | Mouse movement detected | | `has_touch` | boolean | Touch screen interaction detected | | `has_keyboard` | boolean | Keyboard input detected | | `has_scroll` | boolean | Manual scrolling detected | | `click_count` | number | Total clicks in session | | `mouse_moves` | number | Total mouse move events | | `session_seconds` | number | Seconds since page load | | `screen_width` / `screen_height` | number | Viewport dimensions | | `device_type` | string | "mobile" / "tablet" / "desktop" | | `referrer` | string | Traffic source URL or "direct" | | `page_path` | string | Current URL path | | `page_title` | string | Current page title | | `timestamp` | ISO string | Event timestamp |
Core Events
| Event | Parameters | Trigger | Page | |-------|-----------|---------|------| | `page_view_enhanced` | page_url, page_referrer | DOMContentLoaded | All | | `scroll_depth` | scroll_percentage (10/25/50/75/90/100) | Scroll milestones | All | | `time_on_page` | time_seconds (15/30/60/120/300) | Time milestones | All | | `exit_intent` | — | Mouse leaves viewport top | All | | `tab_visibility` | visibility_state | Tab hidden/visible | All | | `text_copy` | copied_text (max 100 chars) | Ctrl+C / copy action | All | | `page_print` | — | Print dialog opened | All |
Navigation Events
| Event | Parameters | Trigger | Page | |-------|-----------|---------|------| | `nav_click` | nav_item, nav_url, nav_type (mobile/desktop) | Navigation link click | All | | `cta_click` | cta_text, cta_url, cta_classes, cta_location | Any .btn or CTA click | All | | `internal_link_click` | link_url, link_text | Any same-domain link | All |
Outbound Events
| Event | Parameters | Trigger | Page | |-------|-----------|---------|------| | `outbound_click` | outbound_url, outbound_text, outbound_type | External link click | All | | `calendly_click` | calendly_url, calendly_text | Calendly booking link | Contact, Method | | `blog_click` | blog_url | Beehiiv blog link | All (nav) | | `email_click` | email_address | mailto: link | All | | `phone_click` | phone_number | tel: link | All |
Contact Form Events
| Event | Parameters | Trigger | Page | |-------|-----------|---------|------| | `contact_form_submit` | form_business_type, form_has_challenge, form_challenge_length | Form submit | Contact, Homepage | | `form_field_focus` | field_name, field_type | Input focus | Contact, Homepage |
Solutions Page Events
| Event | Parameters | Trigger | Page | |-------|-----------|---------|------| | `service_add` | service_name, service_price | "Add Service" button | Solutions | | `service_channel_change` | channel_selection, channel_price | Channel dropdown change | Solutions |
Assessment Events
| Event | Parameters | Trigger | Page | |-------|-----------|---------|------| | `assessment_start` | — | Assessment page loaded | Assessment | | `assessment_capture_view` | — | Lead capture screen shown | Assessment | | `assessment_lead_capture` | lead_business_type, lead_city | Lead form submitted | Assessment | | `assessment_begin_questions` | — | First question shown | Assessment | | `assessment_answer` | question_index, question_category, answer_index, answer_text, answer_points | Answer selected | Assessment | | `assessment_processing` | — | Processing screen shown | Assessment | | `assessment_complete` | — | Results screen shown | Assessment | | `assessment_results` | assessment_score, assessment_max, assessment_pct, assessment_tier, assessment_categories | Score calculated | Assessment |
Engagement Events
| Event | Parameters | Trigger | Page | |-------|-----------|---------|------| | `section_view` | section_id | Section 30% visible (IntersectionObserver) | All | | `faq_expand` | faq_question (max 100 chars) | FAQ item clicked | Homepage, Solutions | | `testimonial_view` | testimonial_text (max 80 chars) | Testimonial 50% visible | All | | `trust_bar_view` | section: "clients-strip" | Logo strip 50% visible | Homepage | | `cookie_consent` | consent_action (accepted/declined) | Cookie banner interaction | All |
GTM Configuration Recommendations
New Tags to Create in GTM
- GA4 Event — CTA Click
- GA4 Event — Scroll Depth
- GA4 Event — Assessment Funnel
- GA4 Event — Contact Form
- GA4 Event — Service Interest
- GA4 Event — Outbound Clicks
Bot Filtering in GA4
Use `is_likely_human` as a custom dimension in GA4:
- In GA4 Admin → Custom definitions → Create custom dimension
- Dimension name: "Is Likely Human"
- Scope: Event
- Event parameter: `is_likely_human`
Then create segments:
- Human traffic: is_likely_human = true
- Suspicious traffic: is_likely_human = false OR human_score < 2
Additional bot detection signals:
- `device_type` = "desktop" with no mouse movement = likely bot
- `session_seconds` < 2 with form submission = likely bot
- `click_count` = 0 with long session = likely bot
GA4 Conversions to Configure
| Event | Conversion? | Why | |-------|------------|-----| | `contact_form_submit` | Yes | Primary lead generation | | `assessment_complete` | Yes | Assessment funnel completion | | `assessment_lead_capture` | Yes | Lead capture in assessment | | `calendly_click` | Yes | Booking intent | | `service_add` | No (exploration) | Tracks interest but not conversion |
Implementation Status
- [x] GTM container code installed (head + body noscript)
- [x] DataLayer events implemented in all pages
- [x] Bot detection signals attached to all events
- [x] Assessment-specific tracking with full funnel
- [x] llms.txt for AI crawlers
- [ ] GTM tags need to be created for new custom events (in GTM dashboard)
- [ ] GA4 custom dimensions need to be configured
- [ ] GA4 conversions need to be marked
- [ ] LinkedIn/Meta pixels may need event mapping updates