VAST examples / Tracking
Multiple <Impression> elements with the same URL
VAST 4.20 errors3 warningsVAST-2.0-duplicate-impression
The scenario
A publisher's ad server appended its impression beacon to a response that already carried the same beacon from an upstream wrapper, so the final document ended up with three identical <Impression> URLs.
The broken tag
<?xml version="1.0" encoding="UTF-8"?>
<!-- WARNING: Duplicate <Impression> elements with same URL — fires VAST-2.0-duplicate-impression -->
<VAST version="4.2">
<Ad id="1">
<InLine>
<AdSystem>Acme</AdSystem>
<AdTitle>Duplicate Impression Ad</AdTitle>
<AdServingId>SERVING-001</AdServingId>
<Impression id="imp1"><![CDATA[https://track.example.com/impression]]></Impression>
<Impression id="imp2"><![CDATA[https://track.example.com/impression]]></Impression>
<Impression id="imp3"><![CDATA[https://track.example.com/impression]]></Impression>
<Creatives>
<Creative>
<UniversalAdId idRegistry="ad-id.org">TEST-001</UniversalAdId>
<Linear>
<Duration>00:00:30</Duration>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4" width="1280" height="720">
<![CDATA[https://cdn.example.com/video.mp4]]>
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>What the validator reports
Running this tag through vastlint produces the following. The primary failure for this example:
VAST-2.0-duplicate-impressionIAB VAST 2.0 §2.3.3Duplicate <Impression> URL found — the same pixel appears more than once
The same tag also surfaces these secondary findings — real tags rarely fail in isolation:
VAST-2.0-version-mismatchIAB VAST 2.0 §2.1VAST version attribute does not match structural signals in the document
VAST-2.0-linear-tracking-quartilesIAB VAST 4.1 §3.14.2line 15<Linear> has no standard quartile tracking events (start/firstQuartile/midpoint/thirdQuartile/complete) — ad will serve but measurement system receives no signal
VAST-4.1-mezzanine-recommendedIAB VAST 4.1 §3.9.2line 17<MediaFiles> has no <Mezzanine> — ad-stitching servers may reject this tag in CTV/SSAI contexts
Why it breaks
The InLine contains multiple <Impression> elements that all point to the exact same URL. The player fires every <Impression> on render, so an identical URL repeated three times is called three times for a single ad view. Distinct impression URLs (first-party plus third-party verification) are normal and expected; identical duplicates are not — they represent the same beacon accidentally added more than once.
What it costs
The duplicated beacon inflates the impression count for that endpoint, so reporting over-states delivery for one ad view. On a CPM buy that can mean over-billing and a reconciliation dispute when the buyer's own count (or the verification vendor's) does not match. Even when caught, it erodes trust between buyer and seller and triggers manual audits.
The fix
De-duplicate identical <Impression> URLs so each beacon appears once. Keep genuinely different impression endpoints (server, verification, partner) — the rule targets exact-URL repeats, not multiple distinct trackers.
<!-- one beacon per distinct endpoint -->
<Impression id="srv"><![CDATA[https://ads.example.com/imp]]></Impression>
<Impression id="verify"><![CDATA[https://verify.example.com/imp]]></Impression>VAST XML fragment only. This excerpt belongs inside a complete VAST document, so standalone validation will fail until it is wrapped in a full <VAST>response.
Check your own version of this tag
Paste the resolved XML to run the same spec check, test a live tag URL, or inspect the wrapper chain hop by hop.
Related examples
- A <Tracking> event that was removed in VAST 4.x — VAST-4.0-tracking-event-removed
- An InLine ad with no <Impression> element — VAST-2.0-inline-impression
- An InLine ad missing the <AdSystem> element — VAST-2.0-inline-adsystem
- An InLine ad missing the <AdTitle> element — VAST-2.0-inline-adtitle