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

  1. GA4 Event — CTA Click
- Tag type: GA4 Event - Event name: `{{Event}}` (or specifically `cta_click`) - Trigger: Custom Event → `cta_click` - Parameters: cta_text, cta_url, cta_location
  1. GA4 Event — Scroll Depth
- Tag type: GA4 Event - Event name: `scroll_depth` - Trigger: Custom Event → `scroll_depth` - Parameters: scroll_percentage, page_path
  1. GA4 Event — Assessment Funnel
- Create separate tags for each stage: - `assessment_start` → `assessment_lead_capture` → `assessment_begin_questions` → `assessment_complete` → `assessment_results` - This gives you a full funnel in GA4
  1. GA4 Event — Contact Form
- Tag type: GA4 Event - Event name: `contact_form_submit` - Trigger: Custom Event → `contact_form_submit` - Parameters: form_business_type
  1. GA4 Event — Service Interest
- Tag type: GA4 Event - Event name: `service_add` - Trigger: Custom Event → `service_add` - Parameters: service_name, service_price
  1. GA4 Event — Outbound Clicks
- Tag type: GA4 Event - Event name: `outbound_click` - Trigger: Custom Event → `outbound_click` - Parameters: outbound_url, outbound_type

Bot Filtering in GA4

Use `is_likely_human` as a custom dimension in GA4:

  1. In GA4 Admin → Custom definitions → Create custom dimension
  2. Dimension name: "Is Likely Human"
  3. Scope: Event
  4. Event parameter: `is_likely_human`

Then create segments:

Additional bot detection signals:

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