SEO
robots.txt che non blocca tutto per sbaglio
robots.txt dice ai crawler quali URL non richiedere. Un gruppo nominato sostituisce le regole di *, quindi ogni gruppo deve ripetere i Disallow o il sito si chiude.
In sintesi
- robots.txt regola il crawling, non l'indicizzazione: non toglie una pagina dai risultati.
- Un gruppo User-agent nominato sostituisce il gruppo *, quindi deve ripetere ogni Disallow.
- Bloccare il crawl impedisce a Google di leggere il noindex, e la pagina resta indicizzata senza contenuto aggiornato.
robots.txt è un file di testo alla radice del dominio che dice ai crawler quali URL non richiedere, e non è un modo per togliere pagine dai risultati. La distinzione sembra teorica finché un gruppo sbagliato non chiude il sito intero.
La sintassi che conta
Un gruppo è un blocco di righe che inizia con User-agent e continua con Allow, Disallow, Crawl-delay o direttive non standard. Il crawler applica il gruppo più specifico che lo nomina. Se quel gruppo esiste, le regole del gruppo * non si sommano: vengono sostituite. Per questo ogni gruppo nominato deve ripetere i Disallow, altrimenti apre ciò che il gruppo generico chiudeva.
User-agent: GPTBot
Allow: /
Disallow: /api/
Disallow: /preview
Disallow: /builder/
User-agent: *
Allow: /
Disallow: /api/
Disallow: /preview
Disallow: /builder/
Sitemap: https://ui.eneawork.it/sitemap.xml
Google riconosce * e $ nei path e confronta il prefisso più lungo, con Allow che vince a parità di lunghezza. Altri motori implementano un sottoinsieme: una regola esotica può essere ignorata, e il file è pubblico, quindi non contiene segreti. La documentazione di Google sul formato, letta il 1 novembre 2026, è la fonte di queste regole.
Il test che evita il blocco totale
cat > robots.mjs /^User-agent:/m.test(g));
const sitemaps = txt.match(/^Sitemap:\s*\S+/gm) || [];
for (const g of groups) {
const agent = (g.match(/^User-agent:\s*(.+)$/m) || [])[1];
const closed = (g.match(/^Disallow:\s*\S+/gm) || []).length;
console.log(agent, `${closed} disallow`, closed < 3 ? "check" : "ok");
}
console.log(`${groups.length} groups, ${sitemaps.length} sitemap lines`);
EOF
node robots.mjs
Lo script divide il file in gruppi, conta i Disallow e segnala con check ogni gruppo che ne ha meno di tre. Sul sito EneUI stampa 14 gruppi, tutti con tre Disallow, e una riga Sitemap. Il controllo serve dopo ogni modifica al file: un gruppo copiato a metà è il modo più comune di riaprire /api/ senza accorgersene.
Il catalogo EneUI
Nel nostro file le pagine di contenuto restano aperte: le 111.985 schede sotto /components, i 1.556 blocchi sotto /blocks e le 12.808 icone sotto /icons. È chiuso /api/, con l'eccezione di /api/registry/ per i crawler di risposta come OAI-SearchBot e PerplexityBot. La regola è deliberata: la pagina si scansiona, l'endpoint che costa CPU no. Verificato il 1 novembre 2026.
La limitazione
Un Disallow non rimuove un URL già indicizzato: Google può continuare a mostrare la pagina con l'anchor text dei link esterni. Per uscire dall'indice serve noindex, che a sua volta richiede accesso al crawl: bloccare la pagina in robots.txt impedisce a Google di leggere il noindex e la lascia in un limbo. Il file viene anche messo in cache, quindi una correzione non è visibile all'istante.
Dove continuare
La generazione automatica del file in App Router è in sitemap e robots generati in Next.js; la sequenza per entrare nell'indice è in indicizzare un sito su Google; la differenza fra noindex e canonical è in canonical, la guida pratica.
Domande frequenti
robots.txt rimuove una pagina da Google?
No. Blocca la richiesta del crawler. La pagina può restare nei risultati, senza contenuto aggiornato. Per togliere un URL dall'indice serve noindex o una richiesta di rimozione.
Dove va il file?
Alla radice del dominio, su https://example.com/robots.txt. Un file in una sottocartella non viene letto dai crawler per le altre cartelle.
Allow e Disallow insieme, chi vince?
Vince la regola con il path più lungo. A parità di lunghezza vince Allow. Una regola più specifica batte quella generica, indipendentemente dall'ordine nel file.
Perché il gruppo con il nome del crawler ignora le regole di *?
Perché il gruppo più specifico sostituisce quello generico. Se nominare un crawler deve mantenere i blocchi del sito, quelle righe vanno ripetute dentro il gruppo nominato.
Cosa scrivo nella riga Sitemap?
Un URL assoluto, con schema e host, e una riga per ogni sitemap o indice. Un percorso relativo viene ignorato e la sitemap non viene scoperta da quel file.