Soft 404 Errors Explained: Causes, Fixes & Verification (2026)

A soft 404 is the single most misdiagnosed indexing signal in Google Search Console — and the one most likely to silently cap a growing site’s crawl budget and rankings.

This guide covers what a soft 404 actually is, how it differs from a real 404, whether zero 404s should even be your goal, why soft 404s appear on content-heavy sites versus Shopify stores, and exactly how to fix and verify them.

1. What Is a Soft 404 Error?

A soft 404 happens when a URL returns a normal, healthy HTTP status code but the actual content on the page tells a crawler (or a human) that there’s nothing there. The server says “everything’s fine,” while the page itself says “this doesn’t exist,” “product not found,” or shows an empty template with no real content.

Google doesn’t rely on the status code alone to decide whether a page is real. Its algorithms look at signals like:

  • Boilerplate “not found,” “no longer available,” or “0 results” phrasing in the visible text
  • Near-empty pages with a header, footer, and almost no unique body content
  • Pages that are near-duplicates of a generic template used across hundreds of other URLs
  • A redirect that lands on the homepage or a generic category page but still returns 200

Why this matters for AEO and GEO, not just classic SEO

Soft 404s don’t just cost you a listing in Google’s blue links. Answer engines (ChatGPT, Perplexity, Google AI Overviews) rely on the same crawlable, indexable content pool. A product or article that resolves as a soft 404 is functionally invisible to citation-based discovery too — it never entered the index it would need to be pulled from.

2. Soft 404 vs. Hard 404: What’s the Difference?

The difference isn’t about what the page shows. It’s about whether the HTTP status code and the page content agree with each other.

Hard 404 (or 410)Soft 404
Server returns an actual 404 (Not Found) or 410 (Gone) status codeServer returns 200 OK, or a redirect that resolves to 200
Crawler receives an explicit, unambiguous signal: this URL has nothing indexableCrawler has to infer “nothing here” from thin or boilerplate content
Google drops it from consideration quickly and predictablyGoogle keeps re-checking it, wasting crawl budget before excluding it
Shows in GSC as “Not found (404)” — expected, generally harmlessShows in GSC as “Soft 404” under Page Indexing — a health flag
Typically intentional: content was deliberately removedUsually unintentional: a template, redirect, or app misconfiguration

In short: a hard 404 is a clear, honest signal. A soft 404 is a mixed signal — and Google treats mixed signals as a quality problem worth flagging, not just a missing page.

3. Do You Need Zero 404s? It Depends.

No — and chasing zero hard 404s is often counterproductive. Zero soft 404s is a legitimate, achievable goal. These are different targets and conflating them is the most common mistake in 404 cleanup projects.

Hard 404s: some are healthy

Products get discontinued. Articles get retired. Seasonal pages expire. When content is genuinely, permanently gone and has no reasonable substitute, a real 404 (or 410) is the correct, honest response. Google explicitly recommends against redirecting everything to the homepage “just to avoid a 404” — that pattern creates soft-404-like confusion of its own and dilutes relevance signals on the page you redirect to.

Soft 404s: the target really is zero

A soft 404 has no upside. It’s never the “correct” outcome for a URL — it’s always a sign that either the status code, the content, or the redirect logic needs to be fixed. Realistic goal-setting looks like this:

SituationTarget
Hard 404s from genuinely removed, non-substitutable contentAcceptable — monitor volume, don’t chase zero
Hard 404s from broken internal links, typos in URLs, orphaned old linksFix the link or add a 301 — preventable, worth cleaning up
Soft 404s (any cause)Zero — always fixable, never a healthy end state

4. Why Soft 404s Happen — Content-Heavy Sites

Deleted or unpublished articles that redirect to the homepage

When a post is deleted, many CMS and caching setups fall back to a generic redirect rule that sends the old URL to the homepage — and the homepage returns 200. Google sees a URL that used to have unique content now resolving to a page it already has indexed under a different URL, and flags it as soft 404.

Thin or empty category, tag, and archive pages

Auto-generated taxonomy pages (a tag with one old post, a date archive with nothing published that month) often render a template with header, sidebar, and footer but effectively no unique body content. That’s a textbook soft 404 pattern even though no one “deleted” anything.

Expired listings: jobs, events, deals, and time-bound content

A job posting, event page, or limited-time offer that’s expired often keeps its URL live and returns 200, but the template swaps in a “this listing has expired” message with no other content. It looks and behaves exactly like a soft 404 to a crawler.

JavaScript-rendering mismatches

This is a growing cause and worth flagging given how much crawler-rendering behavior has shifted recently: the server returns a 200 shell, and the real “not found” or “content unavailable” message only appears after client-side JavaScript executes. If Google’s rendering pass reads that post-JS content, it can classify the URL as soft 404 even though the initial HTML response looked fine — and if a crawler doesn’t render JS at all, it may index a blank shell instead. Either failure mode traces back to the same root cause: server-rendered status and client-rendered content telling different stories.

Pagination and internal search result pages

Page 14 of a tag archive that has only 3 pages of content, or an internal site-search URL with zero results, frequently returns 200 with essentially nothing on it — both are common, overlooked soft 404 sources.

5. Why Soft 404s Happen — Shopify Stores

Out-of-stock or discontinued products left live with no content

A product page for a discontinued item can stay published, return 200, and show a stripped-down page with no price, no add-to-cart, and a bare “currently unavailable” notice. No unique content, no functional purpose — flagged as soft 404.

Unpublished products that still resolve

Shopify’s default behavior for an unpublished product isn’t always a clean 404 — depending on theme and app configuration, the URL can resolve to a thin “product not found” page that still returns 200.

Redirect apps that blanket-route everything to the homepage or a collection page

Many Shopify redirect/404 apps default to sending all broken product URLs to the homepage. Convenient to set up, but exactly the pattern Google warns against — it manufactures soft 404s at scale instead of solving the underlying gap.

Empty collection pages

A seasonal or legacy collection URL (last year’s “Summer Sale” collection, for example) that’s been emptied of products but not unpublished renders a collection template with a title, breadcrumb, and zero products — another common thin-content soft 404 source.

Variant and filtered-URL combinations with no matches

Faceted navigation (color/size/price filter combinations) can generate URLs for combinations that don’t exist in inventory, returning a 200 “no products found” page. These multiply fast and are a frequent, underestimated source of soft 404 volume on larger catalogs.

App/theme uninstalls leaving orphaned URL patterns

Removing a landing-page builder or bundling app can leave behind URL patterns that once worked and now render an empty theme section at 200 instead of a proper 404.

6. How to Fix Soft 404 Errors

Step 1: Classify intent before touching anything

Every soft 404 URL falls into one of three buckets. Fixing starts with sorting, not with a blanket rule:

  1. Permanently gone, no substitute — the correct fix is a real 404 or 410 status code.
  2. Moved or has a close relevant substitute — the correct fix is a 301 redirect to that specific page (never to the homepage by default).
  3. Temporarily unavailable but coming back — the correct fix is to keep the page at 200 and add real, useful content.

Content-heavy site fixes

  • Configure the CMS/server to return a genuine 404 or 410 status for deleted posts instead of falling back to a homepage redirect.
  • Noindex or prune thin taxonomy pages (tags/archives with minimal content); consolidate near-duplicate archives.
  • For expired listings, either 410 them if truly gone, or replace the “expired” message with related/current listings so the page still earns its 200.
  • Fix the client/server rendering mismatch: make sure the server-side (or pre-rendered) response reflects the same status and content Google will see after full JavaScript execution. Test both the raw HTML and the rendered DOM.
  • Block or noindex internal search and empty pagination endpoints via robots directives or canonical tags rather than letting them sit as soft 404s.

Shopify-specific fixes

  • For discontinued products: 301 redirect to the closest matching current product or the relevant collection page — not the homepage.
  • For out-of-stock-but-returning items: keep the page live at 200, keep it indexable, and add substitute content — related/similar products, a restock notice, and cross-sell links. This is Google’s own stated recommendation for e-commerce inventory pages.
  • Reconfigure redirect apps away from blanket homepage redirects; map deleted product URLs individually or by category pattern to the nearest relevant collection.
  • Unpublish or delete empty legacy collections rather than leaving them live with zero products; if kept for seasonal reuse, noindex until repopulated.
  • Restrict faceted/filtered URL generation for non-existent variant combinations, or canonicalize them back to the parent collection.
  • After removing an app or landing-page builder, audit and clean up the URL patterns it created — redirect or 404 them explicitly rather than leaving orphaned empty templates live.

7. How to Verify the Errors Are Gone

Primary source: Google Search Console

  • Open Search Console → Indexing → Pages (the Page Indexing report).
  • Look for the “Soft 404” row under “Why pages aren’t indexed.” Click it to see the full affected-URL list.
  • After deploying fixes, use URL Inspection → Test Live URL on a sample of the fixed URLs to confirm the live status code and rendered content now match your intent.
  • Request re-indexing for a representative sample — not the entire list, which can look like spam behavior at scale.
  • Re-check the Soft 404 count every few days over a 2–4 week window. Google needs to recrawl before the report updates; a same-day drop to zero is not realistic.

Supporting checks

  • Screaming Frog (or a similar crawler): re-crawl the site and check the Response Codes tab — confirm 200/301/404/410 codes now line up with actual page content, not just that a code was returned.
  • Manual spot checks: curl -I <url> to confirm the literal HTTP status code, then load the same URL in a browser to confirm the content matches that status.
  • Rendered vs. raw comparison: compare the raw server HTML against the fully rendered DOM (View Rendered Source, or Search Console’s rendered screenshot in URL Inspection) for any URL where JavaScript renders the final state — this is the check most teams skip.
  • Sitemap hygiene: confirm none of the previously-soft-404 URLs that are now genuinely gone are still listed in your XML sitemap — a sitemap entry for a 404’d URL sends Google a mixed signal of its own.

Full resolution timeline: expect the Soft 404 count in GSC to trend downward over 2–4 weeks after a fix ships, not overnight — recrawl frequency depends on the URL’s existing crawl priority. For a small batch of high-priority pages, manual URL Inspection re-checks are the fastest way to confirm a fix before the aggregate report catches up.

Quick FAQ

Do soft 404s hurt my rankings directly?

Not as a standalone ranking penalty — but the affected URLs are excluded from the index, so they can’t rank at all, and the wasted crawl attention can slow discovery of your genuinely new or updated pages.

Is a soft 404 the same as a “thin content” issue?

Related but not identical. Thin content can still be indexed if it’s judged genuine; a soft 404 specifically means Google concluded the page looks like an error/empty page, not just a low-depth one.

Should I ever intentionally leave a page as a soft 404?

No. There’s no scenario where a mismatched status code and content is the desired end state — the fix is always to either change the status code or change the content so they agree.

How long does GSC take to stop reporting a fixed soft 404?

Typically 2–4 weeks for the aggregate Page Indexing report; individual URLs can be confirmed faster using Test Live URL in URL Inspection.

Similar Posts

One Comment

Leave a Reply

Your email address will not be published. Required fields are marked *