Blog Recursos Sobre Pesquisar Tópicos
Next.js Troubleshooting

Correção: "Couldn't Fetch Sitemap" no Google Search Console com Next.js (App Router)

Atualizado em 10 de outubro de 2025

Categoria: Next.js Troubleshooting
Compartilhar

Guia de solução de problemas de sitemap do Next.js para o Google Search Console

Se você tem se desesperado vendo o erro “Couldn’t fetch sitemap” no Google Search Console para o seu projeto Next.js, saiba que você não está sozinho. Esse frustrante erro de sitemap do Google Search Console pode impedir o Google de indexar seu site corretamente, prejudicando sua visibilidade. Muitos desenvolvedores usando o Next.js App Router encontraram esse desafio de solução de problemas de sitemap do Next.js, onde o GSC falha ao ler o sitemap, mesmo quando ele parece perfeitamente acessível no navegador.

Felizmente, a comunidade de desenvolvedores rastreou uma solução confiável. Este guia o orienta pelos passos exatos para correr o erro “Couldn’t fetch”, baseado em uma descoberta útil compartilhada em uma issue do GitHub do Next.js.

Vamos colocar seu sitemap indexado e seu site de volta aos trilhos. Para mais insights e discussão adicional, você também pode conferir minha resposta na issue do GitHub aqui.

O Problema: Por que o Google não consegue buscar o Sitemap?

O cerne da questão parece ser uma combinação de como o Next.js lida com roteamento e middleware, e como o Google Search Console armazena em cache suas tentativas de busca. Quando o GSC tenta acessar seu sitemap.xml, ele pode encontrar uma interferência — frequentemente do middleware — que faz a requisição falhar. Uma vez que falha, o GSC parece armazenar em cache esse resultado falho para aquela URL específica. Mesmo depois de corrigir o problema subjacente, simplesmente reenviar a mesma URL do sitemap.xml pode não disparar uma nova tentativa.

Como Corrigir o Erro “Couldn’t Fetch”

Esta solução vem do usuário do GitHub @segabrielcarvalho, que compartilhou uma abordagem prática que aborda caching, roteamento e conflitos de middleware com quatro passos chave.

Passo 1: Forçar uma Nova Busca do Sitemap com Trailing Slash

Este é o passo mais simples, mas mais crucial. O Google Search Console parece armazenar em cache tentativas de busca falhadas agressivamente. Para forçá-lo a tentar novamente com um estado limpo, você pode usar uma simples técnica de quebra de cache.

Em vez de enviar https://seu-site.com/sitemap.xml, adicione um trailing slash:

https://seu-site.com/sitemap.xml/

Enviar essa URL ligeiramente diferente ignorará o cache do GSC e disparará uma nova busca. Esse truque simples é frequentemente suficiente para fazer o sitemap ser lido com sucesso depois que você implementou as outras correções.

Passo 2: Servir seu Sitemap a partir de uma Rota Aninhada

Em vez de colocar seu arquivo sitemap.ts na raiz do seu diretório app, mova-o para uma pasta aninhada. Isso ajuda a isolá-lo e garantir que ele seja servido corretamente sem conflitos.

  1. Crie uma nova pasta sitemap dentro do seu diretório app.
  2. Mova seu arquivo sitemap.ts (ou sitemap.js) para dentro dela.

Seu novo caminho de arquivo será: app/sitemap/sitemap.ts

Isso muda a URL pública do seu sitemap. A nova URL será:

https://seu-site.com/sitemap/sitemap.xml

Lembre-se de usar essa nova URL quando enviá-la ao Google Search Console (com o truque do trailing slash!).

Passo 3: Excluir Arquivos de SEO do seu Middleware

O middleware é poderoso, mas também pode bloquear acidentalmente o Googlebot de acessar arquivos importantes como seu sitemap e robots.txt. Para evitar isso, você precisa atualizar seu middleware.ts para excluir explicitamente esses arquivos.

A configuração matcher no seu arquivo de middleware diz ao Next.js em quais caminhos o middleware deve rodar. Usando uma negative lookahead (lookahead negativo), você pode instruí-lo a rodar em todos os caminhos exceto por assets estáticos e arquivos de SEO.

Aqui está um exemplo de middleware que não faz nada, mas exclui corretamente os arquivos necessários. Você pode adaptar isso para o seu middleware existente.

middleware.ts
import type { NextRequest } from "next/server";
import { NextResponse } from "next/server";

export default function middleware(req: NextRequest) {
  // Sua lógica de middleware pode ir aqui.
  // Se você não tem nenhuma outra lógica, apenas retorne next().
  void req;
  return NextResponse.next();
}

export const config = {
  matcher: [
    /*
     * Combina todos os caminhos de requisição exceto os que começam com:
     * - _next/static (arquivos estáticos)
     * - _next/image (arquivos de otimização de imagem)
     * - favicon.ico (arquivo favicon)
     * - robots.txt (arquivo robots)
     * - sitemap.xml (arquivo sitemap)
     * - sitemap/ (arquivos de sitemap aninhados)
     * - site.webmanifest (arquivo web manifest)
     */
    "/((?!_next/static|_next/image|favicon\\.ico|robots\\.txt|sitemap\\.xml|sitemap/.*|site\\.webmanifest).*)",
  ],
};

Essa configuração garante que seu robots.txt e ambos os caminhos potenciais de sitemap (/sitemap.xml e /sitemap/sitemap.xml) nunca sejam processados pelo middleware, evitando quaisquer blocos ou redirecionamentos potenciais que possam confundir o Googlebot.

Passo 4: Criar um Arquivo robots.txt Correto

Finalmente, garanta que você tem um arquivo robots.txt limpo e correto no seu diretório app. Este arquivo deve permitir explicitamente todos os user agents e apontar para a sua nova URL de sitemap. Se você tinha um robots.txt na sua pasta public, é melhor removê-lo para evitar conflitos e confiar apenas no que é gerado a partir do seu diretório app.

Crie um arquivo chamado robots.ts ou robots.txt no seu diretório app com o seguinte conteúdo:

app/robots.ts
import { MetadataRoute } from 'next'

export default function robots(): MetadataRoute.Robots {
  return {
    rules: {
      userAgent: '*',
      allow: '/',
    },
    sitemap: 'https://seu-site.com/sitemap/sitemap.xml',
  }
}

Ou, se preferir um arquivo estático:

app/robots.txt
User-agent: *
Allow: /

Sitemap: https://seu-site.com/sitemap/sitemap.xml

Certifique-se de substituir https://seu-site.com pelo seu domínio real. Este arquivo direciona os rastreadores para a nova localização do seu sitemap.

Principais Pontos

Para resumir a correção:

  1. Use um trailing slash (/) na sua URL de sitemap ao enviar para o GSC para quebrar o cache.
  2. Mova seu arquivo de sitemap para uma rota aninhada como app/sitemap/sitemap.ts.
  3. Atualize seu middleware para excluir arquivos de SEO como robots.txt e sitemap.xml.
  4. Aponte seu robots.txt para a nova URL do sitemap.

Além disso, é importante garantir que você tenha apenas uma fonte para o seu sitemap. Se você tem um sitemap.xml na sua pasta public e também está gerando um a partir do seu diretório app, conflitos podem surgir. Exclua quaisquer arquivos de sitemap antigos e fique com um único, gerado dinamicamente.

Seguindo esses passos, você deve ser capaz de resolver o erro “Couldn’t fetch sitemap” e fazer seu site Next.js ser indexado corretamente pelo Google. Boa entrega!

Categoria Next.js Troubleshooting
Compartilhar

Publicações Relacionadas

Receba os últimos insights de IA entregues na sua caixa de entrada

Mantenha-se atualizado com as últimas tendências, tutoriais e insights da indústria. Junte-se à comunidade de desenvolvedores que confiam em nosso boletim.

Apenas contas novas. Ao enviar seu email, você concorda com nossa Política de Privacidade