VASTlint

Why a Campaign Manager display tag will not validate as VAST

Short answer

If the paste starts with <ins class='dcmads'>, an iframe to /ddm/adi/, or a Campaign Manager img pixel, it is a page slot, not a VAST document. A VAST validator cannot make it valid video XML. Export the in-stream pre-fetch tag (pfadx) from the video placement and paste that instead.

This is the usual mix-up when someone copies a tag out of Campaign Manager 360 (or an older DoubleClick trafficker UI) and drops it into a VAST tester. The UI called it an ad tag. The tester called it malformed XML. Both were talking past the format.

What this paste looks like

Display exports look like HTML you would drop on a site, not like <VAST>.

<ins class='dcmads' style='display:inline-block;width:970px;height:250px'
  data-dcm-placement='N0000.SITE/B0000.0000'
  data-dcm-rendering-mode='script'
  data-dcm-https-only
  data-dcm-param-dsp_bidurl_0_='%%PATTERN:url%%'>
  <script src='https://www.googletagservices.com/dcm/dcmads.js'></script>
</ins>

Other display shapes that fail the same way:

  • An iframe whose src is ad.doubleclick.net/ddm/adi/ or /ddm/adj/
  • An img whose src is /ddm/trackimp/
  • A full HTML document, or a snippet that starts with <ins> after a comment

HTML boolean attributes such as data-dcm-https-only are legal in HTML and illegal in XML. That is why a VAST parser used to report a parse error. The document was never VAST; the parser just failed first.

Display and in-stream are different exports

Campaign Manager 360 does not have one tag that is both a 970x250 banner and a VAST linear ad. A display placement renders in a page. An in-stream placement is requested by a video player and must return VAST XML. The in-stream export is a pre-fetch URL on /ddm/pfadx/, usually with dcmt=text/xml and a VAST version parameter.

Size, rendering-mode=script, and a DSP bid URL on the ins tag are display signals. They do not describe a video creative a player can select.

There is no VAST document to infer

Do not try to rescue the paste by rewriting it:

  • Do not wrap the ins tag in <HTMLResource> and call it a companion. A player still has no <MediaFile> to play, and a display placement is not a companion creative.
  • Do not rewrite /ddm/adi/ to /ddm/pfadx/ from a banner placement. The in-stream tag is generated from a different placement. Fetching a guessed pfadx URL, or hitting adi/adj from a validator, can fire impressions.
  • Do not rename the file to .xml or add a fake <VAST> root around the HTML.

What to paste instead

In Campaign Manager 360, open the in-stream (video) placement and export the VAST pre-fetch tag. It looks like a URL, not an ins element:

https://ad.doubleclick.net/ddm/pfadx/N0000.SITE/B0000.0000;sz=0x0;ord=[timestamp];dcmt=text/xml;dc_vast=4;ltd=

Paste that URL into the VAST tag tester (it will fetch the XML), or paste the XML the URL returns into the validator. If you only have a display placement, create or use the video placement. There is nothing to validate until that export exists.

What vastlint reports

Pasting display HTML now returns VAST-2.0-html-display-tag, not a generic parse error. The message names the format and points at pfadx. A real VAST document that embeds the same HTML inside a companion <HTMLResource> is left alone; that is a companion creative, not a mix-up.

Confirm the paste, then export the in-stream tag

Drop the ins, iframe, or img snippet into the tester or validator to see VAST-2.0-html-display-tag. Then go back to Campaign Manager and export pfadx from the video placement. The inspector is only useful once you have a VAST URL.

Frequently asked questions

Is a dcmads ins tag VAST?

No. It loads dcmads.js into a page slot. A video player looking for <VAST> will never get a media file from that snippet.

Can I test the display tag somewhere?

Yes, as display. Load it on a sandbox page and watch the network panel. The ad tag tester explains that path. It is not a VAST check.

Why did this used to say the XML was malformed?

Boolean HTML attributes and unquoted HTML are not well-formed XML. The parser stopped before anything could explain that you had the wrong tag type. The display-tag rule runs on the raw string first so the report names CM360 display instead of a syntax error.

Further reading