A page that returns 200 OK can still be treated as a 404.
That’s the core of how soft 404s work, and it’s where most SEO audits miss them entirely. You check your server logs, see a clean 200 status, and move on. But Googlebot has already classified that page as low-value or empty — and started deprioritizing it in crawl and indexing decisions.
This isn’t a fringe edge case. It comes up constantly on e-commerce sites with out-of-stock product pages, on media sites with filtered archive pages, and on SaaS sites where feature pages got quietly consolidated but the old URLs were never redirected. The page exists. The server says so. Google disagrees.
What Google Is Actually Detecting
Google’s soft 404 detection isn’t a simple content-length check. It’s a classifier that compares the page’s content signal against a threshold built from site-wide context — specifically from what’s already been indexed about your domain.
Google’s own documentation describes soft 404s as pages that “return a success code but the page content is essentially a 404 page.” The practical definition runs broader than that. A page doesn’t have to display a literal “not found” message. Soft 404 classification can fire if:
- The primary content block is thin relative to boilerplate (nav, footer, sidebar)
- The page is nearly identical to another URL already in the index
- The page looks like a container with no meaningful payload — content that doesn’t match query context
- A product or listing page has had all its dynamic content removed (empty category, zero results for a filter combination)
The classifier runs at index time, not crawl time. A page can be crawled successfully and still get flagged after the indexing pipeline scores its content signal against the rest of your site. That’s the gap that bites people.
Why This Hurts More Than a Real 404
An actual 404 is handled cleanly. Googlebot encounters it, logs the status, drops the URL from crawl priority, eventually removes it from the index.
A soft 404 is messier. The URL stays in limbo. Google may keep crawling it — consuming crawl budget — while simultaneously excluding it from meaningful indexing. You don’t get a clean removal signal. You get a page that looks indexed in Search Console (it might even sit in the Indexed, not submitted in sitemap bucket) but isn’t competing for rankings and is pulling crawl attention away from pages that should have it.
On a small site this is probably fine. On a site with tens of thousands of URLs — a mid-size e-commerce property is a good example — soft 404 accumulation becomes a crawl budget problem that compounds. Googlebot has a finite attention budget per domain. Pages it classifies as soft 404s don’t get skipped entirely; they keep getting visited at some frequency, just without indexing benefit. Wasted capacity, at scale.
Where They Actually Accumulate
Three patterns produce the overwhelming majority of soft 404s:
1. Faceted navigation with empty result sets
Filtered URLs like /shoes/color:purple/size:14 return valid 200 responses when inventory matches exist — and produce empty pages when it doesn’t. If your faceted nav generates these URLs freely, you have soft 404s accumulating on every filter combination with no current results. Most platforms don’t handle this automatically. The fix is a 404 response for empty result sets, a redirect to the parent category, or a noindex tag — each with different trade-offs depending on how frequently inventory changes.
2. Deleted or unpublished content without redirects
Obvious in theory, consistently neglected in practice. A blog post gets unpublished. The CMS keeps the URL returning 200 with a shell page — maybe a title, maybe a brief “this content is no longer available” message. From Googlebot’s perspective: thin content, no discernible value, soft 404 candidate.
3. User-generated or dynamic pages with incomplete data
Forum profiles with no posts. Marketplace listings where the seller removed all their items. Event pages where the content wasn’t archived, just emptied. These get crawled because they have inbound links or were previously indexed, but there’s nothing left for Google to work with.
How to Find Them Before Google Tells You
Search Console surfaces confirmed soft 404s under Pages > Why pages aren’t indexed > Soft 404. Useful starting point, but it’s a lagging indicator — Google has already made the classification by the time you see it there.
A faster diagnostic is log file analysis cross-referenced against your CMS export:
- Pull all URLs Googlebot crawled in the last 30 days with a 200 response
- Filter for URLs with low or zero organic impressions in Search Console over the same period
- Cross-check against page word count or content size from a crawl tool like Screaming Frog
High Googlebot crawl frequency plus 200 status plus near-zero impressions plus low content size: those are your soft 404 candidates before Google flags them explicitly. You can intercept the classification before it sticks.
One caveat: not every thin page with low impressions is a soft 404. Some pages are legitimately new, or deliberately minimal. Crawl frequency relative to page age is a useful tiebreaker — if Googlebot keeps revisiting a six-month-old page with 200 words and it has never ranked for anything, that’s worth acting on.
The Fix Is Not Always Deletion
The instinct is to delete or 404 everything Google has flagged. Sometimes that’s right. Often it isn’t.
A product page for a temporarily out-of-stock item has real future value. The better move is to make sure the page has enough content to survive classification: product description, specifications, reviews, related items. Remove the add-to-cart element, add a restock notification form, but keep the content payload high enough that the page doesn’t read as empty.
For filter pages with empty result sets, the decision depends on whether those filter combinations ever drive meaningful traffic. If a /color:purple/size:14 URL has never appeared in a Search Console impression, a 404 or redirect is cleanest. If it used to rank and inventory will return, a noindex with a 200 status buys time without burning the URL equity entirely.
For content you’ve genuinely retired, a 301 to the closest relevant page beats a blank 200 every time. This seems obvious — and yet the number of sites serving empty shell pages with 200 status codes because “the redirect was too complicated to set up” is genuinely large.
One Thing Most Audits Get Wrong
Soft 404 audits tend to focus on pages that look thin in a crawler. They miss the pages that look substantial in a crawler but are semantically thin to Google’s classifier — pages where word count is adequate but the content is templated boilerplate repeated across dozens of near-identical URLs.
Google doesn’t just measure volume. It measures distinctiveness relative to your site’s other pages. A 600-word category description that’s 80% identical across 40 category pages is a soft 404 risk even if none of those pages is individually short. The classifier compares against site context, not an absolute threshold.
So if you’re auditing for soft 404s, don’t stop at content length. Pull a similarity analysis across your templated page types and check how much unique content actually exists per URL versus what’s shared infrastructure.
The pages Google is quietly ignoring right now probably aren’t the ones a standard crawl report would surface first.

