Soft-404-Fehler: Was sie sind und wie du sie behebst
Kurzantwort: Ein Soft-404 liegt vor, wenn eine Seite dem Besucher „nicht gefunden“ zeigt (oder kaum etwas), der Server aber mit dem Erfolgscode 200 statt mit 404 antwortet. Google behandelt das als Fehler: Deutet der Inhalt einer 2xx-Antwort auf einen Fehler hin, meldet die Search Console einen Soft-404. Behoben ist er, sobald der Server den Statuscode sendet, der zur Wahrheit passt: 404 oder 410 für entfernte Seiten, 301 auf eine gleichwertige Seite für umgezogene und echter Inhalt für Seiten, die es geben soll.
Was ist ein Soft-404?
Stell dir ein Geschäft vor, an dessen Tür „Geöffnet“ steht, während drinnen die Regale leer sind. So verhält sich ein Soft-404. Der Server meldet in der ersten Zeile seiner Antwort den Statuscode, noch bevor irgendein Inhalt kommt, und 200 bedeutet „alles in Ordnung, hier ist die Seite“. Der Inhalt sagt dann „nicht gefunden“, „0 Treffer“ oder gar nichts.
Google beschreibt das in der Dokumentation zu HTTP-Statuscodes und Netzwerkfehlern so: Bei einer 2xx-Antwort zieht Google den Inhalt zur Verarbeitung heran. Deutet er auf einen Fehler hin, zum Beispiel als leere Seite oder als Fehlermeldung, zeigt die Search Console einen Soft-404-Fehler an. Bei einem echten 4xx-Status verwendet Google den Inhalt der Adresse dagegen nicht.
Im Terminal sieht der Unterschied so aus. Beide Befehle fragen eine Adresse ab, die es nicht gibt, aber die beiden Server antworten verschieden:
# Server A: zeigt „nicht gefunden“, sendet aber 200 (ein Soft-404)
$ curl -s -o /dev/null -w "%{http_code}\n" https://a.beispiel.example/gibt-es-nicht
200
# Server B: zeigt „nicht gefunden“ und sendet 404 (richtig)
$ curl -s -o /dev/null -w "%{http_code}\n" https://b.beispiel.example/gibt-es-nicht
404
Der Besucher bekommt bei beiden dieselbe nette Seite „Hier ist nichts“ zu sehen. Ein Crawler liest aber zuerst den Status.
Das „soft“ im Namen heißt übrigens nicht „harmlos“. Es bedeutet nur, dass die Fehlermeldung im Inhalt steckt und nicht im Statuscode.
Warum ist ein Soft-404 ein Problem?
Trenne sauber, was belegt ist und was nicht.
Belegt:
- Die Search Console führt solche Adressen als Soft-404-Fehler. Google selbst sieht darin also ein Problem.
- Bei einem echten 404 oder 410 lässt Google den Inhalt der Adresse außen vor. Bei einem 200 muss es anhand des Inhalts raten, ob die Seite ein Fehler ist.
Nicht belegt: eine direkte Auswirkung auf das Ranking. Google benennt den Fehler im Bericht, mehr nicht. Dass ein Soft-404 andere Seiten deiner Website schwächt, sagt Google nicht, und wir haben keine Quelle gefunden, die es beweist. Aussagen wie „Soft-404-Fehler zerstören dein SEO“ sind nach unserem Kenntnisstand nicht belegt.
Unsere Einschätzung, nicht mehr: Eine Seite ohne Wert sollte nicht als Suchergebnis zur Wahl stehen, und die Korrektur ist billig. Es gibt außerdem einen Grund, der nichts mit Google zu tun hat: Werkzeuge, die auf kaputte Links prüfen, und Überwachungsdienste lesen Statuscodes. Wenn jede Adresse mit 200 antwortet, schlagen sie nie an. Und wer einem alten Link folgt, erfährt nicht, dass die Seite abgeschaltet wurde.
Woher kommt ein Soft-404?
Typische Ursachen:
- Die hübsche Fehlerseite mit Status 200. Ein CMS, ein Framework oder eine Proxy-Regel liefert eine gestaltete Vorlage „Seite nicht gefunden“ aus, aber niemand hat den Status auf 404 gestellt. Das ist der einfachste Fall.
- Eine Single-Page-Application (SPA) liefert für jeden Pfad dieselbe Hülle. Der Server schickt die App mit Status 200 aus, egal welche Adresse kommt. Erst nach dem Ausführen von JavaScript erscheint „nicht gefunden“, doch den Status hat der Server da längst gesendet. Google arbeitet in Schritten (Crawling, Rendering, Indexierung), und Seiten mit Status 200 kommen in die Warteschlange zum Rendern. Das Modell steht in Googles Grundlagen zu JavaScript und Suche. Wie es Crawlern geht, die Skripte womöglich gar nicht ausführen, behandelt unser Artikel zu KI-Crawlern und JavaScript.
- Alles auf die Startseite weiterleiten. Wer gelöschte Seiten pauschal zur Startseite schickt, erzeugt eine 200 mit fremdem Inhalt. Die Startseite ist selten das Gleichwertige zu dem, was fehlt.
- Leere Listen. Eine Kategorie-, Schlagwort- oder Suchseite ohne Einträge antwortet mit 200 und zeigt „0 Ergebnisse“ oder einen leeren Rahmen.
- Ausverkaufte oder eingestellte Produkte. Die Seite bleibt stehen und sagt nur noch „nicht verfügbar“. Hat sie weiter eine echte Beschreibung und einen Hinweis zur Verfügbarkeit, ist das etwas anderes als ein nackter Hinweis.
- Dünne Seiten. Platzhalter und halb fertige Bereiche mit fast keinem Text. Was wie eine Fehlermeldung oder eine leere Seite aussieht, kann markiert werden, auch wenn niemand eine Fehlerseite wollte.
Wie findest du Soft-404-Fehler?
Drei Wege, die sich ergänzen:
- Search Console. Im Bericht „Seitenindexierung“ (englisch „Page indexing“) suchst du den Grund „Soft 404-Fehler“. Dort stehen die Adressen, die Google selbst so eingeordnet hat. Die URL-Prüfung zeigt dir, was Google von einer einzelnen Adresse erhält.
- Terminal. Du rufst eine Adresse ab, die es nicht geben kann, und liest den Status (Befehl weiter unten).
- Browser. Öffne die Entwicklertools, wechsle zum Reiter „Netzwerk“, lade eine ausgedachte Adresse und sieh dir den Status der ersten Anfrage an. Die Seite selbst hilft nicht, denn sie sieht bei jedem Status gleich aus.
Für das Terminal reicht ein Befehl. Die Option -L folgt Weiterleitungen, damit du siehst, wo die Adresse am Ende landet:
curl -s -L -o /dev/null -w "%{http_code} %{url_effective}\n" https://beispiel.example/gibt-es-nicht-12345
Gut ist 404. Bekommst du 200 https://beispiel.example/, schickt der Server unbekannte Adressen zur Startseite. Nimm GET wie hier und nicht curl -I, denn manche Server beantworten eine HEAD-Anfrage anders als eine normale.
Frage immer die öffentliche Adresse ab und nicht die Anwendung direkt. Ein CDN, ein Zwischenspeicher oder eine Firewall davor kann die Antwort verändern.
So prüft SEOgrinder auf einen Soft-404
Der kostenlose Scan in SEOgrinder fragt deine Website nach einer Adresse, die er sich mit zufälligem Namen ausdenkt und die es nicht geben kann. Kommt 200 zurück, meldet er einen Fund. Leitet die Website diese Adresse auf die Startseite um, zählt das genauso, weil es ebenfalls bei 200 endet. Das Ergebnis steht im Reiter „Seite bei Google“, in der Karte „Indexierung“: entweder „Unbekannte Adressen liefern korrekt 404“ oder „Unbekannte Adressen liefern 200 statt 404“. Bei einem Fund landet die Aufgabe mit dem Rat in der Liste, einen echten 404 oder 410 auszugeben.
Zwei Grenzen gehören dazu. Der Test zeigt, wie dein Server mit Adressen umgeht, die es nicht gibt. Welche deiner echten Seiten Google als Soft-404 eingestuft hat, zeigt er nicht, das Urteil für einzelne Adressen steht in der Search Console. Ist SEOgrinder bei dir lokal installiert und mit der Search Console verbunden, liest das Werkzeug zusätzlich den gespeicherten Indexstatus der geprüften Seite und weist darauf hin, wenn Google sie als Soft-404 führt. Und ob eine dünne Seite für Google leer wirkt, kann der Test nicht beurteilen. Der Website-Durchlauf meldet dünne Seiten und defekte interne Links, und dort fängt das Problem oft an.
Welcher Statuscode passt? Die Entscheidungstabelle
Maßgeblich ist, was für die Seite tatsächlich gilt. Passe den Status an die Wahrheit an, nie umgekehrt.
| Lage | Richtige Antwort | Anmerkung |
|---|---|---|
| Die Seite ist endgültig entfernt, nichts Gleichwertiges vorhanden | 404 oder 410 | Eine gestaltete Fehlerseite ist erlaubt, sie muss aber den Fehlerstatus senden |
| Die Seite hat eine neue Adresse | 301 (oder 308) auf die gleichwertige neue Seite | Starkes Signal, das Ziel zu verarbeiten |
| Der Umzug ist nur vorübergehend | 302 (oder 307) | Schwaches Signal, also nicht für dauerhafte Umzüge |
| Die Seite existiert, ist aber dünn oder fast leer | Echten Inhalt ergänzen | Oder entfernen, wenn sie keinen Zweck hat |
| Eine Listen- oder Suchseite ist dauerhaft leer | 404 | Nicht mehr verlinken und nicht in die Sitemap aufnehmen |
| Eine Listenseite ist nur gerade leer | Etwas Nützliches zeigen | Etwa verwandte Einträge und einen Hinweis, mit Status 200 |
| Ein Produkt ist endgültig weg | 404 oder 410, oder 301 auf den direkten Nachfolger | Nicht auf die Startseite |
| Ein Produkt ist nur zeitweise nicht lieferbar | Die Seite mit ihrem echten Inhalt behalten | Hier ist 200 richtig |
Zur Weiterleitung sagt Google: 301 und 308 sind ein starkes Signal, dass das Ziel verarbeitet werden soll, 302 und 307 ein schwaches. Google folgt standardmäßig bis zu zehn Schritten und ignoriert den Inhalt der Adresse, die weiterleitet. Leite deshalb nur einmal weiter, direkt auf das endgültige Ziel.
So behebst du einen Soft-404 in nginx, Node und SPAs
nginx
Diese Konfiguration zeigt eine gestaltete Fehlerseite und behält dabei den Status 404. error_page 404 /404.html; belässt den Status, solange du kein =200 einfügst, lass es also weg.
server {
root /var/www/beispiel;
error_page 404 /404.html;
location / {
try_files $uri $uri/ =404;
}
location = /404.html {
internal;
}
# bewusst entfernt
location /alte-aktion/ {
return 410;
}
# umgezogen
location = /alte-seite {
return 301 https://beispiel.example/neue-seite;
}
}
Node
Bei Routen mit Daten muss der Code erst nachsehen, ob es den Datensatz gibt, und erst dann den Status wählen. Das Beispiel kommt ohne Pakete aus:
import http from 'node:http';
const produkte = new Map([['blaue-tasse', 'Blaue Tasse']]); // Platzhalter für deine Datenbank
http.createServer((req, res) => {
const { pathname } = new URL(req.url, 'http://localhost');
const treffer = /^\/produkte\/([a-z0-9-]+)$/.exec(pathname);
const name = treffer && produkte.get(treffer[1]);
res.writeHead(name ? 200 : 404, { 'content-type': 'text/html; charset=utf-8' });
res.end(name ? `<h1>${name}</h1>` : '<h1>Seite nicht gefunden</h1>');
}).listen(3000);
Die Fehlerseite darf freundlich und gestaltet sein, der Status bleibt 404. Die meisten Frameworks bieten dafür eine eigene Funktion oder einen Hook für „nicht gefunden“. Nimm den, der den Status setzt und nicht bloß eine Vorlage ausgibt.
Single-Page-Apps
Der Server muss wissen, welche Pfade es wirklich gibt. Die gängige Abkürzung, für alles die index.html zu senden, schafft das Problem erst. In nginx zählst du die echten Routen auf und antwortest auf den Rest mit 404:
location = / {
try_files /index.html =404;
}
location ~ ^/(ueber-uns|kontakt|docs)/?$ {
try_files /index.html =404;
}
location / {
try_files $uri =404;
}
Der letzte Block findet Skripte, Stile und Bilder, jeder andere Pfad bekommt 404. Ist die Liste lang oder ändert sie sich oft, erzeuge sie beim Build aus deinem Router. Der andere Weg ist, echte Seiten auf dem Server oder vorab zu erzeugen, sodass jede Adresse eine eigene HTML-Datei hat und der Server für sie antworten kann. Google selbst nennt Server-Side-Rendering und Pre-Rendering weiterhin eine gute Idee, weil die Seite für Nutzer und Crawler schneller wird und weil nicht alle Bots JavaScript ausführen. Für Apps, in denen sich ein Statuscode nicht oder nur schwer setzen lässt, nennen die JavaScript-Grundlagen von Google zwei weitere Wege: per JavaScript auf eine Adresse weiterleiten, die 404 liefert (zum Beispiel /nicht-gefunden), oder auf Fehlerseiten per JavaScript <meta name="robots" content="noindex"> setzen.
Wiederhole nach jeder Änderung die curl-Prüfung und teste eine echte Seite, eine umgezogene Seite und eine Adresse, die es nicht gibt.
Häufige Fehler
- Das Aussehen reparieren statt den Status. Eine schöne Seite „nicht gefunden“ mit Status 200 bleibt ein Soft-404.
- Alle fehlenden Seiten auf die Startseite leiten. Das verbirgt das Problem vor deinen eigenen Werkzeugen und gibt Besuchern etwas anderes, als sie gesucht haben. Leite auf eine gleichwertige Seite oder antworte mit 404.
error_page 404 =200 /index.html;und ähnliche Abkürzungen. Sie machen jede unbekannte Adresse zu einer 200.- Nur im Browser testen. Der Browser zeigt bei jedem Status dasselbe. Lies den Status.
- Nur eine Adresse testen. Prüfe eine echte Seite, eine umgezogene und eine erfundene, möglichst in verschiedenen Bereichen der Website.
- Die Adressen per robots.txt sperren, statt den Status zu korrigieren. Ein Crawler, der eine Seite nicht abrufen darf, sieht ihren Statuscode nie.
- Tote Adressen in der Sitemap lassen. Eine Sitemap soll nur Seiten nennen, die es gibt und die mit 200 antworten.
Häufige Fragen
Schadet ein Soft-404 meinem Ranking?
Nicht belegt. Dokumentiert ist nur, dass Google ihn als Fehler in der Search Console meldet. Eine direkte Abstrafung für den Rest deiner Website steht in keiner Quelle, die wir genutzt haben. Sinnvoll ist deshalb diese Haltung: Behebe ihn, weil die Antwort falsch ist, nicht wegen eines versprochenen Gewinns.
Worin unterscheidet sich ein Soft-404 von einem normalen 404?
Ein 404 ist ehrlich: Der Status sagt, dass die Seite nicht existiert. Ein Soft-404 sagt 200 und widerspricht sich damit selbst, denn der Inhalt sagt das Gegenteil.
Soll ich 404 oder 410 senden?
Beide sind 4xx-Fehlerstatus, und bei beiden nutzt Google den Inhalt der Adresse nicht. 404 ist die übliche Antwort auf „nicht gefunden“. 410 heißt „dauerhaft entfernt“ und passt zu Seiten, die du bewusst abgeschaltet hast.
Darf ich eine eigene 404-Seite gestalten?
Ja, das solltest du sogar. Setze einen Link zur Startseite oder eine Suche hinein, aber achte darauf, dass der Status 404 lautet.
Wie lange dauert es, bis die Meldung in der Search Console verschwindet?
Das kann dir niemand zusagen. Der Eintrag ändert sich, wenn Google die Adresse erneut abruft, und wann das geschieht, entscheidet Google.
Meine SPA liegt bei einem Hoster, an dessen Server ich nichts einstellen kann. Was nun?
Dann entscheidet der Hoster über den Status. Lies in seiner Dokumentation nach, ob unbekannte Pfade einen 404 liefern können, oder frage den Support. Hilft das nicht, nennt Google zwei Wege, wenn sich in einer Single-Page-App kein Statuscode setzen lässt: per JavaScript auf eine Adresse weiterleiten, die 404 liefert (zum Beispiel /nicht-gefunden), oder auf Fehlerseiten per JavaScript <meta name="robots" content="noindex"> setzen. Außerdem kannst du die Seiten vorab erzeugen, sodass jede echte Adresse eine eigene Datei hat. Für alles andere gibt es dann keine Datei, und der Hoster kann mit seinem 404 antworten.
Dein nächster Schritt
Rufe mit curl eine Adresse ab, die es auf deiner Website nicht geben kann. Kommt kein 404 zurück, behebe zuerst das. Danach machst du den kostenlosen Scan mit SEOgrinder, suchst im Reiter „Seite bei Google“ in der Karte „Indexierung“ die Zeile zum Soft-404 und klickst nach deiner Änderung auf „Neu prüfen“, um das neue Ergebnis zu sehen.