Perché la nuova thumbnail mostra ancora quella vecchia
Hai cambiato la thumbnail, Studio mostra quella nuova e il feed mostra ancora quella vecchia. Non è rotto niente: l'URL dell'immagine non cambia mai e la CDN dice a ogni cache di tenersi la sua copia per due ore, header che ho misurato invece di indovinare.
Prima cosa, separa i due problemi
«La thumbnail non si aggiorna» e «la thumbnail non si vede» da fuori sembrano la stessa cosa e non hanno niente in comune. La prima è una questione di cache e si risolve da sola; la seconda è una questione di file o di permessi e non si risolverà finché non fai qualcosa.
Il test dura dieci secondi: si vede l'immagine vecchia, o non si vede nessuna immagine? Un'immagine vecchia vuol dire una copia in cache, e valgono le sezioni che seguono. Un rettangolo grigio, un fotogramma nero o un fermo immagine del video che non hai scelto tu vogliono dire che la thumbnail personalizzata non è affatto al suo posto — salta alle ultime due sezioni. Se quello che vuoi davvero è sostituire una miniatura — i passaggi, cosa azzera, se un video vecchio ne vale la pena —, è nella guida su come cambiare la miniatura.
Il numero che spiega tutto
Le thumbnail vengono servite da i.ytimg.com, e quell'host pubblica le sue regole di caching in ogni risposta. Ho richiesto tre file diversi — un hqdefault.jpg statico, un maxresdefault.jpg statico e uno dei ritagli WebP parametrizzati che l'interfaccia usa davvero — e tutti tre hanno risposto allo stesso modo:
| Header | Valore | Cosa significa |
|---|---|---|
| cache-control | public, max-age=7200 | qualsiasi cache può tenere questa immagine per due ore |
| expires | due ore dopo la richiesta | la stessa istruzione, nella forma più vecchia |
| etag | un id stabile per immagine | permette a una cache di chiedere «è cambiata?» invece di riscaricare |
| age | secondi da quando l'edge l'ha scaricata | quanto era già vecchia la copia che hai appena ricevuto |
Nella maggior parte dei casi le due ore sono tutta la storia. Non è YouTube che è lento a elaborare la tua modifica: la modifica è già fatta. Sono tutte le cache fra l'archivio di YouTube e i tuoi occhi a cui è stato detto, correttamente, che possono continuare a servire quello che hanno.
E l'URL non cambia mai
È questa la parte che rende importanti le due ore. Una thumbnail sta a un percorso costruito sull'id del video — i.ytimg.com/vi/<id>/hqdefault.jpg — senza niente che dica quale versione dell'immagine sia. Sostituisci la thumbnail e l'indirizzo resta identico byte per byte, quindi una cache che ha i byte vecchi non ha modo di sapere che dovrebbe smettere.
Ho controllato se le varianti parametrizzate si comportano in modo diverso, perché portano quelle che sembrano firme. Non è così: manomettere il token rs ha comunque restituito un'immagine valida, e manomettere il parametro sqp ha restituito un'immagine di dimensione diversa invece di un errore. Quei parametri descrivono il ritaglio, non sono un timbro di versione. Niente nello spazio degli URL lo è.
Vuol dire che il meccanismo non ha un passo di invalidazione che tu possa attivare. Una thumbnail in cache non viene cancellata: scade.
Chi ne ha una copia
Quattro cache separate, quattro orologi separati, ed è per questo che l'aggiornamento sembra così incoerente — nuova sul telefono, vecchia sul portatile, vecchia per un amico, nuova in una finestra anonima.
Il tuo browser. Ha l'immagine su disco con l'istruzione delle due ore e non la richiederà finché quella non scade.
L'edge della CDN che ti ha risposto. L'header age dice quanto era vecchia la sua copia quando ha risposto — sullo stesso file ho visto valori da 0 a 2371 secondi. Edge diverso, età diversa, quindi due persone su reti diverse vedono legittimamente immagini diverse.
Qualsiasi app che abbia raccolto un'anteprima del link. App di messaggistica, Slack, Discord e forum conservano una loro copia dell'immagine di anteprima secondo i loro tempi, che di solito sono molto più lunghi di due ore e non sono sotto il tuo controllo.
Embed e client di terze parti. Tutto ciò che usa i percorsi statici riceve la stessa istruzione delle due ore, e tutto ciò che conserva una propria copia la tiene quanto vuole.
Come vedere subito il file attuale
Non devi aspettare per sapere se la tua modifica è andata a posto: devi aspettare solo che la vedano gli altri. Tre controlli, dal più economico, e il primo basta a quasi tutti.
Il trucco dietro il primo è che una cache usa come chiave l'URL intero, query string compresa, quindi qualsiasi parametro ti inventi è una chiave nuova e perciò uno scaricamento fresco garantito. L'ho verificato: hqdefault.jpg?cb=12345 ha risposto 200 con esattamente gli stessi byte dell'URL pulito e lo stesso etag, che è quello che vuoi — una copia fresca della verità, non un'immagine diversa.
- Apri il file con un parametro inventatoIncolla i.ytimg.com/vi/<id del tuo video>/maxresdefault.jpg?cb=1 in una scheda nuova. Va bene qualsiasi cosa dopo il punto di domanda; cambiala ogni volta. Quello che vedi è ciò che l'archivio di YouTube contiene adesso, senza cache in mezzo.
- Controlla l'etag da terminale, se vuoi una provacurl -I sullo stesso URL stampa cache-control, etag e age. Annota l'etag, fai la modifica e richiedilo di nuovo: un etag diverso significa che il file archiviato è davvero un'altra immagine, qualunque cosa ti stia ancora mostrando il browser.
- Solo dopo guarda un feedUna volta che il file è giusto, le differenze che restano sono età della cache, non il tuo caricamento. Niente che fai al file farà scadere prima la copia di qualcun altro.
Cosa fare, e cosa non fare
Cosa fare: niente, per due ore. È una frase insoddisfacente ed è anche tutto il rimedio per il caso comune: la modifica è già archiviata, e l'orologio è l'unica cosa che resta.
Cosa non fare è la parte che vale la pena dire. Non ricaricare il video — la thumbnail è un oggetto separato attaccato allo stesso id del video, e un nuovo caricamento butta via ogni impression e ogni commento che il video ha, per un problema che l'attesa avrebbe risolto. Non cambiare di nuovo la thumbnail per «forzarla», perché ogni cambio non azzera niente e apre una finestra fresca di due ore su un'immagine nuova: è così che un problema da dieci minuti diventa un pomeriggio.
E se il video è in un test attivo sulle thumbnail, cambiare qualcosa a metà volo è l'unica azione che ti costa davvero qualcosa di misurabile, per le ragioni che stanno nella guida sui test A/B: non sai più quale variante ha prodotto i numeri che stai leggendo.
Le anteprime dei link sono una cache che non controlli
Quando un link al tuo video viene incollato in un'app di messaggistica, quell'app scarica la pagina una volta, legge og:image — che punta a maxresdefault.jpg, come misurato nella guida sulle thumbnail sfocate — e conserva una propria copia dell'anteprima. Da quel momento l'app ti mostra la sua istantanea, non il file di YouTube.
Non esiste un modo generale per svuotarle, e l'header delle due ore non si applica a una copia che l'app ha archiviato da sé. Due piattaforme pubblicano uno strumento per rifare la scansione della propria cache — lo Sharing Debugger di Facebook e il Post Inspector di LinkedIn — e per tutto il resto la risposta pratica è che un link pubblicato prima della modifica mantiene l'immagine vecchia, e uno pubblicato dopo prende quella nuova.
Quando non è affatto una cache
Se non c'è né l'immagine vecchia né quella nuova, la cache non è coinvolta e aspettare non serve. Tre cause, nell'ordine in cui si rivelano essere la risposta.
Le thumbnail personalizzate non sono disponibili sull'account. Il caricamento ricade silenziosamente su un fotogramma generato automaticamente. Ha una guida sua, perché i requisiti sono cambiati e i consigli vecchi sono sbagliati: perché manca l'opzione della thumbnail personalizzata.
Il file è stato rifiutato. Sopra il limite del dispositivo da cui hai caricato — 50 MB da computer, 2 MB da telefono —, un formato non supportato, o una rimozione per policy. Un caricamento rifiutato lascia al suo posto la thumbnail precedente, il che si legge esattamente come «la mia modifica non è stata applicata»: controlla che il file sia sotto il limite e in uno dei formati accettati, elencati nella guida su dimensioni e specifiche.
La variante che stai guardando non esiste. Non tutte le dimensioni esistono per tutti i video: su una sorgente più stretta di 1280 pixel, maxresdefault.jpg restituisce 404 con un piccolo corpo segnaposto. L'ho verificato su un caricamento del 2005 — maxres e sddefault entrambi 404, hqdefault regolare. Se stai facendo la prova con un URL invece che nell'interfaccia, quel 404 riguarda la variante, non la tua thumbnail. Una rimozione secondo le norme sulle miniature da fuori sembra identica e non è affatto un problema di cache.
Studio non è una prova, e nemmeno il tuo feed
Studio ti mostra il file che ha appena archiviato, senza CDN in mezzo, quindi si aggiorna subito e non ti dice niente su cosa vede uno spettatore. Il tuo feed è l'opposto: è la superficie con più probabilità di avere una copia vecchia, perché sei tu quello che l'ha visitata più di recente e quindi il tuo browser ha l'immagine in cache più vecchia di tutti.
È questa asimmetria che rende normali, nelle stesse due ore, sia «per me è aggiornata ma per il mio iscritto no» sia «per loro è aggiornata ma per me no» — e nessuna delle due osservazioni merita che tu faccia qualcosa.
Il controllo che evita tutto il problema
Quasi ogni cambio di thumbnail fatto nel panico è una decisione che si poteva prendere prima di pubblicare. Il motivo per cui la gente cambia la thumbnail un'ora dopo il caricamento è che il feed è il primo posto in cui l'ha vista accanto ad altri video — e a quel punto la modifica costa due ore di cache vecchie e, se c'è un test in corso, il test.
Vederla prima in un feed è esattamente ciò a cui serve lo strumento di anteprima: la tua thumbnail fra competitor veri, alle dimensioni rese reali, prima che le sia attaccato un video. La cura migliore per un problema di cache è non aver bisogno del secondo caricamento.
Le domande che fanno tutti
Quanto tempo ci vuole perché una thumbnail di YouTube si aggiorni?
La modifica viene archiviata immediatamente. Quello che richiede tempo è la scadenza delle cache: la CDN delle immagini di YouTube manda cache-control: max-age=7200 — due ore — quindi qualsiasi copia già scaricata può legittimamente essere servita fino a quel momento.
Come costringo YouTube a ricaricare la mia thumbnail?
Non puoi, perché l'URL dell'immagine non contiene una versione e le cache che la tengono possono solo far scadere la copia. Puoi però vedere subito il file attuale aggiungendo un qualsiasi parametro all'URL dell'immagine: è una chiave di cache nuova e forza uno scaricamento fresco.
Perché su alcuni dispositivi si vede ancora la thumbnail vecchia?
Perché ogni cache ha il suo orologio: il tuo browser, l'edge della CDN che ti ha risposto e qualsiasi app che abbia archiviato un'anteprima del link. Sullo stesso file ho misurato copie di edge vecchie da 0 a 2371 secondi, quindi in quelle due ore a persone diverse vengono servite davvero versioni diverse.
Devo ricaricare il video se la thumbnail non cambia?
No. La thumbnail è un oggetto separato attaccato allo stesso id del video, quindi un nuovo caricamento butta via ogni impression, visualizzazione e commento per un problema che due ore di attesa avrebbero risolto da sole.
La mia thumbnail non si vede per niente: è lo stesso problema?
No, e aspettare non lo risolve. Un'immagine vecchia vuol dire una cache; nessuna immagine personalizzata vuol dire che l'opzione non è disponibile sull'account, che il file è stato rifiutato per peso o formato, o che stai chiedendo una variante che per quel video non esiste.