Capítulo 142 de 456

robots.txt

Core Idea

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.

Key Concepts

  • Estático: app/robots.txt direto no formato padrão.
  • Gerado: 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.
  • Como Route Handler especial, robots.js é cacheado por padrão a menos que use Request-time API ou dynamic config.

Code Examples

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',
  }
}
  • O que demonstra: regras diferenciadas por user agent, com sitemap referenciado.
export default function robots(): MetadataRoute.Robots {
  return {
    rules: [
      { userAgent: '*', allow: '/' },
      { userAgent: 'SeznamBot', allow: '/', other: { 'Request-Rate': '10/1m' } },
    ],
  }
}
  • O que demonstra: diretiva não-padrão via campo other (v16.3.0+).

Reference Tables

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
}

Anti-patterns

  • Esperar validação de sintaxe em other: Next.js passa os valores verbatim; conferir a documentação do search engine alvo antes de usar.

Key Takeaways

  1. Um único objeto rules gera um bloco User-Agent; um array gera um bloco por entrada, na ordem fornecida.
  2. other foi adicionado na v16.3.0 especificamente para diretivas fora do Robots Exclusion Standard.
  3. Referencie o sitemap diretamente no objeto retornado (sitemap: '...') em vez de escrever manualmente no arquivo estático.

Connects To

  • sitemap.xml: convenção geralmente referenciada dentro de robots.ts.
  • Metadata Files: página-índice desta convenção.