Fix: Google Search Console "Couldn't Fetch Sitemap" auf Next.js (App Router)
Aktualisiert am 10. Oktober 2025
Next.js Sitemap-Fehlersuche für Google Search Console
Wenn Sie schon die Haare raufen, weil Sie den Fehler “Couldn’t fetch sitemap” in Google Search Console für Ihr Next.js-Projekt sehen, sind Sie nicht allein. Dieser frustrierende Google Search Console Sitemap-Fehler kann verhindern, dass Google Ihre Website korrekt indexiert, was Ihre Sichtbarkeit beeinträchtigt. Viele Entwickler, die den Next.js App Router verwenden, sind auf diese Next.js Sitemap-Fehlersuche-Herausforderung gestoßen, bei der GSC die Sitemap nicht lesen kann, auch wenn sie im Browser zugänglich erscheint.
Glücklicherweise hat die Entwicklergemeinschaft eine zuverlässige Lösung ausfindig gemacht. Dieser Leitfaden führt Sie durch die genauen Schritte, um den Fehler “Couldn’t fetch” zu beheben, basierend auf einer hilfreichen Entdeckung, die in einem Next.js GitHub-Issue geteilt wurde.
Lassen Sie uns Ihre Sitemap indexieren und Ihre Website wieder auf Kurs bringen. Für weitere Einblicke und zusätzliche Diskussionen können Sie auch meine Antwort auf das GitHub-Issue hier ansehen.
Das Problem: Warum kann Google die Sitemap nicht abrufen?
Der Kern des Problems scheint eine Kombination aus der Art und Weise, wie Next.js Routing und Middleware handhabt, und wie Google Search Console seine Abrufversuche zwischenspeichert, zu sein. Wenn GSC versucht, auf Ihre sitemap.xml zuzugreifen, stößt sie möglicherweise auf eine Störung – oft von der Middleware –, die dazu führt, dass die Anfrage fehlschlägt. Sobald sie fehlschlägt, speichert GSC dieses fehlgeschlagene Ergebnis für diese spezifische URL anscheinend im Cache. Selbst nachdem Sie das zugrundeliegende Problem behoben haben, reicht es möglicherweise nicht aus, dieselbe sitemap.xml-URL einfach erneut einzureichen, um einen neuen Versuch auszulösen.
So beheben Sie den Fehler “Couldn’t Fetch”
Diese Lösung stammt vom GitHub-Benutzer @segabrielcarvalho, der einen praktischen Ansatz teilte, der Caching, Routing und Middleware-Konflikte mit vier Schlüsselschritten adressiert.
Schritt 1: Erzwingen Sie einen frischen Sitemap-Abruf mit einem Trailing Slash
Dies ist der einfachste, aber wichtigste Schritt. Google Search Console scheint fehlgeschlagene Abrufversuche aggressiv zu cachen. Um sie zu zwingen, es mit einem sauberen State erneut zu versuchen, können Sie eine einfache Cache-Busting-Technik verwenden.
Anstatt https://ihre-seite.com/sitemap.xml einzureichen, fügen Sie einen Trailing Slash hinzu:
https://ihre-seite.com/sitemap.xml/
Die Einreichung dieser leicht unterschiedlichen URL umgeht den Cache von GSC und löst einen frischen Abruf aus. Dieser einfache Trick ist oft ausreichend, um die Sitemap erfolgreich lesen zu lassen, nachdem Sie die anderen Fixes implementiert haben.
Schritt 2: Servieren Sie Ihre Sitemap von einer verschachtelten Route
Anstatt Ihre sitemap.ts-Datei in das Stammverzeichnis Ihres app-Verzeichnisses zu legen, verschieben Sie sie in einen verschachtelten Ordner. Dies hilft, sie zu isolieren und sicherzustellen, dass sie ohne Konflikte korrekt bereitgestellt wird.
- Erstellen Sie einen neuen
sitemap-Ordner innerhalb Ihresapp-Verzeichnisses. - Verschieben Sie Ihre
sitemap.ts(odersitemap.js)-Datei hinein.
Ihr neuer Dateipfad lautet: app/sitemap/sitemap.ts
Dies ändert die öffentliche URL Ihrer Sitemap. Die neue URL lautet:
https://ihre-seite.com/sitemap/sitemap.xml
Denken Sie daran, diese neue URL zu verwenden, wenn Sie sie bei Google Search Console einreichen (mit dem Trailing-Slash-Trick!).
Schritt 3: Schließen Sie SEO-Dateien von Ihrer Middleware aus
Middleware ist leistungsstark, aber sie kann versehentlich auch Googlebot daran hindern, auf wichtige Dateien wie Ihre Sitemap und robots.txt zuzugreifen. Um dies zu verhindern, müssen Sie Ihre middleware.ts aktualisieren, um diese Dateien explizit auszuschließen.
Die matcher-Konfiguration in Ihrer Middleware-Datei teilt Next.js mit, für welche Pfade die Middleware ausgeführt werden soll. Durch die Verwendung eines negativen Lookaheads können Sie anweisen, sie auf alle Pfade außer statischen Assets und SEO-Dateien auszuführen.
Hier ist ein Middleware-Beispiel, das nichts tut, aber die notwendigen Dateien korrekt ausschließt. Sie können dies für Ihre bestehende Middleware anpassen.
import type { NextRequest } from "next/server";
import { NextResponse } from "next/server";
export default function middleware(req: NextRequest) {
// Ihre Middleware-Logik kann hier eingefügt werden.
// Wenn Sie keine andere Logik haben, geben Sie einfach next() zurück.
void req;
return NextResponse.next();
}
export const config = {
matcher: [
/*
* Alle Anfragepfade abgleichen, außer denen, die beginnen mit:
* - _next/static (statische Dateien)
* - _next/image (Bildoptimierungsdateien)
* - favicon.ico (Favicon-Datei)
* - robots.txt (Robots-Datei)
* - sitemap.xml (Sitemap-Datei)
* - sitemap/ (verschachtelte Sitemap-Dateien)
* - site.webmanifest (Web-Manifest-Datei)
*/
"/((?!_next/static|_next/image|favicon\\.ico|robots\\.txt|sitemap\\.xml|sitemap/.*|site\\.webmanifest).*)",
],
};
Diese Konfiguration stellt sicher, dass Ihre robots.txt und beide potenziellen Sitemap-Pfade (/sitemap.xml und /sitemap/sitemap.xml) niemals von der Middleware verarbeitet werden, um potenzielle Blocks oder Weiterleitungen zu vermeiden, die Googlebot verwirren könnten.
Schritt 4: Erstellen Sie eine korrekte robots.txt-Datei
Stellen Sie sicher, dass Sie eine saubere und korrekte robots.txt-Datei in Ihrem app-Verzeichnis haben. Diese Datei sollte alle User-Agents explizit erlauben und auf Ihre neue Sitemap-URL verweisen. Wenn Sie eine robots.txt in Ihrem public-Ordner hatten, ist es am besten, diese zu entfernen, um Konflikte zu vermeiden, und sich ausschließlich auf die aus Ihrem app-Verzeichnis generierte zu verlassen.
Erstellen Sie eine Datei namens robots.ts oder robots.txt in Ihrem app-Verzeichnis mit folgendem Inhalt:
import { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
},
sitemap: 'https://ihre-seite.com/sitemap/sitemap.xml',
}
}
Oder, wenn Sie eine statische Datei bevorzugen:
User-agent: *
Allow: /
Sitemap: https://ihre-seite.com/sitemap/sitemap.xml
Ersetzen Sie https://ihre-seite.com durch Ihre tatsächliche Domain. Diese Datei leitet Crawler zu Ihrem neuen Sitemap-Standort.
Wichtige Erkenntnisse
Um die Lösung zusammenzufassen:
- Verwenden Sie einen Trailing Slash (
/) auf Ihrer Sitemap-URL bei der Einreichung bei GSC, um den Cache zu brechen. - Verschieben Sie Ihre Sitemap-Datei zu einer verschachtelten Route wie
app/sitemap/sitemap.ts. - Aktualisieren Sie Ihre Middleware, um SEO-Dateien wie
robots.txtundsitemap.xmlauszuschließen. - Verweisen Sie in Ihrer
robots.txtauf die neue Sitemap-URL.
Außerdem ist es wichtig, sicherzustellen, dass Sie nur eine einzige Quelle für Ihre Sitemap haben. Wenn Sie eine sitemap.xml in Ihrem public-Ordner haben und gleichzeitig eine aus Ihrem app-Verzeichnis generieren, können Konflikte entstehen. Löschen Sie alte Sitemap-Dateien und behalten Sie nur eine einzige, dynamisch generierte bei.
Indem Sie diesen Schritten folgen, sollten Sie in der Lage sein, den Fehler “Couldn’t fetch sitemap” zu beheben und Ihre Next.js-Seite korrekt von Google indexieren zu lassen. Viel Erfolg