Quasi ogni sito sul web ha questi due file alla radice: /robots.txt e /sitemap.xml. Quasi ogni sito sbaglia almeno uno dei due. Si somigliano (file di testo piccoli, i motori di ricerca li leggono, qualcuno ti ha detto di metterli) ma fanno cose opposte, e confonderli causa danni reali.
Questo articolo spiega cos'è ognuno, cosa non è, e come si presenta un default sensato.
robots.txt: una richiesta, non una regola
robots.txt vive a https://example.com/robots.txt. È la prima cosa che un crawler educato chiede quando visita il sito. Il file elenca quali path il crawler dovrebbe e non dovrebbe richiedere.
Esempio minimale, una regola vuota che significa "tutto è permesso":
User-agent: *
Disallow:
Un WordPress più tipico:
User-agent: *
Disallow: /wp-admin/
Disallow: /?s=
Allow: /wp-admin/admin-ajax.php
Sitemap: https://example.com/sitemap.xml
Quello che dice: ogni crawler è benvenuto, non scansionare /wp-admin/ né le pagine dei risultati di ricerca, ma admin-ajax.php può andare perché alcune pagine ne hanno bisogno. La sitemap vive all'URL nell'ultima riga.
Importante: robots.txt è una richiesta educata, non un'imposizione. Google, Bing e quasi tutti i motori la rispettano. Gli scraper aggressivi, i bot malevoli e i crawler per training di AI la rispettano meno, o per niente. Se vuoi davvero bloccare un path, lo fai a livello server (HTTP basic auth, IP allowlist, regola firewall). robots.txt non protegge nulla.
A cosa non serve robots.txt
L'errore più comune: la gente mette una pagina in robots.txt per "nasconderla a Google". Fa l'opposto di quello che vorrebbero. Se una pagina è in Disallow su robots.txt, Google non la scansiona, ma se qualche altro sito ci punta, Google indicizza comunque l'URL, a volte con il messaggio "nessuna descrizione disponibile a causa del robots.txt". L'URL finisce nei risultati senza che tu possa controllare lo snippet.
Per tenere davvero una pagina fuori dall'indice di Google hai due opzioni vere:
<meta name="robots" content="noindex">nell'head HTML. Google deve scansionare la pagina per vedere il meta tag, quindi funziona solo se non la disalloi su robots.txt. Permetti la scansione, poi noindex sul risultato. Le pagine con questo meta vengono rimosse dall'indice alla prossima scansione di Google.- Header HTTP
X-Robots-Tag: noindex. Stesso effetto, ma funziona anche per file non-HTML (PDF, immagini).
Il succo: robots.txt controlla la scansione, il meta tag controlla l'indicizzazione. Non sono intercambiabili.
sitemap.xml: una lista d'invito
sitemap.xml fa il lavoro opposto. Dice ai crawler "ecco gli URL che voglio tu conosca". Il file è XML ed elenca ogni URL con metadati opzionali:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-04-26</lastmod>
</url>
<url>
<loc>https://example.com/about</loc>
<lastmod>2026-03-01</lastmod>
</url>
</urlset>
I campi che oggi contano davvero sono <loc> (l'URL) e <lastmod> (l'ultima volta in cui hai aggiornato la pagina in modo significativo). I vecchi <priority> e <changefreq> Google li ignora dal 2017.
Cosa ti dà una sitemap:
- Scoperta più veloce delle pagine nuove, soprattutto per siti con pochi link in ingresso.
- Scoperta di pagine orfane (URL non linkati da nessun'altra pagina del sito).
- Un registro pulito in Google Search Console di ogni URL che consideri canonico.
Cosa la sitemap non ti dà:
- Ranking più alto. Stare in sitemap non spinge una pagina.
- Indicizzazione forzata. Google può comunque decidere che un URL non vale l'indicizzazione anche se lo elenchi.
- Protezione contro URL sbagliati. Se la sitemap elenca URL che fanno 404 o redirect, il report di Google te lo segnala. La qualità della sitemap conta.
Limiti e struttura
Una singola sitemap può elencare fino a 50.000 URL e pesare fino a 50 MB non compressi. I siti più grandi si dividono in più sitemap collegate da un file sitemap index:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap-pages.xml</loc>
<lastmod>2026-04-26</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-posts.xml</loc>
<lastmod>2026-04-26</lastmod>
</sitemap>
</sitemapindex>
WordPress con Yoast o Rank Math le genera in automatico raggruppandole per tipo di contenuto. Per un sito custom, generarla con uno script di build o un loop PHP piccolo sono 30 righe di codice.
Errori comuni da evitare
- Listare lo stesso URL con e senza slash finale. Scegli una forma, usala ovunque, redirigi l'altra con un 301.
- Listare URL che fanno redirect. Una sitemap deve contenere solo URL canonici 200-OK. Se
/old-pagefa 301 a/new-page, elenca solo/new-page. - Listare pagine con meta
noindex. Google si chiede perché stai pubblicizzando URL che gli stai anche dicendo di ignorare. - Dimenticare di aggiornare
<lastmod>. Un<lastmod>che non cambia mai è come non averlo. Aggiornalo quando il contenuto cambia in modo significativo, non a ogni run del cron. - Dimenticare di dichiarare la sitemap in robots.txt. La riga
Sitemap: https://example.com/sitemap.xmlpermette ai crawler di trovarla senza che tu debba sottometterla manualmente.
Un default sensato per un sito piccolo
Metti questi due file alla radice del sito e poi dimenticali.
/robots.txt:
User-agent: *
Disallow: /wp-admin/
Disallow: /?s=
Allow: /wp-admin/admin-ajax.php
Sitemap: https://example.com/sitemap.xml
/sitemap.xml: generata dal CMS (WordPress, Drupal, Ghost, Hugo, Astro hanno tutti supporto nativo o via plugin) oppure da uno script PHP da 30 righe che elenca le pagine fisse più i post del blog. Sottomettila una volta su Google Search Console, poi lasciala in pace.
Verifica in Search Console che Google riesca a leggere entrambi i file (Impostazioni, Crawling). Se Search Console dice "Impossibile recuperare sitemap", indaga prima di dare per scontato che Google abbia trovato tutto. Il numero di "Rilevate, non indicizzate" in Search Console vale anche un'occhiata periodica: se cresce, è la qualità del contenuto o il linking interno ad avere un problema, non la sitemap.