Soft 404

A soft 404 is a page that answers with a success status, 200, while being an error or an empty page to a reader. Google reads the page, decides it is not really there, and drops the URL from the index. The status code lying is the whole problem.

By , founder of Porteur · Updated 15 September 2026 · Markdown

What makes a 404 soft

Google detects a soft 404 by reading the page, not by trusting the header. Four shapes trigger it.

  • A page that prints "not found" or "this product is no longer available" and returns 200.
  • A redirect to the home page in place of a missing page, which answers 200 on a page that has nothing to do with the URL requested.
  • An empty category, an empty search result, or a listing with no items.
  • A page whose content failed to load, leaving a shell that returns 200 with nothing in it.

Where you see them

The Page indexing report in Search Console lists them under Not indexed, with the reason Soft 404 and a sample of up to a thousand URLs. The URL Inspection tool says the same thing for one URL.

One soft 404 on a page you deleted is noise. The same reason across twenty URLs of one template is a decision to make about that template.

The fix, by cause

What you haveWhat to returnWhy
A page that no longer exists404, or 410 when you deleted it on purposeGoogle drops the URL cleanly instead of judging the page
A page with an equivalent elsewhere301 to that pageThe old URL hands its standing to the new one
An empty category or list200 with real content, or noindexA page with nothing on it earns nothing either way
A shell left by a failed fetchA real error status from the serverA 200 on a broken render pollutes the index
Anything redirected to the home pageOne of the four rows aboveA blanket redirect to the home page is itself a soft 404 pattern

How to avoid creating them

  1. Make the framework answer with the right status

    A missing record should render the not-found page and return 404, not a 200 with an apology on it.

  2. Never redirect missing pages to the home page

    Redirect to the closest equivalent, or let the URL 404. A visitor who wanted /pricing does not want the home page.

  3. Give empty states a reason to exist

    An empty category page can list the categories that do have items, or carry noindex until it does.

  4. Check after a deploy

    Request one deleted URL with curl and read the status line. A crawler over the whole site catches the rest.

Questions

Check my site, free

The free check reads your site the way a crawler does and names the pages that answer nothing, in about thirty seconds.

  • Free check, no card
  • Read-only, your own accounts
  • Readable by your agent

Read next