SEO

Sitemap index o sitemap unico: quando cambiare

Un sitemap unico basta fino a 50.000 URL e 50 MB. Oltre quella soglia serve un indice che elenca più file, con lastmod verificabili e nessun file vuoto.

In sintesi

  • Un file regge 50.000 URL e 50 MB: oltre serve un indice a due livelli.
  • lastmod va pubblicato solo se è vero, altrimenti Google lo ignora.
  • L'indice rende leggibile ciò che cambia, non aumenta il crawl budget.

Un sitemap unico basta finché il sito resta sotto i 50.000 URL e i 50 MB non compressi; oltre quella soglia serve un sitemap index, un file che elenca gli altri sitemap e non contiene URL di pagine. Il limite è del protocollo, non del server.

I due limiti del protocollo

Il protocollo fissa 50.000 URL e 50 MB non compressi per file. Un indice accetta fino a 50.000 sitemap, e un indice non può elencare un altro indice: la gerarchia è profonda due livelli, non tre. Il gzip riduce il peso, non il numero di URL.

La forma è <sitemapindex> con un elemento <sitemap><loc> per figlio. Il lastmod è opzionale a ogni livello, e Google lo ignora quando è sempre la data di oggi: un valore che non cambia mai è peggio di nessun valore.

Quando un file unico è la scelta giusta

  • Sotto i 5.000 URL un indice aggiunge una richiesta e non risolve niente.
  • Se tutte le pagine cambiano insieme, un solo lastmod è onesto e leggibile.
  • Un file unico si controlla a mano in un minuto, e gli errori si vedono subito.

Quando serve un indice

  • Oltre i 50.000 URL, o quando un file supera i 50 MB non compressi.
  • Quando le sezioni hanno cadenze diverse: blog giornaliero, catalogo mensile.
  • Quando una sezione va esclusa senza riscrivere tutto il file.

Leggere un indice prima di pubblicarlo

cat > check-sitemap.mjs ([^/g)].map((m) => m[1]);
console.log(children.length + " child sitemaps");
for (const url of children) {
  const xml = await (await fetch(url)).text();
  const urls = (xml.match(//g) || []).length;
  if (!urls) console.log("EMPTY   " + url);
  else console.log(String(urls).padStart(6) + "  " + url);
}
EOF
node check-sitemap.mjs

Lo script scarica l'indice, elenca i figli e conta le occorrenze di <loc> in ognuno. Un figlio con zero URL è un errore da correggere: Google legge un file vuoto e riduce la fiducia nel resto dell'indice. Un figlio con 49.000 URL è una bomba a orologeria, perché la prossima aggiunta supera il limite.

Come lo fa il catalogo EneUI

L'indice parte con /sitemap-core.xml, che contiene hub, guide e librerie, poi elenca i file dei componenti. Le 1.556 sezioni e le 12.808 icone stanno nel core; i singoli record come sidebar di 21st stanno nei file dei componenti, quelli che un file unico non potrebbe contenere. Dati verificati il 1 novembre 2026.

La limitazione

Un indice non aumenta il crawl budget. Se il sito pubblica 111.985 URL e ne cambia mille al giorno, Google ne leggerà una frazione: la divisione in file rende leggibile ciò che è cambiato, non convince un crawler a leggere tutto. L'unica leva resta smettere di pubblicare pagine che nessuno cerca.

Dove continuare

La sequenza per entrare nell'indice è in indicizzare un sito su Google; come si dichiarano le versioni linguistiche è in hreflang: gli errori comuni. Se la base del sito è ancora da scegliere, il confronto è in WordPress, Wix o componenti React.

Domande frequenti

Quanti URL entrano in un sitemap?

50.000 per file, con un massimo di 50 MB non compressi. Oltre il limite si divide in più file e si pubblica un indice.

Un sitemap index può elencare un altro index?

No. La gerarchia è profonda due livelli: un indice elenca sitemap di URL, non altri indici.

Il sitemap deve essere dichiarato in robots.txt?

Non è obbligatorio, ma conviene: una riga Sitemap con l'URL assoluto dell'indice evita che Google debba indovinare il percorso.

Serve il lastmod in ogni URL?

Solo se è vero. Un lastmod sempre uguale alla data di oggi viene ignorato, e un lastmod sbagliato è peggio della sua assenza.

Posso pubblicare la sitemap in gzip?

Sì, il protocollo ammette file .gz. Il limite di 50 MB si applica al contenuto non compresso.