Immagini Responsive (srcset)

Come servire immagini responsive con gli attributi srcset e sizes e l'elemento picture, quando usarli, e come le immagini responsive risolvono LCP e CLS senza essere un segnale di ranking diretto.

Prima pubblicazione: 2 lug 2026 · Ultimo aggiornamento: 3 ago 2026 · Advanced
Lingue

Le immagini responsive permettono al browser (tramite srcset + sizes) o all'autore (tramite <picture>) di servire l'immagine della dimensione giusta per ogni dispositivo. srcset/sizes è il cambio di risoluzione (stessa immagine, il browser sceglie — un suggerimento); <picture> è il cambio di direzione artistica o di formato (ritagli/formati decisi dall'autore — un comando). La maggior parte dei siti ha bisogno solo di srcset/sizes. Questo non è un segnale di ranking diretto e non cambia ciò che Google indicizza — Google indicizza l'URL di src — ma è la soluzione concreta che Lighthouse raccomanda per le immagini sovradimensionate (il suo audit "Properly size images" fallisce con uno scarto di 4KiB) e, abbinato a width/height espliciti, è come si previene il CLS. Mantieni il testo alt identico e gli URL delle immagini stabili tra i breakpoint per l'indicizzazione mobile-first. Riutilizzo lo stesso schema srcset + width/height del mio articolo su Ahrefs CLS. Si annida sotto l'hub Image SEO.

TL;DR — Due lavori, una famiglia di sintassi. srcset/sizes su <img> = resolution switching (stessa immagine, il browser sceglie la migliore — un suggerimento); <picture> = art direction o format switching (ritagli/formati decisi dall’autore — un comando). La maggior parte dei siti ha bisogno solo del primo. Le immagini responsive non sono un segnale di ranking diretto e non cambiano ciò che Google indicizza — Google indicizza l’URL src, quindi mantieni testo alt, nomi file e URL delle immagini stabili tra i breakpoint (indicizzazione mobile-first). Il vero vantaggio sono i Core Web Vitals: dimensionare correttamente le immagini è la soluzione dietro l’audit “Properly size images” di Lighthouse (fallisce con uno scarto di 4KiB), e width/height (o aspect-ratio) — non srcset — è ciò che previene il CLS. Non caricare in lazy-load l’immagine LCP. Riutilizzo esattamente il pattern srcset + width/height dal mio articolo Ahrefs sul CLS.

Evidence for this claim The HTML responsive-image features srcset, sizes, and picture let browsers select an appropriate image candidate. Scope: Current HTML responsive image behavior. Confidence: high · Verified: WHATWG HTML: Responsive images Evidence for this claim Google can process responsive images and recommends src as a fallback while using srcset or picture for responsive delivery. Scope: Current Google Images responsive-image guidance. Confidence: high · Verified: Google Search Central: Responsive images

Due lavori diversi, una famiglia di sintassi

Tutto in questo argomento si riduce a due meccanismi, e metà della confusione là fuori nasce dal mescolarli:

  1. Cambio di risoluzione — la stessa immagine a dimensioni o densità di pixel diverse. Dai al browser un menu con srcset e sizes sull’<img>, e il browser decide quale file scaricare in base al viewport e alla densità dello schermo. Questo è il caso comune.
  2. Art direction — un’immagine davvero diversa per condizione: un ritaglio largo su desktop, un ritaglio verticale stretto su mobile, o un formato di file completamente diverso. Qui tu imponi la scelta con l’elemento <picture>.

Il corso web.dev Learn: Responsive images spiega la differenza esattamente nel modo giusto: con srcset il browser riceve suggerimenti, mentre “the picture element gives commands.” E la frase che definisce l’ambito, degna di essere tatuata sul muro, sempre da web.dev: “You probably won’t need to use the picture element for most of your responsive images — the srcset and sizes attributes on the img element cover a lot of use cases.” (traduzione) «Probabilmente non avrai bisogno di usare l’elemento picture per la maggior parte delle tue immagini responsive — gli attributi srcset e sizes sull’elemento img coprono molti casi d’uso.» Ricorri a <picture> solo quando ti serve davvero un’immagine diversa, non una dimensione diversa della stessa.

srcset e sizes — cambio di risoluzione

Descrittori w vs. descrittori x

srcset accetta un elenco separato da virgole di file candidati, ciascuno etichettato con un descrittore. Ce ne sono due tipi:

  • Descrittori di larghezza (w) — dichiari la larghezza intrinseca in pixel di ogni file (puppy-2000.jpg 2000w). Il browser combina questo con il tuo valore sizes per capire quale file si adatta meglio allo spazio e alla densità di pixel del dispositivo. Questa è l’opzione flessibile e quella che userai più spesso.
  • Descrittori di densità di pixel (x) — dichiari quale file è per quale rapporto di pixel del dispositivo (logo.png 1x, logo@2x.png 2x). Usali per immagini a dimensione fissa (un avatar, un logo) dove la dimensione visualizzata non cambia mai; non ti serve sizes con i descrittori x.

Regola pratica: immagini fluide a larghezza di contenuto → descrittori w + sizes; immagini UI a dimensione fissa → descrittori x.

Perché sizes è importante (e cosa succede se lo salti)

Con i descrittori w, sizes non è un optional estetico — è il modo in cui il browser sa quanto grande verrà renderizzata l’immagine, così può scegliere prima del layout. Secondo web.dev, sizes “tells the browser what size you expect the image to be displayed at under different conditions,” come elenco separato da virgole di condizioni media e larghezze:

sizes="(max-width: 600px) 480px, 1000px"

Leggilo come: “se il viewport è 600px o più stretto, l’immagine sarà larga circa 480px; altrimenti, circa 1000px.” Se ometti sizes, il browser assume che l’immagine riempia tutta la larghezza del viewport (100vw) — quindi su uno schermo largo potrebbe scaricare il tuo file più grande per un’immagine che in realtà viene renderizzata a 400px, vanificando silenziosamente tutto lo scopo. La mancanza di sizes è l’errore srcset più comune.

Non indovinare quei valori di larghezza dal layout nella tua testa — controlla la larghezza CSS effettiva renderizzata dell’immagine nel browser (DevTools → Elements → la larghezza calcolata del box dell’<img>) a ogni breakpoint che ti interessa, e imposta sizes di conseguenza. Un valore sizes che non corrisponde alla larghezza renderizzata reale fa comunque sì che il browser selezioni il candidato sbagliato anche se il markup è sintatticamente corretto — la validazione della sintassi da sola non lo rileva; vedi il controllo currentSrc qui sotto per confermare cosa è stato effettivamente caricato.

Esempio pratico (il mio schema riutilizzabile)

Questo è lo schema esatto dal mio articolo su Ahrefs, What Is Cumulative Layout Shift (CLS) & How To Improve It, espanso con sizes:

<img
  src="puppy-1000.jpg"
  srcset="puppy-1000.jpg 1000w,
          puppy-2000.jpg 2000w,
          puppy-3000.jpg 3000w"
  sizes="(max-width: 600px) 480px, 1000px"
  width="1000" height="1000"
  alt="Puppy with balloons" />

Ogni elemento è fondamentale: src è il fallback e l’URL che Google indicizza; srcset elenca i candidati con i descrittori w; sizes indica al browser la larghezza di rendering; width/height riservano spazio (la soluzione per il CLS — più sotto); alt resta identico indipendentemente dal file caricato.

L’elemento picture — direzione artistica e cambio di formato

Quando ti serve davvero

Usa <picture> per due cose che srcset non può fare:

  1. Direzione artistica — un ritaglio diverso per ogni breakpoint. L’esempio di web.dev: su uno smartphone stretto potresti servire un ritaglio alto e stretto; su un desktop largo, uno corto e largo. Stesso soggetto, inquadratura deliberatamente diversa.
  2. Cambio di formato — offri AVIF/WebP con un fallback JPEG tramite <source type="…">, lasciando che il browser scelga il primo formato supportato. Questo si ricollega direttamente alle linee guida sui formati nell’hub SEO per le immagini.

La sintassi (e la regola del fallback)

L’elemento <picture> racchiude uno o più elementi <source> e termina sempre con un semplice <img>:

<!-- Art direction: different crop per breakpoint -->
<picture>
  <source media="(max-width: 600px)" srcset="hero-crop-mobile.jpg">
  <img src="hero-crop-desktop.jpg" width="1200" height="675"
       alt="Product hero shot">
</picture>

<!-- Format switching: modern format with a fallback -->
<picture>
  <source type="image/avif" srcset="hero.avif">
  <source type="image/webp" srcset="hero.webp">
  <img src="hero.jpg" width="1200" height="675" alt="Product hero shot">
</picture>

Quel <img src> finale non è opzionale. Google lo afferma direttamente: secondo la sezione 4.8.1 dello standard HTML, “make sure that you provide an img element as a fallback with a src attribute when using the picture element.” (traduzione) «Assicurati di fornire un elemento img come fallback con un attributo src quando usi l’elemento picture.» È il file a cui ricorrono i browser più vecchi e i crawler — e, di nuovo, quello che Google indicizza.

srcset aiuta la SEO? Direttamente vs. indirettamente

Ecco l’inquadramento che tutte le guide concorrenti sbagliano, quindi sarò diretto.

Direttamente: no. Il markup delle immagini responsive non è un segnale di ranking come lo sono l’alt text o i nomi dei file per la ricerca di immagini. Aggiungere srcset non alza le tue posizioni e non cambia ciò che appare in Google Immagini. Google indicizza l’immagine referenziata in src; le varianti srcset/<picture> sono un meccanismo di consegna, non asset indicizzabili separatamente. Mantieni l’alt text, il nome del file e i dati strutturati associati a quell’immagine src primaria.

Indirettamente: sì, ed è una delle leve più grandi che hai. Immagini dimensionate correttamente sono la soluzione concreta più efficace per due Core Web Vitals — LCP e CLS — che alimentano i segnali di page-experience di Google. Questo è tutto il vantaggio. È la stessa forma della storia WebP/AVIF nell’hub SEO per le immagini: nessun boost per il formato in sé, la vittoria è la velocità.

Immagini responsive e LCP

Le immagini sovradimensionate sono una delle cause più comuni di un Largest Contentful Paint lento, e le immagini responsive sono la soluzione raccomandata da Lighthouse. L’audit “Properly size images” di Lighthouse elenca “all images in your page that aren’t appropriately sized, along with the potential savings” (traduzione) «tutte le immagini nella tua pagina che non sono dimensionate in modo appropriato, insieme ai risparmi potenziali» — qualsiasi cosa più grande del necessario “just results in wasted bytes and slows down page load time.” (traduzione) «si traduce solo in byte sprecati e rallenta il tempo di caricamento della pagina.» La sua soluzione, testualmente: “With responsive images, you generate multiple versions of each image, and then specify which version to use in your HTML or CSS using media queries, viewport dimensions, and so on.” (traduzione) «Con le immagini responsive, generi più versioni di ogni immagine, e poi specifichi quale versione usare nel tuo HTML o CSS usando media query, dimensioni del viewport e così via.»

Due dettagli che vale la pena conoscere:

  • La soglia di errore è 4KiB. Lighthouse segnala un’immagine solo quando “the rendered size is at least 4KiB smaller than the actual size.” (traduzione) «la dimensione renderizzata è almeno 4KiB più piccola della dimensione effettiva.» Piccoli superamenti non contano; servire un file da 3000px in uno slot da 400px sì.
  • Una scorciatoia con gli strumenti. Google raccomanda RespImageLint, “a helpful bookmarklet for identifying the optimal srcset and sizes values for your images.” (traduzione) «un bookmarklet utile per identificare i valori ottimali di srcset e sizes per le tue immagini.» Eseguilo prima di calcolare a mano i breakpoint.

Non caricare pigramente l’immagine LCP

Questa è la regola che la gente infrange più spesso. srcset sulla tua hero va bene — ma non abbinarlo mai al lazy loading sull’elemento LCP. L’immagine più grande sopra la piega dovrebbe caricarsi eager con fetchpriority="high", esattamente come copre l’hub Image SEO. E quando costruisci una hero <picture> responsive, mantieni la logica di scambio nativa: Google avverte che “non caricherà contenuti che richiedono interazioni utente” come lo swipe o il click, quindi uno schema JS che carica l’immagine reale solo dopo l’interazione la nasconde a Google.

Immagini responsive e CLS

Ecco la trappola: srcset da solo non fa nulla per lo spostamento del layout. Il cambio di risoluzione decide quale file caricare; non riserva spazio per esso. Senza dimensioni, secondo la guida Optimize CLS di web.dev, “man mano che le immagini si caricano, il testo si sposta verso il basso nella pagina per fare spazio” — perché lo spazio “non può essere allocato finché il browser non inizia a scaricarlo e non può determinarne le dimensioni.”

La soluzione sono dimensioni esplicite, e si combina con il markup responsive:

  • Imposta gli attributi width e height sull’<img>. I browser moderni “impostano il rapporto d’aspetto predefinito delle immagini in base agli attributi width e height dell’immagine,” quindi quei due numeri riservano il riquadro corretto prima che qualsiasi variante srcset venga scaricata. (web.dev)
  • Abbinali a height: auto in CSS per contenitori fluidi. Questa è la parte che sembra contraddittoria ma non lo è: la guida di web.dev stessa è di “usare CSS per ridimensionare l’immagine alla larghezza del contenitore” e “impostare height: auto; per evitare di usare un valore fisso per l’altezza dell’immagine.” Gli attributi HTML impostano il rapporto d’aspetto intrinseco; il CSS permette all’immagine di scalare in modo fluido. Insieme prevengono il CLS e restano responsive.
  • Oppure usa aspect-ratio in CSS per riservare lo spazio quando non puoi impostare gli attributi.

Il che sfata un mito persistente: gli attributi width/height non rompono i layout fluidi. Attributi + height: auto è la combinazione corretta, non un conflitto. Spiego tutta la meccanica dello spostamento del layout nel mio articolo Ahrefs CLS; la versione breve è “riserva lo spazio così che non ci sia spostamento” e lascia che l’immagine lo riempia.

Implicazioni dell’indicizzazione mobile-first

Google indicizza principalmente la versione mobile delle tue pagine, quindi due regole contano più di prima quando servi varianti responsive:

Il riepilogo di Google sul perché vale la pena è semplice: “progettare pagine web responsive porta a una migliore esperienza utente, poiché le persone possono accedervi da una moltitudine di tipi di dispositivi.”

E Bing?

Non esiste una guida specifica di Bing su srcset, sizes o l’elemento <picture> — la documentazione pubblica di Bing non affronta affatto il markup delle immagini responsive. Quindi non motivare le immagini responsive con un gancio algoritmico di Bing; il caso è prestazioni e UX, che Bing (come Google) tratta come qualità dell’esperienza di pagina piuttosto che qualcosa a cui puoi fare riferimento con una regola documentata per le immagini responsive.

Errori comuni

  • Dimenticare sizes con i descrittori w — il browser assume 100vw e potrebbe scaricare il file più grande per uno slot piccolo.
  • Tralasciare il src di fallback su <picture> — una violazione delle specifiche che Google segnala esplicitamente, ed è l’URL che i crawler indicizzano.
  • Proporzioni width/height non corrispondenti rispetto all’immagine effettivamente servita — causa ancora spostamento.
  • Lazy-loading dell’hero LCP — ritarda l’LCP senza motivo; caricalo con eager loading e fetchpriority="high".
  • Rigenerare gli URL delle immagini per ogni richiesta — rompe la cache di Google e la regola mobile-first dell‘“URL stabile”.
  • Ricorrere a <picture> quando srcset/sizes basterebbero — complessità inutile; web.dev dice che la maggior parte dei siti non ne ha bisogno.

Dove si colloca

Questo è l’approfondimento su dimensionamento e consegna sotto l’hub più ampio di Image SEO — la metà delle prestazioni dell’image SEO, in parallelo a come la guida sul testo alt gestisce la metà della ricerca di immagini. Per i meccanismi completi dello spostamento del layout, vedi il mio articolo Ahrefs su CLS; per LCP, fetchpriority e la strategia di caricamento, quello è lavoro Core Web Vitals con un cappello da immagine.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.