GSC status

How to fix a soft 404

Search Console is saying: this URL behaves like a not-found page. If your server already returns 404 or 410, this is the wrong status — that is a true missing page. Soft 404 is the dishonest 200.

What this status actually means

Google’s classifier, not your status code

You returned 200. Google looked at the body (or the canonical) and treated the URL as gone. Indexing is refused until the URL either becomes a real page or becomes an honest 404/410.

What our 404 watch does not catch

The verify worker’s HEAD probe only sees the status code. A 200 with an empty template looks healthy to that check and can still be a soft 404 in GSC.

HTTP 200 lookalikes vs a true 404

No recovery percentages. A URL that starts returning a real 200 is eligible again; eligibility is not indexing.

Cause Check Fix
True HTTP 404 or 410 url_http_status() (HEAD, follows redirects) returns 404 or 410. The verify worker logs http_404, alerts once, and will not treat the URL as indexable. Indexed URLs in this state are marked dropped. If the page should exist, restore a 200 with real content, then request indexing. If it should not, keep 404/410 and drop it from the sitemap. This is not a soft 404 — it is working.
HTTP 200 with empty or “not found” body GET the URL. Status 200, body is blank, a sitewide error template, or a handful of words. That is the classic soft 404. Either return 404/410 for gone URLs, or put unique content on the 200. Do not ship a deleted page as 200.
HTTP 200 plus noindex Diagnose flags meta robots noindex. Google may file the URL under soft 404 or under excluded by noindex tag depending on the body. Gone pages: prefer 404/410 over 200+noindex. Pages you want indexed: remove noindex and give them content.
HTTP 200 plus canonical to another URL Canonical href ≠ this URL. Google may call that a soft 404 or an alternate. Diagnose’s next action is still “fix or submit the canonical.” 301 to the canonical if this path should die. Self-canonical this path if it should live. See the two canonical statuses.
Catch-all 200: every missing path renders the homepage url_http_status follows redirects and still lands on 200. Many distinct paths, one homepage body. Google soft-404s the fakes. Stop the catch-all. Unknown paths should 404. Only real URLs should 200.

Pick one outcome and make the HTTP match it

1

Decide: keep the URL or retire it

Keep → unique 200 content and a self-canonical. Retire → 404 or 410, sitemap removal. Mixed signals (200 + empty + noindex) are how this status sticks.
2

Confirm with GET, not only HEAD

HEAD is what our 404 watch uses. Soft 404 is a body problem. View the rendered page.
3

Request indexing only after the 200 is a real page

Submission methods on an empty 200 waste the request.

Common questions

Related: All indexing issues · Duplicate without user-selected canonical · Alternate page with proper canonical tag · Crawled — currently not indexed · Discovered — currently not indexed · Excluded by noindex tag · Blocked by robots.txt

What is a soft 404?

Google fetched a URL that looks like a missing page but did not return HTTP 404 or 410. Typical tells: a 200 with almost no content, a “page not found” template, or a canonical pointing at another URL.

How is that different from a real 404?

A real 404/410 is honest. Our verify worker HEADs every due URL (url_http_status); 404 or 410 is logged, the owner is alerted once, and an already-indexed URL is marked dropped. A soft 404 stays a 200, so that watch does not fire.

I want the page gone. What should I return?

404 or 410, and remove it from the sitemap. Do not leave a deleted page as HTTP 200 with empty content — that is how this status lingers. Related: getting a deleted page out of the index.

If I fix the 200, is indexing guaranteed?

No. We submit and measure. Nobody can guarantee Google indexing. A real page that returns 200 with unique content is eligible; Google still decides.

We will tell you if it starts returning 404.

Every verification pass HEADs the URL. True 404s get logged; coverage is recorded separately. 25 free, no card.

Start free