Soft 404 in Search Console: what counts as one and how to fix it
A soft 404 is a page that looks missing or empty but returns HTTP 200. Return 404 or 410 for gone pages, and fix pages whose content failed to load.
LLaunchScaler·Published ·8 min read
A soft 404 is a URL that shows a "not found" message, or next to no content, while the server returns HTTP 200 (success) instead of 404 or 410. Google detects it from the content, keeps it out of Search, and lists it as Soft 404 in the Page indexing report; the fix is to make the status code tell the truth.
Google counts three kinds of page as soft 404s: error pages that answer 200, pages with nothing on them, and real pages whose content failed to load for Googlebot. Each has its own fix.
What is a soft 404?
It is a mismatch between the status code and the content. Google defines it as "a URL that returns a page telling the user that the page does not exist and also a 200 (success) status code," adding that "in some cases, it might be a page with no main content or empty page." The server says the page is fine; the page says it is not.
Google's troubleshooting guide lists how such pages get generated: "a missing server-side include file," "a broken connection to the database," "an empty internal search result page," and "an unloaded or otherwise missing JavaScript file." It calls the result "a bad user experience" and says "such pages are excluded from Search."
The Page indexing report shows the status when "Google's algorithms detect that the page is actually an error page based on its content." Search Console's help recommends "returning a 404 response code for truly 'not found' pages." The page indexing report guide shows where this row sits among the others.
What is the difference between a soft 404 and a 404?
A 404 is honest and a soft 404 is not. A 404 status tells every crawler the page does not exist, and Google's indexing pipeline "removes the URL from the index if it was previously indexed." A soft 404 returns 200, so a crawler has to read the page to guess it is missing, and Google has to fetch, render and judge it first.
Hard 404 or 410
Soft 404
Questions, answered
What people ask about this
01
What is a soft 404?
A soft 404 is a URL that shows a not-found message, or next to no content, while returning HTTP 200 (success) instead of 404 or 410. Google detects it from the content and reports it as Soft 404 in the Page indexing report.
02
What is the difference between a soft 404 and a 404?
A real 404 is not a problem in itself. The Not found (404) guide covers which 404s to fix and which to leave.
How do you check the real status code?
Request the URL with curl and read the status line, not the browser. A browser shows you the rendered page, which can look identical for a 200 and a 404, while curl prints exactly what the server sent. Testing a path that cannot exist on your site also tells you in one line whether unknown URLs answer 404.
The answer should be 404 (or 410). A 200 means every mistyped or deleted URL on the site is a potential soft 404. To see the full response, including headers and any redirect, use curl -sI. Then confirm with Google's view: in URL Inspection, run Test live URL on an affected page and open View tested page, which shows the HTTP response and the rendered screenshot Google got.
Why does a single-page app return 200 for every URL?
Because the host is told to. Client-side routing needs the server to answer every path with index.html, and the usual rule does exactly that with status 200. Netlify's documented rule for single-page apps is /* /index.html 200; other hosts have equivalents. Every URL, including ones that match no route, then answers 200 with the same app shell.
The JavaScript router later decides the path is unknown and draws a "Page not found" screen, but the status code has already gone out as 200. Google's JavaScript guidance offers two fixes when the server cannot know in advance:
"Use a JavaScript redirect to a URL for which the server responds with a 404 HTTP status code (for example /not-found)."
"Add a <meta name="robots" content="noindex"> to error pages using JavaScript."
The better fix is at the server: replace the catch-all with rules for the routes that exist, so unknown paths fall through to the host's 404 response. Server-side rendering or prerendering does this naturally, because the server knows which pages exist.
Frameworks with streaming have their own version of the problem. The Next.js docs say its not-found UI returns "a 200 HTTP status code for streamed responses, and 404 for non-streamed responses," and that calling notFound() injects <meta name="robots" content="noindex" /> so the page is not indexed. If the missing-resource check runs after streaming has started, the status stays 200; the docs say the check has to happen before the response streams to return a real 404. The client-side rendering guide covers rendering choices in more depth.
Why do empty search results and category pages count as soft 404s?
Because they have no main content. An internal search for a term with no matches, a category with no products, or a tag with no posts renders a page that says "0 results" and little else. Google names "an empty internal search result page" as a soft 404 source, and it judges the empty category the same way.
Page
Fix
Internal search results (/search?q=)
Add noindex to all search result pages, and do not link to them from crawlable navigation
A category or tag that is empty for now
Add noindex until it has items, or hide it from navigation and the sitemap
A category or tag that will never have items again
Return 404 or 410, or 301 to its parent category
A listing page with too few items to be useful
Fill it with an intro and related items, or merge it into its parent
Google's troubleshooting guide lists soft 404 pages among the URLs that waste crawling and says to "return a 404 code when a page no longer exists."
Why did Google flag a real page as a soft 404?
Because the content did not load for Googlebot. Google says: "If an otherwise good page was flagged with a soft 404 error, it's likely it didn't load properly for Googlebot, it was missing critical resources, or it displayed a prominent error message during rendering." What Google judged was the broken version, not the page you see in your browser.
Inspect the URL in URL Inspection and click Test live URL.
Open View tested page and look at the screenshot and HTML. If it is blank, nearly blank or shows an error, Googlebot is not getting your content.
Open More info and check the page resources that could not be loaded and the JavaScript console messages.
Match the cause to Google's list: "blocked resources (blocked by robots.txt), having too many resources on a page, various server errors, or slow loading or very large resources."
Fix it: unblock the CSS and JavaScript Google needs, make the API call behind the main content return reliably for bots, or render the main content on the server.
Run the live test again, then click Request indexing.
A page whose data comes from an API that rate-limits or blocks unknown clients is a common version of this. The browser gets the data, Googlebot's render gets an error, and the page renders empty.
Which status code should each case return?
The one that matches reality. Pages that are gone return 404, or 410 if they are gone for good. Pages that moved return a 301 to the replacement. Pages that exist return 200 with their content. Google's advice follows the same split: 404 or 410 for "no replacement page," a "301 (permanent redirect)" for pages with "a clear replacement."
Situation
Status
Note
Deleted, no replacement
404 or 410
Keep a helpful custom 404 page, served with the 404 status
Moved to a new URL
301 or 308
One hop, straight to the replacement
Merged into another page
301 to the merged page
Fine for consolidated content
Many old URLs with no equivalents
404 or 410
Not a mass redirect to the homepage
Real page that rendered empty
200, with the content fixed
The status was never the problem
Google's site move guide warns against the shortcut in the fourth row: redirecting "many old URLs to one irrelevant single URL destination, such as the home page" can confuse users "and might be treated as a soft 404 error." A redirect-everything-home rule turns one soft 404 problem into many.
Custom 404 pages are fine as long as the status stays 404. Google says to make them helpful, with navigation and links to popular pages, but "make sure the server returns a 404 HTTP status code to prevent having the pages indexed."
Do soft 404s affect AI crawlers?
Yes, and more directly than Google. Vercel's study of AI crawler traffic found that "none of the major AI crawlers currently render JavaScript," with ChatGPT's and Claude's crawlers fetching script files without executing them. A crawler like that reads the raw response and the status code, and nothing else.
To such a crawler, a 200 response is a real page. A soft 404 with "Page not found" text, or an empty app shell that only fills in with JavaScript, arrives as a successful page with that text, which is the version that can be stored and quoted. A real 404 is the only signal it can act on without reading the page. The same study measured ChatGPT spending 34.82% of its fetches on 404 pages and Claude 34.16%, against 8.22% for Googlebot. The AI crawlers, 404s and redirects guide covers that side in detail.
Check how your site answers a missing page
To see what your site sends for a page that does not exist, run the free scan on LaunchScaler. It takes a URL, no account needed, and runs 156 checks across 6 of its 7 categories at no cost. Its soft 404 checks request a missing path and flag an error or empty page that returns 200, in the raw response and again after a browser render. Its AI visibility checks flag the same problem from the answer-engine side, alongside broken internal links and sitemap URLs that return 404. Fix the status codes it reports, then run Test live URL on one affected page before you click Validate fix on the Soft 404 row.
A 404 is an honest status code that tells crawlers the page does not exist. A soft 404 returns 200, so the server claims the page is fine while the content says it is missing or empty.
03
How do I fix a soft 404 error?
If the page is gone, return 404 or 410. If it moved, 301 it to its replacement. If it is a real page, open View tested page in URL Inspection to see what Googlebot rendered and fix whatever failed to load.
04
Why does my single-page app create soft 404s?
A catch-all rewrite that serves index.html with 200 for every path makes unknown URLs return 200. Route unknown paths to a real 404 response, or follow Google's advice to redirect to a URL that returns 404 or add a noindex tag with JavaScript.
05
Are soft 404s bad for SEO?
They are excluded from Search, and Google calls returning 200 for an error page a bad user experience. They also cost crawl requests on pages with nothing to index, so fix the ones on URLs people or crawlers can reach.
'URL is not on Google' means the page can't appear in Search. The Page indexing lines below it name the blocker: discovery, crawl, noindex or canonical.