YouTube Engagement
DeferredGA4-only signal, never a Google Ads conversion goal — deprioritized with the diagnosis held, not abandoned.
Overview
Tracks watch-time milestones on the embedded introduction video. Not business-critical (GA4-only, never wired to a Google Ads conversion action), and final single-firing verification was not conclusively confirmed before this was deprioritized.
What Was Attempted
The native GTM YouTube Video trigger initially failed to fire at all — root cause was two-fold: the embedded iframe was missing enablejsapi=1&origin= params, and separately, script-src was missing a CSP allowlist entry for youtube.com.
After fixing both, native detection worked — but so did a custom-built, explicit dataLayer-based tracking solution built in parallel, resulting in duplicate event firing for the same video watch.
Diagnosis technique worth keeping regardless of this specific bug’s outcome: when suspecting two independent tracking systems are firing for the same event, check the fired event’s own field list for values one system’s code doesn’t reference at all. Here, videoDuration/videoCurrentTime/videoElapsedTime/videoVisible appeared in a fired event despite the custom code never setting any of those fields — direct proof GTM’s native auto-detection was firing independently and simultaneously.
Final state: reverted to native-trigger-only. The live GTM export confirms only one native YouTube Video trigger and one clean GA4 - YouTube Engagement tag currently exist — no duplicate custom tag remains. But final single-firing verification after the revert was not conclusively confirmed before this was deprioritized.
The tag’s event name is computed dynamically via a JS - Video Event Name variable ("video_" + the native Video Status built-in variable) — this is a thin formatting layer over the native trigger’s own data, not a second parallel tracking system.
Bugs & Fixes
YouTube duplicate-firing diagnosis technique
Symptom
Suspected two independent tracking systems both firing for the same event.
Root Cause
Confirmed by checking the fired event’s own field list for values one system’s code doesn’t reference at all — videoDuration/videoCurrentTime/videoElapsedTime/videoVisible appeared despite the custom-built tracking code never setting any of those fields, directly proving GTM’s native auto-detection was firing independently and simultaneously.
Fix
A useful diagnostic method worth keeping regardless of this specific bug’s outcome (ultimately deferred unresolved — see YouTube Engagement goal page).