Skip to content

field note

Soft 404 in Search Console: what it means and how to fix it

Indexing

Shahid AliAugust 27, 2026all posts

Soft 404 in Search Console: what it means and how to fix it

A soft 404 in Search Console means the page told Google two different things at once. The content said this page does not exist. The HTTP response said 200, everything is fine. Google believed the content and filed the mismatch against you.

Google’s page indexing report documentation puts it plainly: the page request returns what we think is a soft 404 response, which means it returns a user-friendly “not found” message but not a 404 HTTP response code. The recommendation attached to it is equally plain: return a 404 for pages that are truly not found, and if the page is not an error, add enough information to the page that Google can tell.

Read that second half again, because it is the half everyone skips. Soft 404 is not only a status code bug. It is also what Google says when a real page is too empty to look like a real page.

What Google is actually checking

Two separate signals, and the status is what happens when they disagree.

Google’s documentation on HTTP status codes describes the crawl side without ambiguity. A 200 is handed to the indexing pipeline, and the indexing systems may index the content, but that is not guaranteed. A 404 or 410 is the opposite instruction: all 4xx errors except 429 are treated the same way, the crawler tells the next system the content does not exist, and the indexing pipeline removes the URL from the index if it was there before.

Then the sentence that creates this whole status. If the content suggests an error for Google Search, an empty page or an error message, Search Console will show a soft 404 error.

So the check is content-first. Google renders what came back, reads it, and if it reads like an error page or reads like nothing at all, the 200 is overruled.

Where a soft 404 is decided 404 or 410 Status code answers it Content does not exist. URL removed from the index. 200 Content is read first Real content: goes to the indexing pipeline, which may still decline it. Error message or empty page: Search Console reports a soft 404. The status code is a claim. On a 200, the rendered content is what settles it. Source: Google Search Central, HTTP status codes and network errors, and the Search Console page indexing report.

The three shapes I see on real sites

The deleted page that never learned to say so. A product goes out of stock, a listing expires, a category empties, and the template renders “sorry, nothing here” over a 200. This is the textbook case and it is the easy one.

The single-page app. This is the one that arrives in bulk, and Google documents it as its own failure mode. In the guidance on fixing search-related JavaScript problems, the wording is direct: when a single-page app uses client-side JavaScript to handle errors, it often reports a 200 status code instead of the appropriate status code, which can lead to error pages being indexed and shown in search results. The server never knew the request failed, because the failure happened after the server was done.

Google gives two fixes for it, and either is enough. Redirect to a URL where the server responds with a 404. Or inject a robots meta tag set to noindex when the lookup comes back empty.

The page that is real and looks like nothing. No error anywhere, no bug to fix, just a page whose main content is a heading and a widget. This one gets misdiagnosed constantly, because people go hunting for a status code problem that does not exist. If the page is meant to be there, Google’s instruction is the one in the report: add more information to the page. That is a content fix, and it is the same underlying judgment that produces crawled, currently not indexed on thin pages, arriving under a different label.

How to tell which one you have

Do not guess from the URL list. Two checks, in order, and they take a minute each.

  1. Read the status code, not the page. Request the URL and look at what the server actually answers. If a page that says “not found” answers 200, you have shape one or shape two, and the fix is a status code. This is the same discipline as reading the response rather than the screen on failed: robots.txt unreachable, where a file that looks fine in a browser is answering 500 to Googlebot.
  2. Run the live test and look at the rendering. In URL Inspection, test the live URL and open View tested page. Google says to do exactly this for soft 404s, and the screenshot answers the question the HTML cannot: if the rendered page is blank or shows an error, you are looking at what Google saw, not what your browser assembled.

If the status is 200 and the render is full of real content, you are in shape three, and no amount of server configuration will move it.

The fix order

Nothing clever, and the order is the whole point.

For a page that should not exist: return 404 or 410. Google’s crawl documentation is explicit that this removes the URL from the index if it was previously indexed, and that newly encountered 404 pages are not processed at all. A 410 says the same thing more firmly. Neither is a punishment and neither harms the site. Being in the index is not the goal for a page that has nothing to offer.

For a page that moved: 301 to the replacement, which Google treats as a strong signal that the target should be processed. Do not redirect it to the homepage. A homepage that answers for a deleted product is itself a soft 404 in the making, because the content does not match the request.

For a page that should exist and is thin: write it, or merge it into the page that deserves to exist. The status will re-resolve on the next crawl without any submission, because it was a content judgment all along.

What I would not do is request indexing on the list. A soft 404 is Google reporting a mismatch it already resolved, and asking it to look again at an unchanged page produces the same verdict. The longer version of that argument is in does request indexing actually work.

Where it sits next to the other statuses

Soft 404 is not not found (404), which means the server did return a 404 and Google is telling you it found the URL somewhere. It is not URL is not available to Google, which is a live-test failure rather than an indexing judgment. And it is not a penalty. It is a mismatch report, and the whole map of the report that contains it is in every Search Console indexing status.

The reason I take it seriously out of proportion to its severity label is that it travels in groups. One soft 404 is a page. Two hundred of them is a template, a router, or a framework doing the same thing on every empty result, and that is worth an afternoon.

On a store, the template doing it is almost always the out-of-stock page. A product stripped down to a size chart and the words “currently unavailable” reads as an error to Google even though it returns a healthy 200, which is why what you do with out of stock and discontinued products decides how many of these you collect.

Sources