Soft 404 errors: what Google means and how to fix them
·4 min read
A soft 404 is a URL that tells Google "200 OK" while the page itself looks like an error, an empty page or a "not found" message. Google decides from the content that the page has nothing worth indexing, drops it, and lists it under "Soft 404" in Search Console's Page indexing report. The fix is to make the status code and the content agree. Return a real 404 or 410 for pages that are gone, and give pages that should stay enough content that they no longer look empty.
What does soft 404 mean?
Google's Page indexing report help describes it as a page that returns a user-friendly "not found" message without a 404 HTTP response code. Google's HTTP status documentation widens that to any 200 page whose content suggests an error, an empty page or an error message.
A soft 404 is a judgment about content, so a correctly configured server can still trigger one. The URL is already out of the index.
"Not found (404)" is a different row, a real 404 that is often fine. Our guide to 404 errors covers when to ignore those.
Common causes of soft 404 errors
| Cause | What Google sees | Fix |
|---|---|---|
| Error page served with 200 | "Page not found" text and a 200 status | Return 404 or 410 from the server |
| Empty category or search page | A template with zero products or results | Add content, noindex it, or remove it |
| Out-of-stock or discontinued product | "No longer available" and little else | Keep useful details, or 404/redirect if gone for good |
| JavaScript app with client-side routing | The shell returns 200 for every path | Redirect to a server 404 URL, or inject noindex |
| Redirect to the home page | A removed URL landing on an unrelated page | Redirect to a close match, or return 404 |
Error page returning 200
A CMS or framework catches a missing route and renders the "not found" template without setting the status. Request a URL that does not exist and read the status line.
curl -I https://example.com/this-page-does-not-existIf it says HTTP/2 200, every missing URL is a potential soft 404. Fix the server or framework config so the not-found template ships with a 404.
Empty category and search pages
A category with no products or an internal search URL with zero results looks like an empty page. Fill the categories you want ranked with real items and a short intro. Add noindex to internal search result pages. Delete or 404 the categories you no longer stock.
Out-of-stock products
A product page that says "unavailable" over an empty layout reads as an error. If the product is coming back, keep the page at 200 with the full description, specs, reviews and an expected restock date or alternatives. If it is discontinued with no replacement, return 404 or 410. If a direct successor exists, 301 to it.
How to fix soft 404s in JavaScript apps
Single-page apps return the same HTML shell with a 200 for every path, then show an error in the browser.
Google's JavaScript SEO basics give two options when the server cannot send the right status. Redirect with JavaScript to a URL where the server does return 404, or add a robots noindex meta tag to the error view.
if (!product) {
window.location.href = "/not-found"; // the server answers this path with 404
}Server-side rendering is the cleaner fix, because the server knows the lookup failed and can send the 404 itself. Our post on JavaScript SEO explains what else crawlers miss in client-rendered pages.
Why redirecting to the home page causes soft 404s
Redirecting every removed URL to the home page looks tidy, and Google counts it as a soft 404. Its 404 help page says redirecting users to another page, such as the homepage, instead of returning a 404 creates soft 404s, and tells you not to redirect to your homepage or block 404s with robots.txt.
Redirect only when a page with the same purpose exists, such as an old product to its newer model. Otherwise let the URL return 404 or 410. Google says it treats 410 the same as 404, so pick either. The differences are in our 404 vs 410 comparison.
How to confirm a soft 404 is fixed
After the change, check each URL in two places.
- Confirm the status. Removed pages should return 404 or 410, redirected pages should land on a relevant URL, and kept pages should return 200.
- Run a live test in Search Console's URL Inspection tool and look at the rendered page. Google's help suggests this for pages you think it misclassified, and suggests adding more information to the page if it really is not an error.
- Click "Validate fix" on the Soft 404 row in the Page indexing report so Google recrawls the affected URLs.
If a page you want indexed keeps coming back as a soft 404, the content is too thin. Add substance. Thin pages that pass often land in Crawled, currently not indexed instead.
Check status codes and redirect targets for a URL list
Our HTTP Status Bulk Checker takes up to 20 URLs per run and shows each one's final status code, the first redirect status and where it points, the final URL and the response time. It flags 4xx, 5xx and unreachable URLs, and notes when a site's bot protection refused the check. A run costs 20 credits.
It does not detect soft 404s. It never fetches page bodies, so a "not found" page served with 200 shows up as 200. Use it for the step that matters after the fix, confirming your removed URLs now return 404 or 410 and your redirects point somewhere other than the home page.