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
srcisad.doubleclick.net/ddm/adi/or/ddm/adj/ - An img whose
srcis/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 hittingadi/adjfrom a validator, can fire impressions. - Do not rename the file to
.xmlor 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.