Soft 404: when a page says 200 and Google reads not found

A soft 404 wastes crawl and trust. Your server says 200, Google reads not found. You will find them in the Page indexing report and fix them per case: real 404 or 410, content, or a redirect to the page that answers.

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

What a soft 404 is, in plain terms

Your server returns 200 OK. The page looks to Google like an error or an empty page. Google treats it as not found. That is a soft 404.

It often happens on thin category pages with no items. Also on templates that show error text but still answer 200. Or when you redirect many dead URLs to the home page and keep 200 there.

A correct error returns 404 or 410. A correct redirect goes to a specific replacement and returns 301 or 302. A useful page returns 200 and has content that answers.

How Google detects a soft 404

  • Empty or near-empty HTML after render. A category at /videos/editing with zero products, one sentence and a header.
  • Error-like language on a 200 page. Text like “Page not found”, “No results”, “We could not find that”, or an error template.
  • Aggressive redirects to the home page or a hub. Old deep URLs 200 at / and carry no match to the original intent.
  • Thin boilerplate pages and tag pages with little unique text or only pagination.
  • Parameter or filter URLs that collapse to the same content as a canonical page and still return 200 each.
  • Out of stock or deleted items kept live with a “not available” message and no alternatives.

Detection happens after fetch and render. Google reads the rendered HTML and the pattern of redirects. It judges if the page earns a place.

Why soft 404s hurt a small site

  • Crawl wasted. Googlebot spends fetches on pages it will not index. Real pages wait longer.
  • Signals diluted. A 200 on a dead page sends mixed signals. Internal links and sitemaps point to fluff.
  • Quality judgement. As of 2026, Google’s indexing reasons point at overall site quality. Too many thin 200s lower trust. Real pages are judged by the company they keep.
  • Lost recovery. Old URLs with links that 200 at the home page throw equity away. A targeted 301 keeps more value than a catch-all.

Find soft 404s in Search Console

Use the Page indexing report. It lists every URL Google knows for your property as Indexed or Not indexed, with a reason for each.

  1. Open Page indexing

    In Search Console, pick your property. Open Indexing, then Page indexing.

  2. Filter to Soft 404

    Scroll to Not indexed. Click Soft 404. You will see example URLs, up to 1,000.

  3. Export for audit

    Export the list. Group by template: product, collection, blog, tag, parameter, locale.

  4. Inspect a sample

    Use URL Inspection on a few. Check last crawl date, discovery path, Google-selected canonical and any enhancements.

  5. Test live

    Click Test live URL. Review the rendered HTML, screenshot, HTTP response, blocked resources and console messages in View tested page.

Request indexing if you ship a fix on one URL. There is a small daily quota per property. It does not guarantee indexing.

Decide the right fix per case

Pick one of three outcomes: return a real 404 or 410, add content and keep 200, or redirect to a page that answers. Do not keep a 200 that says nothing.

CaseKeep 200 with contentReturn 404 or 410Redirect 301 or 302
A mistyped or junk URL, never existedNoYesNo
Deleted page with no close replacementNoYes, 410 if permanently goneMaybe 410 after a grace period if links are low
Deleted page with a clear successorNoNoYes, to the nearest equivalent
Out of stock product, returns soonYes, with status, alternatives and linksNoNo
Empty category, no items yetPrefer to hide or noindex until readyIf removedIf merged into a parent
Tag or filter URL that mirrors a canonical pageNoPrefer noindex or block crawling of parametersNo
Catch-all redirect to home for many dead URLsNoPrefer page-level decisionIf a real hub replaces the topic

A fixed page looks specific. Example: /guides/getting-started shows a title, an intro, steps, internal links and a last updated date. No error text. No empty grid.

Fix patterns and exact steps

  • Error templates that still 200: change the controller to return 404 or 410. Keep the same look and feel so users are not jarred.
  • Home-page redirects for dead URLs: replace the catch-all with page-level 301s to the closest match. Update internal links and the XML sitemap.
  • Empty categories: hide navigation and indexation until stocked. Option A, noindex and remove from sitemap. Option B, merge into parent and 301.
  • Out of stock products: keep 200 if it will return soon. Add availability, a date if known, strong alternatives, and links to a parent category.
  • Parameter and filter URLs: add rel=canonical to the base page. Consider noindex on crawlable facets. Remove unneeded parameters from the sitemap.
  • Near-duplicate templates: consolidate to one URL pattern. Use rel=canonical on variants. Avoid printing zero-content pages by default.
  • Paginated or “no results” search pages: return 404 for site search queries with no results, or keep 200 with helpful next steps and internal links.

For a SaaS docs site: do not publish stub pages. If you scaffold /docs/api-v2 with only headers and “coming soon”, either add real content or keep it out of the sitemap and noindex until ready.

For a store: remove empty size or colour pages that 200 but show no stock. Either redirect to the parent product or render only stocked variants as separate URLs.

Audit example: from soft 404 to a clean 404 or a useful 200

  1. Find the cluster

    In Page indexing, Soft 404 shows a cluster of URLs. The examples are /blog/tag/announcements and empty /category/ai-tools variants.

  2. Triage the types

    Tag pages have one or zero posts. Category pages have no items. A few old posts were deleted and now redirect to / with 200.

  3. Set the rules

    Tag pages with zero posts return 404. Tag pages with one post keep 200 but show the post and add links. Old posts 301 to the most related live post.

  4. Ship the changes

    Update router rules. Adjust the tag template to hide the “no results” state. Replace the catch-all redirect with a map file.

  5. Re-test and validate

    Use Test live URL on a sample of each case. Request indexing on five representative URLs. Click Validate fix on the soft 404 reason.

After the fix, /blog/tag/announcements shows three posts and a short intro. /blog/tag/dead-tag returns a clean 404 with navigation and a link to /blog/.

How to prevent soft 404s

  • Do not publish empty templates. Hide drafts and stubs from crawl and sitemaps until they answer a query.
  • Return the right status code. Wire 404 or 410 for missing pages. Use 301s to specific replacements, not the home page.
  • Keep the XML sitemap clean. Only list canonical, indexable, 200 URLs that you want indexed.
  • Guard parameters. Decide which filters create pages worth indexing. Noindex or block the rest and avoid linking to them.
  • Design empty states with substance. If you keep 200, add alternatives, popular items, internal links, and copy that answers.
  • Review redirects quarterly. Replace broad rules with specific targets. Remove long chains and loops.
  • Monitor new content types. When you add a feature like user profiles, test empty, deleted and private states in Search Console.

Work with the URL Inspection tool when a fix resists

  • Compare user-declared canonical and Google-selected canonical. If Google picked another URL, your page may be thin or duplicative.
  • Check discovery. If the referring page or sitemap is wrong, fix the link path and the sitemap entry.
  • Read the rendered HTML. If the main content is hidden by JS or blocked resources, Google may see an empty page.
  • Look for console errors. JS errors can stop render. Fix them and re-test.
  • Check HTTP response. Proxies or CDNs sometimes map a custom 404 to 200. Correct the origin rule.

If a fix is correct and still shows as soft 404, wait. Validate fix runs can take about two weeks for re-checks to settle. Keep shipping the same rule across the whole type, not just one URL.

What success looks like in Search Console

  • Soft 404 count drops after Validate fix completes. Some URLs move to Not found (404). Others index, or show Page with redirect.
  • Crawled, currently not indexed may rise for a week. That is normal as Google re-evaluates thin templates. Keep improving content and links.
  • Page with redirect becomes the home for deleted posts that now 301 to a nearest equivalent. Update internal links so users do not see the hop.
  • Sitemaps show only stable 200 URLs. Discovered, currently not indexed shrinks as crawl is spent on real pages.

Questions

Sources

Check my site, free

Want to see if your site returns soft 404s or empty templates, and which rivals win those searches, from one URL in about thirty seconds, free?

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

Read next