P PasteCode
Prompt

Prompt para Adicionar um Sitemap e robots.txt

Prompt de agente de IA para adicionar um sitemap.xml gerado dinamicamente e um robots.txt correto a um projeto Next.js ou Astro para melhor indexação em mecanismos de busca.

CursorClaude CodeCodexWindsurf Next.jsAstroTypeScript
.md .json Dificuldade: Fácil Atualizado 8 de jun. de 2026

Dê este prompt ao seu agente para adicionar um sitemap.xml e um robots.txt em conformidade com os padrões — lidando com rotas dinâmicas, valores de prioridade e datas de última modificação sem usar um serviço de terceiros pago.

Prompt Principal

Main Prompt
You are working in a Next.js 15 App Router project with TypeScript.
The site has static pages (/, /about, /pricing) and dynamic blog posts in `src/content/blog/`.
Task: add sitemap.xml and robots.txt using only Next.js built-in file conventions.
Requirements:
- Create `src/app/sitemap.ts` (NOT `.xml`) using the Next.js `MetadataRoute.Sitemap` return type.
- Static URLs: `/`, `/about`, `/pricing` with `priority: 1.0` and `changeFrequency: 'monthly'`.
- Dynamic URLs: read all MDX files from `src/content/blog/` using `getCollection('blog')` from
`astro:content` — wait, this is Next.js, so use `fs` + `gray-matter` to read frontmatter.
- For each post, return `{ url, lastModified, changeFrequency: 'weekly', priority: 0.8 }`.
- `url` must be an absolute URL using the `NEXT_PUBLIC_SITE_URL` environment variable.
- Create `src/app/robots.ts` (NOT `.txt`) using the `MetadataRoute.Robots` return type.
- Allow all crawlers for `/*`.
- Disallow `/api/*` and `/admin/*` for all crawlers.
- Set `sitemap` to the absolute sitemap URL.
- Add `NEXT_PUBLIC_SITE_URL=https://example.com` to `.env.example`.
- Do NOT install `next-sitemap` or any sitemap package.
Stop and list all files before writing code.

Notas de Implementação

  • sitemap.ts e robots.ts no diretório app/ são convenções de arquivos do Next.js 13.3+; eles devem exportar uma função padrão que retorna o objeto de metadados tipado — não uma Response ou string.
  • Se NEXT_PUBLIC_SITE_URL não estiver definida no momento da construção, o sitemap conterá URLs relativas, que são inválidas de acordo com o protocolo de Sitemap — valide com uma verificação na inicialização.
  • lastModified deve ser um objeto Date, não uma string; o Next.js serializa para ISO 8601.

Mudanças de Arquivos Esperadas

src/app/sitemap.ts (new)
src/app/robots.ts (new)
src/lib/blog.ts (new or edited — getAllPosts helper)
.env.example (edited)

Critérios de Aceitação

  • GET /sitemap.xml retorna XML válido com todas as URLs estáticas e dinâmicas como URLs absolutas.
  • GET /robots.txt inclui Disallow: /api/ e Sitemap: https://example.com/sitemap.xml.
  • Adicionar um novo arquivo MDX de postagem de blog faz com que sua URL apareça no sitemap após bun run build.
  • O sitemap valida em https://www.xml-sitemaps.com/validate-xml-sitemap.html.

Comandos de Teste

Terminal window
bun run build && bun run start
curl http://localhost:3000/sitemap.xml | xmllint --format - | head -40
curl http://localhost:3000/robots.txt
# confirm /api/ is disallowed and sitemap URL is absolute
bun run typecheck

Erros Comuns de IA

  • Criar um arquivo estático public/sitemap.xml em vez da convenção dinâmica src/app/sitemap.ts.
  • Usar URLs relativas no sitemap (ex.: /blog/my-post) — sitemaps exigem URLs absolutas.
  • Instalar next-sitemap quando o prompt explicitamente o proíbe.
  • Definir robots.txt para desautorizar todos os rastreadores (Disallow: /), o que desindexa todo o site.

Prompt de Correção

Fix Prompt
The sitemap contains relative URLs or robots.txt disallows too much. Fix in order:
1. In `src/app/sitemap.ts`, construct every URL as:
`const base = process.env.NEXT_PUBLIC_SITE_URL ?? 'https://example.com'; url: \`\${base}/blog/\${post.slug}\``
2. In `src/app/robots.ts`, verify the rules object:
`{ userAgent: '*', allow: '/', disallow: ['/api/', '/admin/'] }`.
3. Confirm `sitemap.ts` exports a default async function (not a named export).
Show only the corrected diff.