VAST companion ads not showing
Short answer
A companion that never appears is usually one of four XML problems: there is no <CompanionAds> block, a <Companion> has no resource, width and height do not match any slot, or required="all" blocked the whole ad. Most CTV players also ignore companions entirely.
Why this happens
Companion banners are not drawn by the video player. The page or app matches width and height to a display slot, then loads <StaticResource>, <IFrameResource>, or <HTMLResource>. If that match fails, the video can still play while the banner slot stays empty. That looks like a player bug. It is usually the tag.
Start with the XML the player actually received, not the trafficking template. Wrappers drop companions when followCompanions is false. Empty InLine responses (error 303) never reach a companion at all.
Copyable fix example
<CompanionAds required="any">
<Companion id="rect" width="300" height="250">
<StaticResource creativeType="image/png">
<![CDATA[https://cdn.example.com/companion-300x250.png]]>
</StaticResource>
<CompanionClickThrough>
<![CDATA[https://advertiser.example.com/landing]]>
</CompanionClickThrough>
</Companion>
<Companion id="leaderboard" width="728" height="90">
<StaticResource creativeType="image/png">
<![CDATA[https://cdn.example.com/companion-728x90.png]]>
</StaticResource>
</Companion>
</CompanionAds>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.
Exact rule pages
Use the right tool when a companion never renders
Paste resolved XML into the validator to catch empty Companion nodes. Fetch a live URL in the tester to see which companions survived the chain. Inspect wrapper hops when companions vanish after a redirect.