Skip to content

Specsavers Adbubble - Tracking Issues (April 2026)

Creative 90597 - Bubble/Expandable format, delivered via GAM on TV2.no.

What's Wrong

  1. Viewability ~0% - 493 viewable impressions out of 990k (0.05%). Bubble format normally sits at 96%+.
  2. Interacted was 0% for 10 days, then jumped to 23% - No interacted data April 14-23, then suddenly 23% from April 24 after a rebuild.
  3. Flow data gap - 5,059 started conversations but only ~227 appear in flow level 0. Continue rates show 0% despite users clearly progressing between levels.

Potential Causes

Interacted (confirmed fixed)

  1. Engine 6.8.4 bug: creativeContainerClicked() in Creative.vue used @click.self which never fires because CreativeBody covers the entire container. creativeClickedOnce was never set, so no "interacted" events were sent.
  2. Fixed in 6.8.5 with @click.capture="handleFirstInteraction" which catches the first trusted click anywhere in the creative.
  3. The 23% rate post-fix may be slightly inflated because close button (RemoveButton) also triggers handleFirstInteraction.

Viewability (~0%)

  1. GAM iframe containment - Expandable stub tries to break out with window.top.document but fails silently in cross-origin GAM iframes. Creative runs trapped inside the iframe.
  2. IntersectionObserver scope - Inside a cross-origin iframe, IntersectionObserver checks visibility against the iframe viewport, not the user's actual viewport. The 50% threshold may never be met depending on iframe dimensions.
  3. TCF/GDPR gating - Visibility.setup() is only called when tcfTrackingEnabled is true. If publisher CMP blocks Cavai vendor 729 or purpose 7, viewability tracking is skipped entirely. However, the check only blocks on explicit false, so this is less likely.
  4. Expandable initial state - Creative container starts with visibility: hidden; position: fixed; bottom: 0. IntersectionObserver is set up immediately at init, but the element may not register as intersecting depending on browser behavior with hidden elements.

Flow data gap

  1. Expected behavior for expandable - conversationFlow.ts (line 59-66) has an early return when !creativeExpanded && creativeType === EXPANDABLE. Flow components are only processed after expansion.
  2. The gap between 5,059 started and 227 in flow level 0 may simply be users who expanded, browsed the slider, but never clicked a glasses choice.
  3. Continue rates at 0% suggest the aggregation pipeline isn't linking flow steps correctly for this creative type.

Potential Solutions

  1. Viewability in iframes - Investigate whether the bubble breaks out of the GAM iframe on the actual publisher page. Compare with other Adbubble creatives that have normal viewability (96%+) to see if they use a different delivery method.
  2. IntersectionObserver fallback - Consider adding a fallback for cross-origin iframes: use postMessage to the parent to check actual viewport visibility, or use the SafeFrame API ($sf.ext.inViewPercentage()) when SafeFrame is detected.
  3. Interacted inflation - Consider whether close button clicks should count as "interacted". Could filter by checking if numUserActions > 0 rather than creativeClickedOnce.
  4. Flow continue tracking - Investigate why continue rates are 0% in aggregation despite users progressing between flow levels.

Key Files

FileRelevance
Creative-Engine/src/components/creative/Creative.vuehandleFirstInteraction fix (6.8.5)
Creative-Engine/src/analytics/visibility.tsIntersectionObserver setup, viewability tracking
Creative-Engine/src/analytics/analytics.tsTCF gating of visibility, sendAnalytics
Creative-Engine/src/analytics/TCF.tsTCF consent check (vendor 729, purpose 7)
Creative-Engine/src/logic-system/processors/conversationFlow.tsExpandable flow early return (line 59-66)
Creative-Engine/templates/tagstub/Expandable.tsStub iframe breakout logic
Creative-Engine/templates/tagstub/helpers/getTopmostDocument.tsCross-origin fallback

Internal documentation