Capítulo 142 de 456
Arquivo robots.txt (estático ou gerado via robots.js|ts) na raiz de app, seguindo o Robots Exclusion Standard, para dizer a crawlers quais URLs podem acessar.
app/robots.txt direto no formato padrão.app/robots.ts default-exportando função que retorna um objeto Robots (tipo MetadataRoute.Robots).rules: objeto único ou array de objetos com userAgent, allow, disallow, crawlDelay, other.other: campo para diretivas não-padrão (ex.: Request-Rate do Seznam, Clean-param do Yandex); valores passam verbatim, sem validação do Next.js.robots.js é cacheado por padrão a menos que use Request-time API ou dynamic config.import type { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: [
{ userAgent: 'Googlebot', allow: ['/'], disallow: '/private/' },
{ userAgent: ['Applebot', 'Bingbot'], disallow: ['/'] },
],
sitemap: 'https://acme.com/sitemap.xml',
}
}
export default function robots(): MetadataRoute.Robots {
return {
rules: [
{ userAgent: '*', allow: '/' },
{ userAgent: 'SeznamBot', allow: '/', other: { 'Request-Rate': '10/1m' } },
],
}
}
other (v16.3.0+).type Robots = {
rules:
| { userAgent?: string | string[]; allow?: string | string[]; disallow?: string | string[]; crawlDelay?: number; other?: Record<string, string | number | Array<string | number>> }
| Array<{ userAgent: string | string[]; allow?: string | string[]; disallow?: string | string[]; crawlDelay?: number; other?: Record<string, string | number | Array<string | number>> }>
sitemap?: string | string[]
host?: string
}
other: Next.js passa os valores verbatim; conferir a documentação do search engine alvo antes de usar.rules gera um bloco User-Agent; um array gera um bloco por entrada, na ordem fornecida.other foi adicionado na v16.3.0 especificamente para diretivas fora do Robots Exclusion Standard.sitemap: '...') em vez de escrever manualmente no arquivo estático.robots.ts.