410-vs-404-status-codes-for-seo.html
< BACK

410 vs. 404 Status-Codes für SEO: Wann signalisiert jeder Code Googlebot etwas anderes

Google behandelt 404 und 410 unterschiedlich, und dieser Unterschied ist wichtig, wenn man URLs in großen Mengen einmottet. Kurz gesagt: 404 bedeutet „fehlt, versuch es später nochmal"; 410 bedeutet „weg für immer, kommt nicht zurück". Googlebot besucht 404er über Wochen hinweg, bevor es sie aus dem Index entfernt. 410er entfernt es innerhalb von Tagen. Wenn man mitten in einer Migration Tausende von URLs hat, die für immer verschwinden sollen, spart die Wahl des richtigen Codes Wochen beim Cleanup.

Was jeder Code bedeutet

404 Not Found ist die Standard-Antwort, wenn unter der angeforderten URL keine Ressource vorhanden ist. Der Server sagt „unter dieser URL gibt es derzeit keine Ressource". Die Aussage ist offen: Möglicherweise kommt später eine Ressource hinzu, möglicherweise ist es ein Tippfehler, möglicherweise wurde die Ressource verschoben und jemand hat vergessen, eine Umleitung einzubauen. Die 404 ist ein weites Netz.

410 Gone ist der explizite Einmottungs-Code. Der Server sagt „unter dieser URL gab es eine Ressource, sie wurde permanent entfernt, frag nicht nochmal nach". Es ist das Signal, die Tür zu schließen. Google dokumentiert das ausdrücklich: 410 wird als stärkeres Signal interpretiert, die URL aus dem Index zu entfernen, als 404.

Wie Googlebot jeden Code behandelt

404-Verhalten. Googlebot trifft auf eine 404, markiert die URL als fehlend, behält sie aber in der Crawl-Queue. Der Bot besucht die URL nach einem verlangsamenden Schema (24h, dann 7d, dann 30d, dann 90d). Falls die URL irgendwann wieder mit 200 antwortet, wird sie reaktiviert. Der Zyklus läuft monatelang weiter. Die URL bleibt im Coverage-Report der Search Console unter „Nicht gefunden (404)" für diese ganze Zeit.

410-Verhalten. Googlebot trifft auf eine 410, markiert die URL als dauerhaft stillgelegt, entfernt sie innerhalb von Tagen aus dem Index. Die URL erscheint kurzzeitig in der Search Console unter „Seite aufgrund einer rechtlichen Beschwerde entfernt" oder „Soft 404" je nach Interpretation durch Google, verschwindet dann. Die Crawl-Queue stellt das erneute Aufsuchen ein.

Der funktionale Unterschied liegt darin, dass Index-Verschmutzung Tage statt Monate andauert.

Wann man 410 statt 404 wählt

  • Migration-Bereinigung: URLs, die auf der neuen Site nicht mehr existieren und kein semantisches Äquivalent haben. Nutze 410. Sie sind weg.
  • Gelöschte Blog-Posts: alte Inhalte, die du bewusst stillgelegt hast. 410, wenn du dir sicher bist; 404, wenn es eine Chance gibt, dass der Post unter dem gleichen Slug zurückkommt.
  • Stillgelegte Produktseiten: SKUs, die du nicht mehr verkaufst. 410, wenn das Produkt dauerhaft eingestellt ist; 404, wenn es zurückkommen könnte.
  • URL-Muster-Stilllegung: z. B. Stilllegung von /forum/*, weil das Forum deaktiviert wurde. 410 für den gesamten Pfad.
  • Junk-URLs aus früheren Hacks oder CMS-Fehlern, die irgendwie in den Index gelangt sind. 410.

Wann 404 die richtige Antwort ist

  • Tippfehler und URLs, die es nie gab: 404 ist die konventionelle Antwort. 410 wäre falsch, weil die URL nie Inhalt hatte.
  • Inhalte, die neu veröffentlicht werden sollen: Falls die URL zurückkommt, hält 404 die Tür für Google offen, um sie wiederzufinden.
  • Vorübergehend nicht verfügbare Seiten: 404 ist hier auch falsch — nutze 503 mit einem Retry-After-Header. Fehlt dieser, ist 404 die sicherere Standardwahl für mehrdeutige Fälle.

So stellst du 410 auf gängigen Plattformen ein

Vercel (vercel.json)

Füge eine Rewrite- oder Status-Code-Regel hinzu. Das saubere Muster ist, einen /410-Endpunkt zu erstellen und pensionierte URLs mit statusCode 410 darauf umzuleiten. Beachte, dass vercel.json nativ Redirects unterstützt, aber keine Status-Code-Rewrites für beliebige URLs; das Muster ist, eine Next.js-Middleware zu nutzen, die new Response(null, { status: 410 }) für beliebige URLs in deiner Pensionierungsliste zurückgibt.

Netlify (netlify.toml oder _redirects)

Nutze die _redirects-Syntax: /retired-url 410! — das Ausrufezeichen am Ende ist der Force-Status-Flag. Oder in netlify.toml nutze einen [[redirects]]-Block mit status = 410.

Apache (.htaccess)

Redirect gone /retired-url — oder nutze RewriteRule mit dem [G]-Flag: RewriteRule ^retired-url$ - [G,L].

Nginx

return 410; innerhalb eines location-Blocks, der dem URL-Pattern entspricht. Für Bulk-Patterns: location ~ ^/old-pattern/ { return 410; }.

Warum das in der Skalierung zählt

Eine Website mit 10.000 pensionierten URLs, 50/50 aufgeteilt zwischen 404 und 410, sieht die 410-Hälfte innerhalb von zwei Wochen aus dem Coverage-Report verschwinden, während die 404-Hälfte drei bis sechs Monate lang im Coverage-Report herumtreibt. Die 404-Menge beansprucht Googlebot-Crawl-Budget, das für die URLs gedacht ist, die du indexiert haben möchtest. Bei größeren Websites ist die Budget-Auswirkung messbar: weniger Budget für Retirement bedeutet mehr für neue Inhalte.

Das Migration-Pattern

Drei Schritte für jede Migration-Bereinigung. Eins: Hole jede URL aus Search Console, Ahrefs und der alten Sitemap. Zwei: Kategorisiere jede URL in einen von vier Buckets: (a) Maps zu einer neuen URL → 301-Umleitung, (b) umbenannt zu neuem Slug → 301, (c) dauerhaft in den Ruhestand versetzt → 410, (d) mehrdeutige Status → 404. Drei: Schreibe die Umleitung/410/404-Regeln in vercel.json oder .htaccess im selben Deploy wie der neue Inhalt, plus ein Build-Zeit-SEO-Linter, der den Build fehlschlägt, wenn eine URL vor der Migration aus dem Rule-Set fehlt.

Wissenswert: der 451-Code

451 Unavailable For Legal Reasons existiert für Inhalte, deren Entfernung du rechtlich veranlasst worden bist. Es ist selten und spezifisch — DMCA-Takedowns, GDPR-Recht-auf-Vergessenheit, wenn die URL ganz in den Ruhestand versetzt wird, Gerichtsbeschlüsse. Google interpretiert es ähnlich wie 410 (fällt aus dem Index), aber das rechtliche Signal ist das, was zählt. Nutze es nur, wenn der rechtliche Kontext zutrifft.

Die Zusammenfassung

Nutze 410 für dauerhaften Ruhestand. Nutze 404 für wirklich fehlende oder mehrdeutige Inhalte. Der Unterschied zwischen zwei Wochen und sechs Monaten bei der Index-Bereinigung zeigt sich bei jeder Migration über ein paar tausend URLs. Die Lösung ist eine Regel in vercel.json, netlify.toml oder .htaccess. Mache es beim Cutover richtig und du sparst die Post-Launch-Bereinigung, für die niemand Budget einplant.

Angrenzende Lektüre: 301 vs 302 vs 307 vs 308 ist der verwandte Aufruf für URLs, die nicht in den Ruhestand versetzt, sondern verschoben werden. Die gleiche Migration-Bereinigung, die 410 braucht, braucht auch die Redirect-Code-Entscheidung; schau dir dazu den Redirect-Strategy-Post an.

< BACK