vastlint

Nonlinear overlay VAST ads

A nonlinear overlay is an ad that displays on top of a playing video without interrupting playback. The viewer can continue watching the content while the overlay is shown. Nonlinear ads are the VAST equivalent of a banner ad over video — typically an image, animated GIF, or HTML creative rendered in a transparent layer above the player.

Nonlinear overlays are the most frequently misunderstood and incorrectly built creative type in VAST. The element structure, required attributes, and resource types are significantly different from linear ads.

Quick reference

Creative element<NonLinearAds> containing <NonLinear>
Resource typesStaticResource, IFrameResource, HTMLResource
minSuggestedDurationSuggested display time (HH:MM:SS) — advisory, not enforced
PlaybackVideo continues behind the overlay
Platform supportWeb players primarily; limited CTV support

NonLinearAds element structure

Nonlinear ads use a completely different element tree from linear ads. The creative element is <NonLinearAds> (not <Linear>), which contains one or more <NonLinear> elements. Each <NonLinear> defines one rendition of the overlay.

<VAST version="4.2">
  <Ad id="1">
    <InLine>
      <AdSystem>My Ad Server</AdSystem>
      <AdTitle>Nonlinear Overlay Ad</AdTitle>
      <Impression id="imp1"><![CDATA[https://track.example.com/impression]]></Impression>
      <Creatives>
        <Creative id="creative1" sequence="1">
          <NonLinearAds>
            <TrackingEvents>
              <Tracking event="creativeView"><![CDATA[https://track.example.com/creative-view]]></Tracking>
            </TrackingEvents>
            <NonLinear id="nl1"
              width="480" height="70"
              minSuggestedDuration="00:00:15"
              scalable="true"
              maintainAspectRatio="true">
              <StaticResource creativeType="image/png">
                <![CDATA[https://cdn.example.com/overlay-banner.png]]>
              </StaticResource>
              <NonLinearClickThrough>
                <![CDATA[https://example.com/landing]]>
              </NonLinearClickThrough>
              <NonLinearClickTracking>
                <![CDATA[https://track.example.com/nl-click]]>
              </NonLinearClickTracking>
            </NonLinear>
          </NonLinearAds>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>

Resource types

Each <NonLinear> must contain exactly one resource element:

ElementcreativeType attributeUse case
StaticResourceMIME type of the asset (e.g. image/png, image/gif)Image or animated GIF overlay
IFrameResourceNone (URL goes in element content)HTML page loaded in a sandboxed iframe
HTMLResourceNoneInline HTML injected directly into the player DOM
<!-- StaticResource: image or GIF -->
<NonLinear width="480" height="70" minSuggestedDuration="00:00:15">
  <StaticResource creativeType="image/png">
    <![CDATA[https://cdn.example.com/overlay.png]]>
  </StaticResource>
  <NonLinearClickThrough><![CDATA[https://example.com/landing]]></NonLinearClickThrough>
</NonLinear>

<!-- IFrameResource: HTML page in sandboxed iframe -->
<NonLinear width="480" height="70" minSuggestedDuration="00:00:15">
  <IFrameResource><![CDATA[https://cdn.example.com/overlay.html]]></IFrameResource>
  <!-- No ClickThrough needed — iframe handles its own clicks -->
</NonLinear>

<!-- HTMLResource: inline HTML injected into player DOM -->
<NonLinear width="480" height="70" minSuggestedDuration="00:00:15">
  <HTMLResource><![CDATA[<a href="https://example.com/landing" target="_blank">
    <img src="https://cdn.example.com/overlay.png" width="480" height="70" />
  </a>]]></HTMLResource>
</NonLinear>

Required attributes on NonLinear

The following attributes are required on each <NonLinear> element:

  • width and height — pixel dimensions of the overlay. Required for the player to allocate space and position the element.
  • minSuggestedDuration — advisory display duration in HH:MM:SS format. The player may show the overlay for a shorter or longer time; this is a suggestion, not an enforcement.

Optional but recommended:

  • scalable — whether the overlay can be scaled. Defaults to false if omitted.
  • maintainAspectRatio — whether the player should maintain the aspect ratio when scaling.
  • id — unique identifier for the nonlinear element.

→ vastlint rule: VAST-2.0-nonlinear-width-height

Tracking for nonlinear ads

Nonlinear ads support a different set of tracking events from linear ads. The <TrackingEvents> block goes inside <NonLinearAds>, not inside the individual <NonLinear> element.

EventFires when
creativeViewOverlay is rendered and visible
acceptInvitationUser expands or interacts with the overlay
collapseUser closes or collapses the overlay

Linear events (start, complete, etc.) are not applicable to nonlinear ads.

Serving nonlinear alongside a linear ad

A single VAST response can include both a <Linear> creative and a <NonLinearAds> creative within the same <Ad> block. The player plays the linear ad first, then shows the nonlinear overlay during the content that follows, or both simultaneously depending on the placement configuration.

<Creatives>
  <!-- Linear ad plays first -->
  <Creative id="linear" sequence="1">
    <Linear>
      <Duration>00:00:30</Duration>
      <MediaFiles>...</MediaFiles>
    </Linear>
  </Creative>

  <!-- Nonlinear overlay displayed during or after the linear -->
  <Creative id="overlay" sequence="2">
    <NonLinearAds>
      <NonLinear width="480" height="70" minSuggestedDuration="00:00:10">
        <StaticResource creativeType="image/png">
          <![CDATA[https://cdn.example.com/overlay.png]]>
        </StaticResource>
        <NonLinearClickThrough><![CDATA[https://example.com/landing]]></NonLinearClickThrough>
      </NonLinear>
    </NonLinearAds>
  </Creative>
</Creatives>

Common mistakes checklist

  • Using <Linear> instead of <NonLinearAds> — a nonlinear overlay is not a linear ad. Using <Linear> for an overlay image will cause the player to try to play it as a video.
  • Missing width and height — required attributes. Players cannot position the overlay without knowing its dimensions.
  • Missing creativeType on StaticResource — required attribute. Without it, the player cannot determine how to render the resource.
  • TrackingEvents inside NonLinear instead of NonLinearAds — tracking events for nonlinear go inside <NonLinearAds>, not inside the individual <NonLinear> element.
  • Expecting CTV support — most CTV platforms (Roku, Fire TV, Apple tvOS) do not support nonlinear overlays. They are a web-only format in practice.