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 Théophile Louvart, 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.
Open Page indexing
In Search Console, pick your property. Open Indexing, then Page indexing.
Filter to Soft 404
Scroll to Not indexed. Click Soft 404. You will see example URLs, up to 1,000.
Export for audit
Export the list. Group by template: product, collection, blog, tag, parameter, locale.
Inspect a sample
Use URL Inspection on a few. Check last crawl date, discovery path, Google-selected canonical and any enhancements.
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.
| Case | Keep 200 with content | Return 404 or 410 | Redirect 301 or 302 |
|---|---|---|---|
| A mistyped or junk URL, never existed | No | Yes | No |
| Deleted page with no close replacement | No | Yes, 410 if permanently gone | Maybe 410 after a grace period if links are low |
| Deleted page with a clear successor | No | No | Yes, to the nearest equivalent |
| Out of stock product, returns soon | Yes, with status, alternatives and links | No | No |
| Empty category, no items yet | Prefer to hide or noindex until ready | If removed | If merged into a parent |
| Tag or filter URL that mirrors a canonical page | No | Prefer noindex or block crawling of parameters | No |
| Catch-all redirect to home for many dead URLs | No | Prefer page-level decision | If 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
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.
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.
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.
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.
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
A hard 404 returns HTTP 404 or 410. It tells both users and crawlers the page is missing. A soft 404 returns 200 but looks like an error or empty. Google treats it as not found.
No, not by default. Redirect to the nearest equivalent page. If there is no close match, return 404 or 410. A blanket home redirect keeps the problem and wastes signals.
Open the Page indexing report, filter to Soft 404 and export samples. Inspect and test live. Then, per case, return 404 or 410, add content, or 301 to a specific replacement. Validate fix. Re-checks can take about two weeks.
If the page is thin, near-duplicate or reads like an error, Google can still treat it as not found. Add specific content that answers. Strengthen internal links. Ensure the template does not show error language.
No. Request indexing only queues a crawl and has a small daily quota. It does not guarantee indexing. Fix the page or status code first, then request.
Use either. 410 says gone for good. 404 says not found. If a page will never return and has no close replacement, 410 is fine. If it had links, consider a 301 to the nearest equivalent instead.
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
- GuideHow to use Google Search Console in ten minutes a week
- GuideHow to use the URL Inspection tool in Search Console
- GuideHow to fix 404 errors reported in Search Console
- GuidePage with redirect in Search Console: normal, until it is not
- GuideCrawled, currently not indexed: what it means and what to do
- GuideAlternate page with proper canonical tag: what Search Console means
- GuideGoogle is not indexing your site: find the reason in Search Console
- GuideThe Sitemaps report: what Success, Has errors and Couldn’t fetch mean