You open the Page indexing report in Search Console and see a reason called Soft 404. The pages load fine in your browser. Your server says everything is OK. Google still refuses to index them.
A soft 404 means your server returned a success code (200) for a page that looks like an error or looks empty to Google. Think of a "Product not found" message served with a 200 status, an empty category page, or a search results page with zero results. Google decides the page isn't worth indexing and labels it a soft 404.
The fix depends on what the page should be. If the page is really gone, make the server say so with a real 404 or 410, or redirect it to a close replacement. If the page should exist, give it real content and make sure Google can render that content. This guide walks you through both paths. It also shows you how to triage the two reasons that usually sit next to it in the report: Not found (404) and Page with redirect.
Quick answer
- Open Indexing > Pages in Search Console and click the Soft 404 row to get the list of affected URLs.
- Inspect a few URLs with URL Inspection > Test live URL and look at the screenshot and HTML Google gets.
- If a page is gone for good, return a 404 or 410 status, or 301 redirect it to the closest equivalent page.
- If a page should be indexed, add real, unique content and make sure it doesn't depend on JavaScript that fails to load.
- Fix the template, not just single URLs, then click Validate fix on the Soft 404 issue.
- Treat Not found (404) and Page with redirect as normal unless the listed URLs are pages you want in Google.
Before you start
You need Owner or Full user access to the Search Console property. Restricted users can view reports but can't start validation.
You also need a way to change the site. That might be CMS admin access, a redirect plugin, server or CDN access, or a developer who can edit templates.
Have these tools ready:
- Search Console (the Page indexing report and URL Inspection).
- A way to check HTTP status codes. Chrome DevTools works: open the Network tab, reload the page and look at the Status column for the document.
- A spreadsheet for the exported URL list.
Before you add redirects in bulk, export your current redirect list or plugin settings. A wrong redirect rule can break many pages at once, so keep a copy you can restore.
Plan on about 45 minutes for diagnosis on a small site. Validation in Search Console then takes days to weeks.
Step 1: Find the soft 404 URLs
Go to Indexing > Pages. Scroll down to the table titled Why pages aren't indexed. Click the row that says Soft 404.
- The Soft 404 row. Click it to open the issue details and the list of example URLs.
- Export the URL list to Google Sheets, Excel or CSV so you can sort it.
The list is a sample, not always every URL. That's fine. You are looking for patterns, not individual pages.
In the spreadsheet, sort the URLs and group them by path. Soft 404s almost always come from a few templates. Typical groups look like this:
/product/...pages for discontinued items that now say "This product is no longer available"./category/...or/tag/...pages with no posts or products in them./search?q=...internal search pages with zero results.- Old pages that redirect to the homepage or to a loosely related page.
- Pages built with JavaScript where the main content never loads for Google.
Write the group name next to each URL. You'll fix each group once, at the template or rule level.
Step 2: Inspect a few URLs the way Google sees them
Pick two or three URLs from each group. Paste one into the search bar at the top of Search Console. This opens URL Inspection.
Click Test live URL. When the test finishes, click View tested page. You'll get three tabs: HTML, Screenshot and More info.
- The Screenshot shows what Google rendered. Here the main content is just an error message.
- Under More info, the HTTP response shows 200 OK. That mismatch is the soft 404.
Now decide what each group should be. Ask one question: "Do I want this URL in Google?"
| What you see | Should it be indexed? | Fix path |
|---|---|---|
| Removed product or post, no replacement | No | Return 404 or 410 (Step 3) |
| Removed page with a clear replacement | No, send people to the new one | 301 redirect to the replacement (Step 3) |
| Empty category, tag or filter page | Usually no | 404, noindex, or fill it with content (Step 3 or 4) |
| Internal search results page | No | noindex or block from crawling (Step 3) |
| Real page that looks thin or blank to Google | Yes | Add content and fix rendering (Step 4) |
| Old URL redirected to the homepage | No | Redirect to a relevant page or return 404 (Step 3) |
Step 3: Make "gone" pages return a real 404, 410 or a relevant redirect
Google's guidance is simple. If a page no longer exists, the server should return a 404 status. Google treats 404 and 410 the same way for Search: the URL drops out of the index and gets crawled less over time.
Return a 404 or 410
How you do this depends on the platform:
- WordPress: Deleting or trashing a post makes WordPress return 404 by default. If you see 200 instead, a plugin or theme is catching missing URLs. Check SEO and redirect plugins for "redirect all 404s to homepage" settings and turn them off.
- Shopify, Squarespace and other hosted builders: Deleted pages and products return 404 automatically. Soft 404s here usually come from products left live but marked "sold out" with no content, or from empty collections.
- Custom sites or frameworks: Make sure your "not found" template sets the status code, not just the message.
On an Apache server, one line in .htaccess tells crawlers that a whole old section is gone for good (it returns 410):
Redirect gone /old-catalog/
In application code, set the status in the same place you detect the missing item. Here is an Express (Node) example:
// Express example: product lookup
if (!product) {
return res.status(404).render('not-found');
}
Keep a friendly 404 page. Add a search box and links to your main sections. The status code tells Google the truth. The page itself helps the human who landed there.
Redirect only to a close replacement
If the product or article was replaced, use a 301 redirect to the new URL. Pick the closest match: the new model, the same category, or the updated article.
Avoid redirecting large batches of removed pages to the homepage. In practice Google often reports those old URLs as soft 404s, because the homepage doesn't answer what the old URL was about. A plain 404 is the honest answer when there's no real replacement.
Check that each redirect is a single hop. Google follows up to 10 hops, but long chains slow crawling and break more often.
Handle empty and search pages
For empty category or tag pages, choose one:
- Remove the archive and let it 404, if you don't need it.
- Add a
noindexrobots meta tag while it's empty, and remove the tag once it has items. - Fill it with real content: products, posts, a useful intro.
For internal search results, add noindex to the search template. If you need to keep crawlers out entirely, see the robots.txt cautions in our guide to robots.txt and noindex issues. Don't block a URL in robots.txt and expect Google to see a noindex on it. It can't read the tag on a page it isn't allowed to crawl.
<!-- On empty archive or internal search templates -->
<meta name="robots" content="noindex">
Step 4: Fix real pages that Google thinks are empty
Some soft 404s are pages you do want indexed. Google flags them because the content looks thin, generic or missing.
Check rendering first
Go back to the Screenshot tab in the live test. If the screenshot is blank or shows only a header and footer, Google isn't getting your main content.
Then open More info and look at Page resources and JavaScript console messages. Resources that "couldn't be loaded" are a clue. Common culprits:
- Scripts or API endpoints blocked by robots.txt.
- Content loaded only after a click, scroll or login.
- A JavaScript error that stops the page from rendering.
- A consent banner or interstitial that hides everything.
- The content API is blocked by robots.txt, so Google renders an empty shell.
- A JavaScript error can stop the page before the content appears.
Fix the cause, then run the live test again until the screenshot shows the real content.
Single-page apps
If your site routes pages in the browser (React, Vue and similar), the server may return 200 for every URL, even ones that don't exist. Google's JavaScript SEO docs suggest two ways out:
- Redirect with JavaScript to a URL where the server returns a real 404, such as
/not-found. - Add a
noindexrobots meta tag with JavaScript when the content doesn't exist.
// Option 2: inject noindex when the item doesn't exist
fetch('/api/products/' + id)
.then(r => r.json())
.then(product => {
if (!product.exists) {
const m = document.createElement('meta');
m.name = 'robots';
m.content = 'noindex';
document.head.appendChild(m);
}
});
Add real content
If the page renders fine but still gets flagged, the page probably looks like nothing to Google. Out-of-stock products with only a title, location or service pages built from the same three sentences, and "coming soon" pages are typical.
Give each page something specific: a real description, specs, photos with alt text, pricing or availability info, FAQs, and links to related items. For out-of-stock products you plan to restock, keep the full product content and show the stock status clearly. Don't replace the page with a "not available" message.
If many pages are thin for the same reason, the problem may also show up as Crawled – currently not indexed. The content fixes overlap.
Step 5: Triage "Not found (404)" and "Page with redirect"
These two reasons scare people, but they are usually normal.
Not found (404) means Google requested the URL and got a 404. That's correct for pages you removed on purpose. Google itself says a 404 isn't a problem when the page was removed with no replacement. Act only when:
- The URL is a page you want live. Then restore it or fix the link that breaks it.
- The URL had traffic or backlinks and there's a good replacement. Then add a 301 redirect.
- The URL is still in your sitemap or linked from your menu. Remove it from both.
Page with redirect means the URL redirects somewhere else, so Google indexes the target instead. That's expected after a migration, an HTTP to HTTPS move, or trailing-slash rules. Act only when:
- A page you want indexed is redirecting by mistake.
- Your sitemap lists redirecting URLs. Replace them with the final URLs.
- Internal links point to old URLs. Update them to the final destination.
- Pages you want indexed get content fixes. Everything else gets the correct status code.
If you see Redirect error instead of Page with redirect, that's a real problem. It means a loop, a chain that's too long, or a broken redirect target. Test the URL in a redirect checker or in DevTools and fix the rule.
Step 6: Clean up signals and request validation
Once the templates are fixed, tidy up the signals that keep sending Google to the bad URLs:
- Remove removed or redirecting URLs from your XML sitemap. Only list final, indexable 200 pages.
- Update internal links in menus, footers and body copy to point to final URLs.
- Resubmit the sitemap under Indexing > Sitemaps if you changed it a lot.
Then go back to Indexing > Pages, click Soft 404 and click Validate fix.
- Validate fix asks Google to recrawl the known affected URLs. Click it once and wait.
Don't click it again while validation is running. Google says it typically takes up to about two weeks, sometimes longer.
Still not working? Common causes
| Symptom | Likely cause | Fix |
|---|---|---|
| URL still shows 200 after you "deleted" the page | A plugin or theme redirects or catches all missing URLs | Turn off "redirect 404s to homepage" options and test the status in DevTools |
| Validation failed on redirected URLs | Redirect target is unrelated (often the homepage) | Redirect to a close match, or return 404/410 |
| Live test screenshot is blank | Content needs JavaScript that fails or is blocked | Unblock resources in robots.txt, fix console errors, or render on the server |
| Real product pages flagged as soft 404 | Page shows only "out of stock" or very little text | Keep full product content and show stock status as one element |
| Empty category pages keep coming back | New empty filters or tags are created automatically | Add noindex on empty archives in the template, or stop generating them |
| 404 count jumped after a redesign | URLs changed without redirects | Map old URLs to new ones with 301s, starting with pages that had traffic or links |
| "Redirect error" on many URLs | Loop or long chain (for example http > https > www > slash) | Collapse to one hop straight to the final URL |
| Soft 404 on a page that looks fine to you | Logged-in or geo content; Google sees a different version | Check the live test HTML; make sure Googlebot gets the full page without cookies |
| Search Console still shows old URLs weeks later | Report data lags and samples | Check individual URLs with URL Inspection; the report catches up |
When a soft 404 is the right result
Sometimes Google is right. A tag page with one post, a printer-friendly duplicate, or a placeholder page doesn't need to rank. If you don't want it in Google, return a 404 or add noindex and move on. Not every URL needs to be indexed. If you're sorting out duplicates as well, our guide on duplicate and canonical issues helps you pick which version stays.
How to confirm it's fixed
Check a sample of URLs from each group right away:
- Load the URL with DevTools open and confirm the Status column shows 404, 410 or 301 as planned.
- For pages you want indexed, run URL Inspection > Test live URL. The screenshot should show the real content and the verdict should say the URL is available to Google.
- For important pages, click Request indexing. There's a daily limit, so save it for pages that matter.
Then watch the report:
- Within a few days, the validation status changes from Not started to Started.
- Over about two weeks, URLs move out of Soft 404. Pages that now return 404 may appear under Not found (404) instead. That's expected.
- Validation ends as Passed or Failed. If it fails, open the examples, fix the remaining pattern and validate again.
If you're also working on getting new pages discovered, see how to get Google to index your site.
FAQ
Do soft 404 errors hurt my rankings?
They don't penalize the rest of the site. The affected URLs just won't be indexed. The real cost is wasted crawling and lost pages you might have wanted in search.
Should I use 404 or 410 for removed pages?
Either works. Google's documentation says it treats all 4xx errors, except 429, the same way. Use whichever your platform makes easier.
Is it OK to redirect all old pages to the homepage?
No. It confuses users and Google often reports those URLs as soft 404s anyway. Redirect to a close replacement, or let the URL return 404.
How many soft 404s are too many?
There's no magic number. Focus on whether the listed URLs are pages you want indexed. If they are, fix them. If they aren't, make sure they return the right status.
Why does Google flag an out-of-stock product as soft 404?
Usually the template removes most of the content when stock hits zero. Keep the description, images and details, and show availability clearly instead.
Stuck on this one? We fix these for clients every week. Book a free audit
Sources
- support.google.com: /webmasters/answer/7440203
- developers.google.com: /search/docs/crawling-indexing/http-network-errors
- developers.google.com: /search/docs/crawling-indexing/javascript/javascript-seo-basics
- developers.google.com: /search/docs/crawling-indexing/301-redirects
- support.google.com: /webmasters/answer/9012289