Robots.txt: guida completa alla configurazione

Sintassi di robots.txt, template pronti per siti pubblici, e-commerce e staging, confronto con meta robots e X-Robots-Tag, test e checklist finale.

Robots.txt è un file di testo semplice nella root del sito che dice ai crawler quali sezioni possono visitare e quali saltare. È la prima cosa che un crawler legge quando arriva sul tuo sito. Il file esiste dal 1994 e resta lo standard de facto per il controllo della scansione.

Robots.txt è una raccomandazione, non un meccanismo di imposizione. I bot affidabili (Googlebot, Yandex) rispettano le direttive. I crawler malintenzionati e gli scraper ignorano del tutto il file. Per proteggere dati sensibili usa controlli di accesso lato server e autenticazione — non robots.txt.

Il limite chiave: una pagina bloccata con Disallow non sparisce automaticamente dall'indice. Se altri siti ci puntano un link, Google può indicizzare l'URL senza visitarla — e può mostrare nei risultati uno snippet vuoto. Per rimuovere del tutto una pagina dall'indice servono altri strumenti.

Albero decisionale di Googlebot: robots.txt controlla la scansione, meta noindex controlla l'indicizzazione. Insieme danno quattro esiti distinti.

Cos'è robots.txt e suoi limiti

Il file robots.txt va messo nella root del dominio: https://example.com/robots.txt. I sottodomini hanno file propri: il robots.txt di blog.example.com sta in https://blog.example.com/robots.txt. Lo Robots Exclusion Standard (REP) definisce le direttive di base; Google e Yandex lo hanno esteso con funzionalità aggiuntive.

Controllo della scansione

Impedisce ai bot di visitare certe sezioni — riduce il carico inutile sul server e preserva il crawl budget per le pagine di valore.

Punta alla Sitemap

La direttiva Sitemap aiuta i motori di ricerca a trovare subito la tua sitemap XML senza configurazioni aggiuntive.

Non protegge i contenuti

Robots.txt è visibile pubblicamente. Non cifra né nasconde i contenuti delle pagine — chiede solo ai bot di non visitarle.

Formato e sintassi

Il file è composto da blocchi chiamati record. Ogni record inizia con una o più direttive User-agent e può contenere un numero qualsiasi di righe Disallow, Allow, Crawl-delay e Sitemap. I record sono separati da una riga vuota. I commenti iniziano con #.

DirettivaSupportoDescrizione
User-agentTuttiIdentificatore del bot. * significa «tutti i crawler». Un singolo blocco può avere più righe User-agent.
DisallowTuttiPercorso vietato alla scansione. Un valore vuoto significa «nulla è bloccato» (consenti tutto).
AllowGoogle, YandexConsente esplicitamente un percorso dentro una sezione vietata. Ha priorità su Disallow.
Crawl-delayYandex, BingRitardo minimo in secondi fra le richieste del bot. Ignorato da Google.
SitemapGoogle, Yandex, BingURL assoluto della sitemap XML. Sono ammesse più righe Sitemap.

Wildcard: * e $

Google e Yandex supportano due caratteri jolly nei percorsi Disallow e Allow. Un asterisco * corrisponde a qualsiasi sequenza di caratteri (stringa vuota inclusa). Il simbolo del dollaro $ ancora la fine dell'URL — corrispondenza esatta fino all'ultimo carattere.

text
# Block all URLs with the ?sort= parameter
Disallow: /*?sort=

# Block only /page (exact match, not /page/child)
Disallow: /page$

# Block all PDFs across the entire site
Disallow: /*.pdf$
Quando Disallow e Allow sono in conflitto, vince la regola più specifica (più caratteri). Se la lunghezza è uguale, vince Allow. Questo comportamento è specifico di Google; altri bot possono implementarlo in modo diverso.

La direttiva Sitemap può stare in qualunque punto del file — non deve trovarsi dentro un blocco User-agent specifico. Usa sempre un URL assoluto completo:

text
Sitemap: https://example.com/sitemap.xml
Se usi un Sitemap Index, basta una riga Sitemap che punta al file indice — non serve elencare ogni sitemap figlia. Il motore di ricerca le scopre tutte tramite l'indice.

Esempi pronti per diversi scenari

Scenario 1: sito pubblico semplice

Per un piccolo sito senza sezioni private basta un file minimale: consenti tutto, blocca il pannello di amministrazione e i percorsi tecnici, dichiara la sitemap.

text
# robots.txt for example.com — simple public site
User-agent: *
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/

Sitemap: https://example.com/sitemap.xml

Scenario 2: grande e-commerce con catalogo e pagine a parametri

Un negozio online genera centinaia di migliaia di URL tramite filtri, ordinamenti e paginazione. La maggior parte sono duplicati o pagine senza valore autonomo. Blocca gli URL parametrici con Disallow e wildcard, lasciando raggiungibili le pagine pulite di categoria e prodotto.

text
# robots.txt for e-commerce example.com
User-agent: *

# Technical and admin sections
Disallow: /admin/
Disallow: /checkout/
Disallow: /cart
Disallow: /account/
Disallow: /api/

# Parametric catalogue duplicates
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?page=
Disallow: /*?ref=
Disallow: /search

# Explicitly allow a useful parameter in one section
Allow: /catalog/shoes?size=

Crawl-delay: 1

Sitemap: https://example.com/sitemap.xml
Per le pagine parametriche con contenuti unici (ad es. un prodotto con una taglia o un colore specifico), preferisci un tag canonical a Disallow — preserva il crawl budget senza tagliare del tutto la pagina.

Scenario 3: sito con staging e pagine temporanee

Landing di webinar, bozze, pagine template e sezioni di staging vanno escluse dalla scansione. Usa Disallow per prefisso di percorso e, se serve, un blocco separato per bot specifici.

text
# robots.txt for example.com — main site with staging sections
User-agent: *
Disallow: /webinar-drafts/
Disallow: /templates/
Disallow: /staging/
Disallow: /_preview/
Disallow: /thank-you-test

# Block the entire site for a specific bot (e.g. an aggressive crawler)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

Sitemap: https://example.com/sitemap.xml
Bloccare una sezione via robots.txt non la rende riservata. Gli URL delle pagine di staging possono comunque essere indicizzati se siti esterni ci puntano link. Per un isolamento reale usa HTTP Basic Auth o una allowlist di IP a livello di server.

Disallow vs meta robots noindex vs X-Robots-Tag

Sono tre strumenti diversi con compiti diversi. Confonderli porta all'errore classico: una pagina è bloccata in robots.txt e ha anche il meta tag noindex — Google non può leggere il meta tag perché la pagina è esclusa dalla scansione, quindi la direttiva noindex non viene mai eseguita.

StrumentoDove viveCosa faQuando usarlo
Disallow in robots.txtrobots.txtImpedisce al bot di visitare l'URL. Non rimuove dall'indice un URL già presente.Bloccare sezioni di servizio, ridurre lo spreco di crawl budget.
meta robots noindex<head> HTMLConsente al bot di visitare ma vieta l'aggiunta all'indice. Il bot legge il tag e rispetta la direttiva.Rimuovere una pagina specifica dall'indice (pagine di ringraziamento, paginazione, pagine filtro).
X-Robots-TagHeader della risposta HTTPEquivalente a meta robots, ma funziona per qualsiasi tipo di file: PDF, immagini, documenti.Controllare l'indicizzazione di risorse non HTML (PDF, DOCX, immagini).
Non combinare mai Disallow e noindex sulla stessa pagina. Se una pagina è bloccata in robots.txt, Google non può leggerne il noindex — e può tenere l'URL nell'indice con uno snippet vuoto. Usa noindex solo su pagine che il crawler può visitare.

Esempio di X-Robots-Tag in un header di risposta HTTP (configurato in Nginx o nel codice dell'applicazione):

text
# Nginx: prevent indexation of all PDFs
location ~* \.pdf$ {
    add_header X-Robots-Tag "noindex, nofollow";
}

Come testare robots.txt

Valida sempre le modifiche prima di rilasciarle. Un solo refuso può bloccare l'intero sito ai crawler.

  • Google Search Console → Tester robots.txt: integrato direttamente in GSC. Inserisci un URL per verificare se Googlebot e gli altri bot di Google sono autorizzati o bloccati.
  • Yandex Webmaster → Analisi robots.txt: lo strumento equivalente per Yandex. Mostra come Yandex Bot interpreta il tuo file.
  • Screaming Frog SEO Spider → Configuration → Robots.txt: scansiona il sito rispettando robots.txt ed elenca nel report gli URL bloccati.
  • curl: verifica rapida da riga di comando per leggere il file e controllare lo stato HTTP.
Esempio di robots.txt che applica i consigli qui sopra:
bash
# Fetch robots.txt and inspect its contents
curl -s https://example.com/robots.txt

# Check HTTP status (must be 200)
curl -I https://example.com/robots.txt

Errori comuni e come correggerli

ErroreSintomoCorrezione
Disallow: / per tutto il sitoGooglebot smette di scansionare tutto. GSC mostra le pagine come «bloccate da robots.txt».Rimuovi la riga o sostituiscila con un percorso specifico. Spesso si intrufola durante i deploy.
Spazio accidentale nel percorsoDisallow: /admin / (con uno spazio) — il bot legge il percorso alla lettera e nulla viene bloccato.Rimuovi gli spazi. I percorsi distinguono maiuscole e spazi.
noindex + Disallow sulla stessa paginaLa pagina resta nell'indice; la direttiva noindex non viene mai eseguita.Rimuovi Disallow, tieni solo noindex. Il bot deve poter visitare la pagina per leggere il tag.
User-agent mancante prima delle regoleErrore di sintassi: le regole non si applicano ad alcun bot.Aggiungi User-agent: * prima del blocco Disallow/Allow.
robots.txt restituisce 404 o 500Il 404 viene trattato come «nessuna restrizione»; il 500 ferma temporaneamente la scansione.Garantisci HTTP 200. Un file vuoto equivale a «consenti tutto».

Consigli di sicurezza

Robots.txt è pubblico e indicizzato dai motori di ricerca — chiunque può leggerlo. Pubblicare in robots.txt i percorsi di pannelli di amministrazione, backup, API interne o file di configurazione consegna agli attaccanti una mappa del tuo sito.

Non fare affidamento su robots.txt come unica protezione delle sezioni sensibili. Un percorso come Disallow: /internal-api/v2/keys/ dice all'attaccante esattamente dove guardare.
  • Non esporre percorsi sensibili — backup (.zip, .sql), file di configurazione (.env, config.php), API interne.
  • Proteggi le sezioni riservate a livello di server — HTTP Basic Auth, allowlist di IP, OAuth — non via robots.txt.
  • Tieni minimale la lista di Disallow — solo i percorsi che davvero vanno esclusi dalla scansione per motivi SEO.
  • Rivedi regolarmente robots.txt in GSC — verifica che i deploy non abbiano introdotto per sbaglio un Disallow: /.

Checklist ed esempio finale

  • Il file è raggiungibile su https://example.com/robots.txt e restituisce HTTP 200
  • Codifica UTF-8, senza BOM (Byte Order Mark)
  • Ogni blocco inizia con User-agent
  • Una riga vuota separa i blocchi per User-agent diversi
  • Nessuna combinazione di Disallow + noindex sulla stessa pagina
  • Nessun percorso sensibile esposto pubblicamente
  • Crawl-delay impostato per Yandex se il carico del server è alto
  • La direttiva Sitemap punta al file indice nella root
  • File validato in GSC e Yandex Webmaster
  • Screaming Frog mostra il numero atteso di URL bloccati

Esempio finale di robots.txt per example.com con commenti — un template universale che copre la maggior parte degli scenari:

text
# robots.txt for example.com
# Updated: 2026-05-15

# Rules for all crawlers
User-agent: *

# Admin and auth sections
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/
Disallow: /account/

# Technical paths
Disallow: /api/
Disallow: /_next/
Disallow: /cdn-cgi/

# Parametric duplicates (e-commerce)
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?ref=
Disallow: /search

# Staging and temporary pages
Disallow: /staging/
Disallow: /webinar-drafts/
Disallow: /templates/

# Explicit allow for a useful API path
Allow: /api/og-image/

# Crawl rate for Yandex
User-agent: Yandex
Crawl-delay: 1

# Aggressive SEO bots (optional)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

# Sitemap
Sitemap: https://example.com/sitemap.xml

FAQ

Robots.txt influisce sul posizionamento?
Indirettamente. Il file in sé non è un segnale di posizionamento, ma bloccare le pagine con Disallow ne riduce la scansione. Blocca pagine importanti e perderanno visibilità. Blocca gli URL parametrici duplicati e liberi crawl budget per le pagine di valore.
Cosa succede se robots.txt restituisce 404?
Google tratta un robots.txt assente (404) come «nessuna restrizione» e scansiona l'intero sito. Un errore 500 o un timeout viene trattato come blocco temporaneo — Google mette in pausa la scansione finché il file non torna disponibile.
Posso impostare regole diverse per Googlebot e Yandex in un solo file?
Sì. Crea due blocchi User-agent separati. Googlebot legge solo il suo blocco, Yandex solo il proprio. Il blocco User-agent: * si applica a tutti i bot che non hanno un blocco dedicato.
Disallow: / blocca l'intero sito — come lo correggo in fretta?
Sostituisci o rimuovi la riga Disallow: / nel blocco User-agent: *. Dopo il deploy verifica con Controllo URL in GSC. La scansione normale riprende entro pochi giorni dalla correzione.
Come blocco un singolo file ma non la sua directory?
Usa un percorso esatto senza slash finale: Disallow: /private-doc.pdf. Per bloccare un'estensione di file su tutto il sito, usa una wildcard: Disallow: /*.pdf$

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it