Troubleshooting

Video Engagement Tracking Not Working on Webflow

3 min read··By the TrackingCoder team
🔧

Common reasons video-engagement tracking doesn’t fire

  1. GTM container not published - You imported the container but didn’t click Submit → Publish.
  2. GTM snippet not installed on your site - The GTM code needs to be in your site’s <head> and <body>.
  3. YouTube iframe missing enablejsapi=1 - The YouTube IFrame Player API only sends progress events when the iframe URL contains enablejsapi=1. Without it, no play / pause / progress events reach the page - not even from the official Google player. TrackingCoder rewrites the URL automatically, but caching plugins and lazy-load scripts often replace the iframe with the original URL, breaking the param.
  4. Vimeo player.js library not loaded - Vimeo events are exposed via https://player.vimeo.com/api/player.js. If that script is blocked, deferred, or never reaches the page, no events fire. Check the Network tab for the file.
  5. HTML5 <video> events missing - Native HTML5 video events (play, pause, ended, timeupdate) only fire on the <video> element directly. If your tracking script attaches to a wrapper or button instead, no events fire.
  6. Lazy-loaded video iframe - Pages that defer video iframes until scroll-into-view (Divi, Elementor, LiteSpeed lazy-load) replace the original iframe AFTER the page loads. A listener attached on DOM Ready won’t see the late-arriving iframe. The TrackingCoder snippet uses a MutationObserver to handle this, but a hostile lazy-load script can re-replace the iframe and strip the param a second time.
  7. Milestone never reached - If you only enabled the 100% milestone but the video is 30 minutes long, almost no users will reach it. Milestones at 0% (start), 25%, 50%, 75% give a more useful funnel and fire on every play.

Step-by-step debugging checklist

  1. Verify GTM is installed - Visit your site, right-click → View Page Source, search for “GTM-”. If you don’t see it, GTM isn’t installed.
  2. Check GTM Preview mode - In GTM, click Preview. Navigate your site and trigger the event. Look for your tag in the Tags Fired section.
  3. Check the trigger - If the tag shows as “Not Fired”, click on it to see which trigger conditions aren’t met.
  4. Identify the video type first - Right-click the video and inspect. Is it <video> (HTML5), <iframe src="youtube.com/..."> (YouTube), or <iframe src="player.vimeo.com/..."> (Vimeo)? The fix is different for each.
  5. For YouTube: check enablejsapi=1 - With GTM Preview open, inspect the iframe element on the live page. Its src attribute should contain enablejsapi=1. If it doesn’t, a lazy-load or caching script is overwriting it after our snippet ran. You’ll need to either disable the lazy-load for that video or move the snippet to fire AFTER the iframe is final.
  6. For HTML5: open the console and listen manually - Run document.querySelector('video').addEventListener('play', () => console.log('play')). Click play. If “play” doesn’t log, the video is in an iframe (different origin) and HTML5 events can’t cross the boundary.
  7. Check GTM Preview while playing - Play the video, scrub through it, let it end. You should see tc_video_engagement events in the GTM event timeline at each milestone you enabled. If you see nothing, the snippet didn’t attach to the player.

How to verify it’s working

  1. Open GTM Preview/Debug mode
  2. Navigate to your site
  3. Trigger the event (play, scrub through, and finish a video)
  4. Check the GTM debug panel - your tag should appear under “Tags Fired”
  5. Check GA4 DebugView (GA4 → Admin → DebugView) to confirm the event arrived

Still didn’t work?

Our team can help. Describe what’s happening and we’ll get back to you within 24 hours.

Still didn't work? Report this issue

Fill in the details below and our team will review it within 3-5 business days. We aren't obliged to refund - but if we genuinely can't make it work, we may credit you back. Either way, your credits remain usable on a different event or site.

No need to type https:// - we'll add it for you.

Min 20 characters (0/20).

Context automatically included: video engagement tracking on webflow

Skip the manual setup

TrackingCoder detects your CMS and plugins automatically, then generates ready-to-use tracking code. No more adapting generic tutorials - get code tailored to your exact setup in under 2 minutes.

Try TrackingCoder Free →

2 free credits on signup. No card required.