Guida pratica: creare il tuo vast.xml (VAST) e usarlo su JW Player
In questa guida impari a creare autonomamente un file VAST XML (es. vast.xml) simile a quello di esempio che vedi spesso online, e a inserirlo nel tuo player (es. JW Player). È utile per house ads, campagne dirette, test QA o quando vuoi controllare tutto tu.
Se apri
vast.xml nel browser potresti vedere un messaggio tipo: "This XML file does not appear to have any style information...". Non è un errore: significa solo che l’XML non ha stile, ma è valido da leggere per il player.- Requisiti
- Concetti base (VAST, InLine, Wrapper)
- Struttura minima di un VAST che funziona
- Template VAST pronto (consigliato: VAST 3.0)
- VAST 2.0 vs 3.0 vs 4.x: cosa scegliere
- Dove hostare il file e impostazioni server (MIME/CORS)
- Come inserirlo in JW Player
- Test & debug (prima di impazzire)
- Troubleshooting rapido
- FAQ
1) Requisiti
- 1+ file video MP4 raggiungibile via URL pubblico (meglio più risoluzioni/bitrates).
- 1 URL di destinazione (landing page) per il click: es.
https://tuosito.it/offerta. - HTTPS ovunque (VAST + video + click). Evita HTTP su siti HTTPS.
- Server/CDN dove caricare
vast.xml(o endpoint che lo genera).
- URL VAST deve rispondere HTTP 200 e contenere XML valido.
- I MediaFile dovrebbero essere link diretti a .mp4 (niente pagine HTML, niente player embed).
- Evita redirect multipli e URL “protetti” (token scaduti, login, hotlink protection aggressiva).
- Durata coerente con il video reale (es. 00:00:10).
2) Concetti base (VAST, InLine, Wrapper)
- VAST: è una risposta XML che descrive una pubblicità video (media, click, tracking).
- InLine: il VAST contiene direttamente i MediaFile (il caso più semplice).
- Wrapper: il tuo VAST “punta” a un altro VAST (utile per demand partner / ad server esterni).
Se vuoi “partire subito” e ridurre variabili: usa InLine + 1 pre-roll.
3) Struttura minima di un VAST che funziona
Questi sono i blocchi fondamentali che quasi tutti i player si aspettano:
<VAST version="..."><Ad> > <InLine><AdSystem>,<AdTitle><Creatives> > <Creative> > <Linear><Duration><MediaFiles> > <MediaFile>(uno o più MP4)<VideoClicks> > <ClickThrough>
Aggiungi
<Impression> e alcuni <Tracking event="...">: non sono “obbligatori” sempre, ma aiutano debug e metriche.4) Template VAST pronto (consigliato: VAST 3.0)
Copia questo template, sostituisci gli URL e caricalo come vast.xml. È pensato per massima compatibilità (pre-roll singolo, progressive MP4).
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="3.0">
<Ad id="1">
<InLine>
<AdSystem version="1.0">HouseAd</AdSystem>
<AdTitle><![CDATA[ Titolo della tua ADV ]]></AdTitle>
<Impression><![CDATA[ https://tracking.tuosito.it/impression?ad=1 ]]></Impression>
<Error><![CDATA[ https://tracking.tuosito.it/error?ad=1&code=[ERRORCODE] ]]></Error>
<Creatives>
<Creative sequence="1" id="1">
<Linear>
<Duration>00:00:10</Duration>
<TrackingEvents>
<Tracking event="start"><![CDATA[ https://tracking.tuosito.it/start?ad=1 ]]></Tracking>
<Tracking event="firstQuartile"><![CDATA[ https://tracking.tuosito.it/q1?ad=1 ]]></Tracking>
<Tracking event="midpoint"><![CDATA[ https://tracking.tuosito.it/q2?ad=1 ]]></Tracking>
<Tracking event="thirdQuartile"><![CDATA[ https://tracking.tuosito.it/q3?ad=1 ]]></Tracking>
<Tracking event="complete"><![CDATA[ https://tracking.tuosito.it/complete?ad=1 ]]></Tracking>
</TrackingEvents>
<VideoClicks>
<ClickThrough><![CDATA[ https://tuosito.it/offerta ]]></ClickThrough>
<ClickTracking><![CDATA[ https://tracking.tuosito.it/click?ad=1 ]]></ClickTracking>
</VideoClicks>
<MediaFiles>
<MediaFile delivery="progressive"
type="video/mp4"
width="640" height="360"
bitrate="800"><![CDATA[ https://cdn.tuosito.it/ads/ad-640x360.mp4 ]]></MediaFile>
<MediaFile delivery="progressive"
type="video/mp4"
width="1280" height="720"
bitrate="2500"><![CDATA[ https://cdn.tuosito.it/ads/ad-1280x720.mp4 ]]></MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>
Il player sceglie in genere il file più adatto in base a rete e dispositivo. Aggiungi 2–3 varianti (360p/720p/1080p) se puoi.
5) VAST 2.0 vs 3.0 vs 4.x: cosa scegliere
- VAST 2.0: molto semplice e “storico”. Ottimo per esempi minimi.
- VAST 3.0: spesso il miglior compromesso compatibilità/feature.
- VAST 4.x: più moderno (es. miglioramenti su meccaniche e misurazioni), ma se vuoi massima compatibilità su stack misti, spesso si parte da 3.0.
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="2.0">
<Ad id="229">
<InLine>
<AdSystem version="1.0">HouseAd</AdSystem>
<AdTitle><![CDATA[ La tua ADV ]]></AdTitle>
<Creatives>
<Creative sequence="1" id="331">
<Linear>
<Duration>00:00:10</Duration>
<VideoClicks>
<ClickThrough><![CDATA[ https://tuosito.it/offerta ]]></ClickThrough>
</VideoClicks>
<MediaFiles>
<MediaFile delivery="progressive" bitrate="600" width="640" height="360" type="video/mp4">
<![CDATA[ https://cdn.tuosito.it/ads/ad-640x360.mp4 ]]>
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>
6) Dove hostare il file e impostazioni server (MIME/CORS)
Carica vast.xml su un dominio HTTPS (CDN o webserver). Consigli pratici:
- Header corretto: Content-Type: application/xml (o
text/xml). - CORS: spesso conviene permettere la lettura cross-origin:
Access-Control-Allow-Origin: *. - Evita cache aggressiva durante i test (poi puoi metterla in produzione).
Apache (.htaccess)
AddType application/xml .xml
Header set Access-Control-Allow-Origin "*"
Nginx
types { application/xml xml; }
add_header Access-Control-Allow-Origin *;
Il MediaFile deve essere un URL diretto al file MP4. Se l’URL restituisce HTML (pagina, redirect strano, player embedded), il player può fallire con errori tipo “no playable media”.
7) Come inserirlo in JW Player
In JW Player di solito ti basta indicare l’URL del tuo vast.xml come ad tag (pre-roll). Qui sotto un esempio generico via setup (la configurazione esatta dipende dalla tua versione/licenza).
jwplayer("player").setup({
file: "https://cdn.tuosito.it/video/contenuto.mp4",
width: "100%",
aspectratio: "16:9",
advertising: {
client: "vast",
tag: "https://cdn.tuosito.it/ads/vast.xml"
}
});
Aggiungi un parametro all’URL del tag (es.
?cb= + numero casuale) quando lo generi lato pagina/app, oppure esponi un endpoint che genera il VAST al volo.8) Test & debug (prima di impazzire)
- Apri l’URL del VAST in browser: deve rispondere con XML e non con errori/redirect infiniti.
- Controlla Network/Console: vedi se il player scarica il VAST e poi i MediaFile.
- Disattiva ad blocker durante i test (possono bloccare URL di tracking o domini noti).
- Prova con 1 MediaFile (solo 1 mp4) e poi aggiungi varianti e tracking.
- CORS assente (aggiungi
Access-Control-Allow-Origin). - Mixed content (VAST in HTTPS ma MP4 in HTTP).
- MP4 non “progressive” / encoding strano (prova un MP4 H.264 + AAC standard).
- Il server del MP4 richiede referer/token/cookie e il player non può scaricarlo.
9) Troubleshooting rapido
Il pre-roll non parte e parte subito il contenuto
- Il VAST torna vuoto o invalido (XML malformato, tag mancanti).
- Il
MediaFilenon è scaricabile o non è MP4 diretto. - CORS / HTTPS / redirect.
Il click non funziona
- Verifica che
<ClickThrough>abbia URL valido e in HTTPS. - Evita caratteri non encodati nell’URL (spazi, ecc.).
Tracking non arrivano
- Ad blocker o policy browser bloccano tracking su domini sospetti.
- Usa un dominio “pulito” (tuo) per tracking e controlla server logs.
10) ? FAQ
Posso monetizzare davvero con un VAST “statico”?
Un VAST statico è perfetto per house ads o campagne dirette. Per programmatic/asta e ottimizzazione automatica di solito serve un ad server/SSP che genera VAST dinamici.
Meglio VAST 2.0 o 3.0?
Se vuoi partire semplice, va benissimo 2.0. Se vuoi un template più moderno e robusto, usa 3.0 (come in questa guida).
Devo per forza mettere Impression/Tracking?
Non sempre, ma è fortemente consigliato per misurare e fare debug (sapere dove si rompe).
Tip finale: parti con 1 solo MP4, 1 ClickThrough, 0 tracking. Quando vedi il pre-roll partire, aggiungi Impression/Tracking e più MediaFile.
