Soft 404
The page loads, the server says 200, and Google still treats it as missing. How to see what Google saw, and the right fix for each cause.
Soft 404 means a URL returned 200 OK, the code for “here is the page”, but
what Google received looked like an error, an empty page or a “not found”
message. Google believes the content over the status code and leaves the URL out
of the index. Google’s
Page indexing help gives
the two answers: return a real 404 for pages that are truly gone, and add
content to pages that are real but look empty.
Which of the two applies depends on a question the report cannot answer for you: is this page supposed to exist?
First, see what Google saw
Open the URL in URL Inspection, run Test live URL, then View tested page. You get the HTML Google rendered and a screenshot. Compare it with what you see in a browser.
| What the tested page shows | What it means |
|---|---|
| A “not found”, “no results” or “unavailable” message | The page is gone or empty, and says so. Google read it correctly |
| A blank page, or the layout with no content in it | Your content is loaded by JavaScript that failed for Googlebot |
| The full page, as you see it | The page is thin: too little on it that is not template |
The causes, and the fix for each
The page is gone, but the server still says 200
A deleted product, a removed post or an expired listing shows your “not found”
template with a 200 status. This is the textbook case. Make the server return
404 for it; 410 works too, and Google treats the two the same. The URL then
moves to Not found (404), which is the correct place for a page that does not
exist.
If the content moved, 301 the old URL to the page that replaced it. Do not
redirect it to the homepage or to a category that does not mention it: Google
reads a redirect to an unrelated page as a soft 404 too.
A listing with nothing in it
A category with no products, a tag with no posts, an internal search with no
results. They return 200 and show an empty grid. Either return 404 when the
list is empty, or noindex these pages while they have nothing to show. Search
result pages generally should not be indexable at all.
Out of stock
A product page that says “unavailable” and nothing else looks like an error. If the product is coming back, keep the page useful: the description, the specifications, a restock date, similar products. If it is gone for good, treat it as a removed page.
The content does not render for Google
The browser shows a full page; the tested page is empty. Common reasons are an API
call that fails for Googlebot, a script or API path blocked in robots.txt, or
content that loads only after a click or a scroll. Page resources and
JavaScript console messages in the live test usually name the culprit. Fix the
rendering, not the status code.
The page is real, just thin
The tested page matches the browser, and there is still very little on it: a heading, a stock photo, a contact form. Google has decided there is nothing to index. Add what the page is for, or merge it into a page that has it.
What not to do
- Do not add filler. A few paragraphs of generic text around an empty listing do not make it a page anyone wants to find.
- Do not leave error pages at 200. A site-wide “not found” template that
returns
200turns every typo and every dead link into a URL Google has to judge for itself. - Do not chase the count to zero. If the URLs are genuinely gone, a
404moves them out of this report and into another one. That is the fix working.
After the fix
Run the live test again: a removed page should now report 404, and a real page
should render with its content. For a real page, Request indexing once. Then
check whether it actually came back, because a clean live test is not the same as
being indexed.
How to check if a page is indexed
covers the ways to do that and which ones tell you the truth.
When the answer is a different status
If Google rendered the page fine and still left it out, see crawled – currently not indexed. If the URL redirects, the story is in page with redirect, and the full list of causes is in why is my page not indexed.