Squeezeback ads in VAST XML
A squeezeback shrinks the content into a smaller frame and fills the vacated area with an ad. Broadcast has done this for decades, usually as an L-bar during credits or a sports break. It is one of the six CTV Ad Portfolio formats, and it is the one where geometry, not markup, is the hard part.
The ad plays while content is still playing. That distinguishes it from pause and screensaver, which own the whole screen, and it aligns it with overlay, which sits on top of content rather than beside it.
Quick reference
| VAST element | <NonLinear> inside <NonLinearAds> |
| Declare version | 4.2 or 4.3. Not 4.4 |
| plcmt | 8 |
| playbackmethod | 1 or 2, the pre-portfolio values |
| pos | 11, 12, 13, 16 or 17 depending on layout |
| Content keeps playing | Yes. Audio usually stays with the content |
A squeezeback tag
<VAST version="4.2" xmlns="http://www.iab.com/VAST">
<Ad id="squeeze-1">
<InLine>
<AdSystem version="1.0">My Ad Server</AdSystem>
<AdTitle>L-bar sponsorship</AdTitle>
<AdServingId>d41e-sqz-0107</AdServingId>
<Impression><![CDATA[https://track.example.com/imp]]></Impression>
<Creatives>
<Creative id="c1">
<UniversalAdId idRegistry="Ad-ID">SQZ9012</UniversalAdId>
<NonLinearAds>
<NonLinear width="1920" height="360">
<Duration>00:00:10</Duration>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4" width="1920" height="360">
<![CDATA[https://cdn.example.com/lbar.mp4]]>
</MediaFile>
</MediaFiles>
<NonLinearClickThrough><![CDATA[https://brand.example.com]]></NonLinearClickThrough>
</NonLinear>
<TrackingEvents>
<Tracking event="creativeView"><![CDATA[https://track.example.com/view]]></Tracking>
<Tracking event="overlayViewDuration"><![CDATA[https://track.example.com/duration]]></Tracking>
</TrackingEvents>
</NonLinearAds>
</Creative>
</Creatives>
<Extensions>
<Extension type="plcmt" ext="adcom"><plcmt>8</plcmt></Extension>
<Extension type="pos" ext="adcom"><pos>12</pos></Extension>
<Extension type="playbackmethod" ext="adcom"><playbackmethod>2</playbackmethod></Extension>
<Extension type="attr" ext="adcom"><attr>23</attr></Extension>
</Extensions>
</InLine>
</Ad>
</VAST>pos is doing the real work
For pause and screensaver, position is nearly binary: fullscreen or partial. Squeezeback is different, because the shape of the vacated area is the format. An L-bar along the bottom and right is a different creative from a bottom banner, which is a different creative from a side panel. The portfolio extends pos past its old ceiling of 7 to describe these layouts, using values in the 11 to 17 range for squeezeback geometry.
The consequence for trafficking is that the creative dimensions and the declared position have to agree. A 1920x360 asset is a bottom bar. Declaring it with a side-panel position produces an ad that either letterboxes into the wrong region or gets rejected at render. That is the class of failure VASTlint reports as VAST-4.4-adcom-pos-format-mismatch, where the position value and the format claimed by plcmt describe different experiences.
Be honest about what a parser can settle here. It can check that pos carries a defined enumeration value, that the value belongs to the format claimed by plcmt, and that the NonLinear declares width and height at all. It cannot check that a 1920x360 asset is the right shape for the region a specific publisher vacates, because that region is a publisher rendering decision and does not appear in the tag.
Audio belongs to the content
Squeezeback does not get its own playback method values. It reuses 1 and 2, the pre-portfolio auto-play values, because the ad is not the primary audio source. Content keeps playing and keeps its audio, and the squeezeback creative is visual.
Practically: do not ship a squeezeback whose message depends on sound. If the creative has an audio track at all, expect it to be muted or mixed under the content, and expect that behaviour to vary by publisher.
Duration and the break it sits in
A squeezeback is scheduled inside content, usually at a moment the publisher chooses: credits, a natural break, a scoreboard pause. The scheduling lives in VMAP or in the publisher's own break logic, not in the VAST document. What the VAST document owns is how long the creative runs once it starts.
Declare <Duration> on a video asset. Without it there is no timeline for overlayViewDuration to measure against, which VASTlint reports as VAST-4.4-nonlinear-video-no-duration.
Common mistakes checklist
- Creative dimensions that do not match the declared position. The most common squeezeback failure, and the one that renders wrong rather than failing loudly.
- Borrowing pause or screensaver playback methods. Squeezeback uses 1 and 2. Values 8 to 11 belong to other formats.
- Relying on the audio track. The content owns the audio.
- Omitting width and height on the NonLinear. The renderer has nothing to fit into.
- Interactive-only creative. Rare in squeezeback, since the viewer is watching content rather than the ad, but the fallback rule still applies. See the pause ad guide.
- Declaring version 4.4. Use 4.2 or 4.3, as IAB's own examples do.