Google Search Console soft-404 playbook

How to Fix Soft 404 Errors

Fix Google Search Console soft 404 errors by confirming the empty or not-found body, then restoring unique content, returning a real 404 or 410, or 301ing to a close replacement.

Diagram of a soft 404: HTTP 200 with an empty or not-found page body, labelled Soft 404 in Search Console.

To fix soft 404 errors in Google Search Console, inspect the live URL, then pick one honest response: restore unique content, return a real 404 or 410, or send a single 301 to a closely related replacement. A soft 404 is a URL Google treats as missing or empty even though the server returned success, often HTTP 200, or dumped the visitor on a generic page such as the homepage. This page is only that bucket. Server errors, robots blocks, and redirect loops are a different job.

Google's HTTP status code guidance is explicit: a 2xx response still becomes a soft 404 when the body looks empty or like an error. The Page indexing report labels that row Soft 404. The work is to make the status and the document agree, then wait for a recrawl.

What a soft 404 is (and is not)

A soft 404 is a mismatch. The HTTP layer says the request succeeded. The document Google rendered says the resource is gone, unfinished, or generic. Search Console's own wording is a user-friendly "not found" message without a 404 HTTP code. Empty shells, thin placeholders, no-result search pages, and missing URLs that redirect to the homepage all land in the same bucket.

A hard 404 or 410 is the opposite contract. Google ignores that body, removes the URL from the index over time, and slows recrawls. That is the correct signal when the resource is gone. Google's 404 help says returning any other code for a non-existent page, or redirecting it to a generic page, creates a soft 404 and confuses both users and search engines.

A soft 404 is also not Crawled, currently not indexed. That row means Google fetched a real document and declined to store it. Soft 404 means Google does not believe a real document is there. Do not expand copy on a URL that still looks missing. Do not treat a 5xx spike or a robots block as a soft 404 either. Those are fetch failures. This playbook starts after Google already received a success-looking response.

If the URL should exist and rank, the visibility checklist on how to make your website show on Google covers discovery after the document is honest. Come back here first when the Page indexing reason is Soft 404.

How Search Console flags a soft 404

Open Indexing → Page indexing. Soft 404 sits in the "Why pages aren't indexed" table. The source is usually the website, which means you can fix it. Click the row for example URLs and a history chart. The sample list is capped, so treat it as a pattern detector, not a complete inventory.

Then open URL Inspection on one example:

  1. Read Page fetch and the last crawl time. A successful fetch plus a Soft 404 label is the classic pairing.
  2. Use Test live URL, then View tested page. Google's screenshot is the evidence, not your logged-in browser.
  3. Compare crawled HTML with rendered HTML when the route depends on JavaScript.

Search Console tells you to run that live test and look at the screenshot before you argue with the label. If the screenshot is a blank app shell, a "page not found" card, or the homepage, the classifier is doing its job.

1. Confirm the URL is a soft 404

Do not rewrite titles until the live response and the rendered body agree with the GSC screenshot. Confirm outside your office network as well as in the inspector.

  1. Fetch headers. curl -sI https://example.com/missing-slug should show the status and any Location hop. Soft 404s often return 200 OK with a full HTML body, or a 301/302 to /.
  2. Fetch the first HTML. curl -s the URL and search for the main heading and a paragraph of unique copy. An SPA that ships <div id="app"></div> and nothing else is empty to a crawler that does not wait.
  3. Open URL Inspection → Test live URL → View tested page. Match the screenshot to the curl body. If they disagree, you have a bot or geo rule, not a content task.
  4. Group the sample URLs by template. Soft 404s almost never arrive as one-off copy bugs. They arrive as a CMS 404 skin, a search route, a tag archive, a filter, or a client-side router.

Practical rule: one template fix clears dozens of Soft 404 rows. One homepage rewrite clears none of them.

Decision diagram for a soft 404 URL: restore unique content, return 404 or 410, or send a single 301 to a closely related replacement, never the homepage.

2. Name the empty or not-found pattern

Name the pattern before you pick a status code. The same Soft 404 label covers several templates, and each template has one default fix.

What Google rendered Typical origin Default fix
A designed "not found" page on HTTP 200 Custom error view that never sets the status Keep the design, return 404 or 410
A blank app shell or spinner Client-rendered route with no server HTML Server-render the document, or 404 when it is gone
"No results" search, tag, or filter page Empty query string or unused taxonomy 404 or 410 empty archives; keep useful facets
Homepage or section hub after a hop Catch-all redirect for unknown slugs Stop the catch-all; 301 only to a close replacement
A stub with a title and no body CMS placeholder, empty product, or thin tag Write the page, consolidate it, or retire it

Google's 404 help also flags two anti-patterns that keep the classifier firing: inventing filler so the URL looks "real," and blocking the URL in robots.txt so Google cannot see a true 404. Neither hides the problem. A robots block stops Google from reading a noindex or a 404 body you added later. Fake paragraphs on a missing product still read as an error page.

Four templates that mint soft 404s: a 200 not-found skin, an empty JavaScript shell, a no-results search page, and a missing URL redirected to the homepage.

3. Choose one fix: restore, 404 or 410, or 301

Every Soft 404 URL gets exactly one outcome. Mixing them, 200 plus a canonical to elsewhere plus a homepage redirect, is how the label returns after the next crawl.

Restore the document when the URL should exist

Use this when the slug still matches a product, article, or category people ask for. The page needs unique main content in the first HTML response: a heading that names the topic, enough body to be a document, and no "oops" chrome. A title tag and a hero image are not a document.

Write the page you promised. If two stubs share one intent, keep one URL and point the other at it. The SEO content strategy guide is the place for that page-level choice. Soft 404 work only needs the outcome: one indexable document or an honest not-found.

Return 404 or 410 when the resource is gone

Keep the friendly not-found design. Change the status. 404 means not found. 410 means gone for good. Google currently treats them the same for indexing, so pick the one that matches the resource. Then remove the URL from the sitemap and from crawlable links. Google will recrawl it less often once the status stays 4xx.

Do not 401, 403, or 500 a missing page to "hide" it. Those codes mean something else. Do not noindex a 200 empty page as a shortcut. Google still has to fetch that URL to see the directive, and the body still looks missing.

Send one 301 only to a close replacement

A 301 is for a URL that moved, not for a URL you are tired of seeing in a report. The destination must answer the same intent: the new slug for a renamed post, the replacement product, the surviving category. Google's 404 help says a generic landing, especially the homepage, is a soft 404. One hop, HTTPS, and a 200 document at the end.

After the 301, inspect both the old and new URLs. Page fetch should show a single redirect and a successful final URL. Chains that bounce through www, then HTTPS, then a trailing slash still look sloppy and can fail inspection tools that do not follow every hop.

4. Fix the templates that mint soft 404s

Most Soft 404 counts are a template bug. Fix the template, then spot-check the sample URLs.

Custom 404 views that return 200

Frameworks make this easy to get wrong. The view is named 404. The layout is beautiful. The controller still returns 200 because a catch-all route rendered it as a normal page. Set the status in the same place you choose the view. In Laravel that is a 404 response or abort(404), not a fallback route that returns view('errors.404') with a 200. In WordPress, a proper 404 template already sends the status. A custom "not found" page built as a normal page does not.

JavaScript shells and client-only routers

If the first HTML has no main text, Google may classify the URL as empty even when a browser later paints an article. Server-render or prerender indexable routes. For unknown slugs, the origin should 404 before the app boots. After a deploy, re-test with curl and with View tested page. Your laptop executing JavaScript is not the test.

Empty search, tags, and facets

Internal search and faceted filters mint URLs for queries that have no results. If that URL is crawlable, Google will fetch it and call it a soft 404. Useful, populated filters can stay. Empty ones should 404 or stay out of crawlable HTML. Do not list them in the sitemap. Do not print a link to ?q=asdkjh just because a form can submit it.

Homepage catch-alls

A rewrite that sends every unknown path to / feels tidy in an edge config. It is a factory for soft 404s. Unknown paths should 404. Known moves should 301 to the replacement. The homepage is for people who asked for the homepage.

5. Clean sitemap and internal-link discovery

A fixed template still gets recrawled if you keep advertising the dead URL. Google already knows it. Your job is to stop reintroducing it.

  • Regenerate the sitemap from indexable, canonical keepers that return 200. Drop retired slugs the same day you 404 or 301 them.
  • Remove nav, footer, and in-body links to the dead path. The internal linking in HTML guide covers crawlable <a href> exports and orphan targets.
  • If the URL was submitted, update the sitemap that listed it. Discovery in URL Inspection often points back to that file.
  • Leave robots.txt alone for public 404s. Google needs to fetch the URL to see the honest status.

For a one-off header check (title, canonical, robots) on a suspect URL, the Orchory free SEO tools hub is enough. It does not replace curl or URL Inspection. The status code and the rendered body are the source of truth.

6. Verify in URL Inspection and validate the fix

Request indexing is a nudge, not a repair. Use it after the template and the discovery cleanup are live.

  1. Confirm the live status with curl: 200 plus a real document, 404 or 410 for a gone URL, or one 301 to a 200 replacement.
  2. Run Test live URL. Page availability and the screenshot should match the outcome you chose.
  3. Request indexing once for a keeper you restored. Skip it for URLs you retired.
  4. On the Soft 404 issue details page, click Validate fix after every sample pattern is handled. Google's validation help says the pass often takes up to about two weeks, and a single remaining instance fails the run.

If validation fails, open the URL Google still flags. Fix that template, then restart validation. Do not restart while empty 200s remain. A filter on a cleaned sitemap can make the check faster, because validation then covers the keepers you still care about.

Keep new routes from becoming soft 404s

Soft 404s return when a new route ships without a document, a status, or a link. Treat indexability as part of the page definition: status code, robots meta, canonical, crawlable navigation, and unique copy in the first HTML response. Empty CMS drafts should not be public. Catch-all routers should 404. Renames should 301 on the same deploy.

Orchory's job on this problem is the restored-document path: ranked opportunities that become structured, cite-ready pages so the URL is a real document the first time Google fetches it. The auto SEO tool workflow is the public description of that loop. If you want a first page on your own domain before you decide, send your site.

Paid plans start at $990/mo when you move from that first page into ongoing production. Cancel anytime if the pipeline does not fit. The soft-404 test for any new URL is the same: does it return an honest status and a document worth fetching, or another empty 200?

After you ship the template change, wait through a recrawl before you judge the Soft 404 chart. Compare the same host and the same URL prefixes. The win is fewer empty success responses, not a spike in "Request indexing" clicks.

FAQs

What is a soft 404 in Google Search Console?
A soft 404 is a URL Google treats as missing or empty even though the server did not return a real 404 or 410. The usual pattern is HTTP 200 with a not-found message, a blank template, or a generic homepage redirect. Google documents that a 2xx response with empty or error-like content can be labelled Soft 404 in the Page indexing report.
How is a soft 404 different from a hard 404?
A hard 404 (or 410) tells Google the resource is gone. Google ignores that body, drops the URL from the index over time, and slows recrawls. A soft 404 keeps the URL in inventory because the status looks successful. That wastes recrawls and confuses users who land on an empty or generic page.
Should I redirect soft 404 URLs to the homepage?
No. Google treats a missing URL that redirects to a generic page, especially the homepage, as a soft 404. Use a 301 only when a closely related replacement exists. If the resource is gone, return 404 or 410 and remove the URL from the sitemap and internal links.
Can a JavaScript app cause soft 404 errors?
Yes. A client-rendered route that ships an empty shell, then paints "not found" or nothing after JavaScript runs, often looks empty to Google. Server-render or prerender the main text, or return a real 404 from the origin when the route has no document. Confirm with URL Inspection and View tested page, not only your browser.
How long does a soft 404 take to leave Search Console?
After the HTTP response and body are honest, Google has to recrawl the URL. Use URL Inspection, test the live URL, then Validate fix on the Soft 404 row. Validation often takes up to about two weeks, sometimes longer. Do not request indexing in a loop while the template still returns 200 for empty pages.
Is a soft 404 the same as Crawled, currently not indexed?
No. Crawled, currently not indexed means Google fetched a real document and chose not to store it, usually for quality or duplication. Soft 404 means Google does not believe a real document is there. Fix the status and body first. A stronger page comes after the URL is an honest document.
Jozef Fekete
SEO writer at Orchory

Jozef writes and edits practical SEO guidance for Orchory, with a focus on helping small teams turn search research into pages they can actually ship. Every article is reviewed before it goes live.

← All articles

Stop reading about SEO. Ship it.

Give Orchory your business profile and it maps your keyword strategy, then hands your coding agent the prompts to build the pages, one pull request at a time.

See how the AI SEO agent turns an answer gap into a reviewed pull request

Your first page is free. We build it before the call and bring it with us.