Skip to main content

Fix Guides

How to Fix Soft 404 Errors

Stop "not found" pages returning a 200 OK status.

Quick fix

To fix soft 404s, ensure pages that do not exist return a real 404 Not Found HTTP status (not 200 OK). For removed content with value, use a 301 redirect to a relevant page instead. Never mass-redirect all 404s to the homepage. Re-scan and check Search Console.

A soft 404 is a page that says "not found" or is effectively empty but returns HTTP 200. Google may index these as thin, useless pages, bloating your index and wasting crawl budget. The fix is correct status codes.

Check your website

See how your site handles how to fix soft 404 errors — free, no account needed.

Business impact

Soft 404s pollute your search presence with junk URLs and can make a site look low-quality to Google. Fixing them cleans the index and ensures only real, valuable pages compete for rankings.

Why this happens

Soft 404s happen when: custom 404 templates return 200; ecommerce "product unavailable" pages return 200; SPAs return 200 for all routes including garbage paths; sites redirect all unknown URLs to the homepage with 200; or empty search result pages return 200. Google Search Console flags these under Indexing → Pages.

How to confirm the issue

Manually: visit a nonsense URL like /this-page-does-not-exist-xyz and check DevTools → Network for the status code — should be 404, not 200.

With Plexa Trust: review error and link findings; use Search Console soft 404 reports; re-scan after fixes.

Step-by-step fix

  1. Configure your server or app to return HTTP 404 for genuinely missing pages.

  2. Ensure your custom 404 page still sends a 404 status header.

  3. Redirect removed valuable pages with 301 to the closest relevant live page.

  4. Do not redirect all unknown URLs to the homepage (that creates soft 404s).

  5. Fix SPA routing to return 404 for unknown routes server-side where possible.

  6. Request re-crawl in Search Console for cleaned-up URLs.

Platform-specific fixes

WordPress

  1. WordPress normally returns proper 404s — if not, check theme or plugins overriding status.

  2. Use 301 redirects (Redirection plugin) for removed posts with inbound links.

  3. Avoid plugins that send all 404s to the homepage.

Apache / Nginx

  1. Apache: ErrorDocument 404 /404.php — ensure 404.php does not emit 200.

  2. Nginx: error_page 404 /404.html; — verify the error page returns 404 status.

Next.js / SPAs

  1. Use notFound() in App Router or return 404 status from getServerSideProps for missing slugs.

  2. Configure hosting (Vercel/Netlify) fallback rules so unknown paths return 404, not 200 shell.

Shopify

  1. Shopify handles 404s correctly by default for missing products/pages.

  2. Create URL redirects in admin for removed products that had traffic.

How to verify the fix

  • A helpful 404 page is good — but the HTTP status must still be 404.

  • Redirect only to relevant pages, never blanket homepage redirects.

  • Monitor Search Console for soft 404 reports monthly.

Common mistakes

  • Returning 200 on "Page not found" templates.

  • Redirecting every 404 to the homepage.

  • Leaving thousands of thin empty pages indexed.

Frequently asked questions

What is a soft 404?

A page that effectively does not exist but returns HTTP 200 OK instead of 404, confusing search engines into indexing it.

How does Google detect soft 404s?

It analyses page content, status codes, and patterns like empty or "not found" text with 200 responses.

Should I redirect 404s to the homepage?

No. That creates a soft 404. Redirect only to a relevant replacement page, or return a real 404.

What about 410 Gone?

Use 410 when content is permanently removed and should drop from the index faster than 404.

Can a custom 404 page rank?

It should not — it must return 404 status so Google does not index it as content.

Do soft 404s hurt rankings?

They waste crawl budget and can bloat the index with low-quality URLs, indirectly hurting overall site quality signals.

How do SPAs cause soft 404s?

The server returns 200 with the app shell for every path; configure SSR or hosting to return 404 for unknown routes.

How do I confirm it worked?

Nonsense URLs return 404 in DevTools; Search Console soft 404 count drops; re-scan with Plexa Trust.

Think you've fixed it?

Run a free scan to verify the issue is resolved. Upgrade to Pro on Plexa Trust for the full audit, monitoring alerts, and score history.

Verify with a free scan

Upgrade to Pro for monitoring