Soft 404 medium
Soft 404 (200 OK on a Missing Page)
A page that no longer exists returns HTTP 200 instead of 404, so 'not found' content gets served as success.
What you see
Page indexing > Why pages aren't indexed Soft 404 Validation: Not started
What’s actually happening
The page tells a human "Sorry, this product is no longer available" or shows an empty results template, but the HTTP status is 200 OK. Crawlers take the 200 at face value and treat dead content as a live, indexable page. Google catches the mismatch and files it under "Soft 404" in the Page indexing report. Run curl -I against the URL — if a clearly-empty or 'not found' page returns HTTP/1.1 200, that's the bug.
Common causes
- A custom error page renders its 'not found' message but the framework returns 200 because the route technically matched.
- An empty category, search, or filter page renders a bare template with no items and a 200.
- Deleted content was redirected to the homepage or a generic landing page (Google reads near-empty or irrelevant redirects as soft 404s too).
- Thin pages — almost no content — that Google decides aren't worth treating as real.
- A CMS or SPA serves a client-side 'not found' view after the server already sent 200 with the app shell.
How to fix it
- Send the correct status codeWhen content is gone, the server must return 404 (gone, might come back) or 410 (gone for good). In Express that's res.status(404); in a SPA, the server needs to return the real status, not let the client render the message under a 200.
- Confirm the header, not just the pagecurl -I https://example.com/dead-page and read the status line. The visible page is irrelevant — Google indexes on the HTTP status. Fix it until the header says 404 or 410.
- Redirect only when there's a true replacementIf the old page maps to a specific new page, 301 to that exact URL. Don't blanket-redirect everything to the homepage — Google treats irrelevant redirects as soft 404s anyway.
- Beef up or remove thin pagesIf the page should exist but got flagged for thin content, add substantive content or consolidate it into a stronger page. Empty filter/search states should noindex or return 404 when they have nothing to show.
- Validate in Search ConsoleOnce the status codes are right, click Validate Fix on the Soft 404 issue and let Google recrawl. The report clears as it reprocesses each URL.
Stop it recurring
Wire your error and empty-state templates to emit a 404/410 status code, and spot-check with curl -I so 'not found' never ships as 200.
Related errors