A soft 404 is a URL that returns a 200 (success) status code while its content looks like an error: empty, near-empty or showing a “not found” message. Google spots the mismatch, labels the URL in Search Console and leaves it out of the index. Most guides say “return a real 404” and stop. That is the right fix for only some cases. The rest are pages that should exist but look broken to Google, and turning those into 404s throws away URLs you wanted ranked. The real job is deciding, URL by URL, whether the page should exist at all. This guide gives you a four-question triage for that.
What a Soft 404 Actually Is
It is not a status code. No server sends it as a response. It is a label Google applies after crawling. Google’s documentation on HTTP status codes says that when a page returns a 2xx code but “the content suggests an error,” such as “an empty page or an error message,” Search Console flags the URL.
The Search Console Help entry for the Page Indexing report puts it more plainly. The page “returns a user-friendly ‘not found’ message but not a 404 HTTP response code.” The status code says the page is fine and the content says it isn’t, so Google goes with the content. Your job is to make the two agree.
Soft 404 vs 404 vs 410: Quick Reference
The 404 and 410 rows come from Google’s HTTP status code documentation, which says all 4xx errors except 429 are treated the same.
| Signal | What the server sends | What Google does | Problem? |
|---|---|---|---|
| 404 Not Found | 404 status | Drops the URL from the index; crawl frequency gradually decreases | No, if the page is gone |
| 410 Gone | 410 status | Same as a 404 for Google Search | No, if the page is gone |
| Soft 404 | 200 plus error-like or empty content | Labels it, doesn’t index it, keeps crawling it | Yes: conflicting signals, wasted crawling |
| 301 to a relevant page | 301 to an equivalent URL | Follows it to the new URL | No, the correct move |
| 301 to the homepage | 301 to an unrelated destination | Google says it “might be treated as a soft 404 error” | Often, yes |
For when ordinary 404s are perfectly fine, see our guide to 404 errors and SEO, and for the wider family, HTTP status codes every SEO should know.
What Triggers the Label
Google judges what the rendered page shows, not what you meant it to show. The usual causes in audits:
- A custom 404 template that returns 200. The CMS shows a friendly “page not found” design but never sets the status code, so every mistyped or deleted URL is flagged.
- Empty category pages. A category with zero products, a tag with no posts, a location page with no listings. The template loads; the main content is blank.
- Zero-result search and filter pages. “0 results found” is an error message on a 200 response.
- Thin pages. Placeholders and auto-generated stubs with a heading and little else.
- Unavailable products. When “this item is no longer available” is the dominant content, the page can read as an error message.
- Rendering failures. If the main content loads with JavaScript and that fails for Googlebot, Google sees an empty shell.
- Bulk redirects to the homepage. Google’s site move documentation warns against redirecting many old URLs to one irrelevant destination such as the home page.
Only the first cause is a true “this page is missing” case. The others are live pages that don’t show enough to justify their URL. That difference decides the fix.
Does It Hurt SEO?
Many articles overstate this. It is not a penalty or a manual action. It is an indexing outcome: the flagged URL isn’t indexed, and nothing in Google’s documentation says it drags down the rest of the site. The costs are still real:
- Pages you wanted indexed aren’t. A live product or category page that gets flagged can’t rank. This is the expensive case, and it hides in a report most people skim.
- Crawling is wasted. Google’s crawl budget guide says these pages “will continue to be crawled, and waste your budget.” A real 404, by contrast, is “a strong signal not to crawl that URL again.”
- It points to a template problem. They rarely come alone. A few in the report usually means a routing rule or template that will keep producing more.
On a small brochure site, a few flagged old URLs barely matter. On a store with thousands of categories and filters, they can quietly cost crawl activity and indexable pages. Our guide to crawl budget optimization helps you judge whether that applies to you.
How to Find Them in Search Console
In Search Console, open Indexing → Pages, go to “Why pages aren’t indexed” and click the reason Soft 404. Treat the example URLs as a sample of each pattern, not a complete inventory. Our walkthrough of the Page Indexing report explains every other reason it lists. Then, for each pattern:
- Run a live URL Inspection test. Google’s help page suggests clicking “View tested page” to see a screenshot of how Google renders it. A blank screenshot means a rendering problem, not a content problem.
- Check the real status code. Open your browser’s developer tools, go to the Network tab and read the status of the document request. Do the same for an invented URL like
/this-page-does-not-exist-123. If that returns 200, your 404 template is broken and every dead link on the site is flagged. - Group by template. Sort examples by pattern (
/tag/,/search,/category/). You fix these per template, not per URL.
Search Console only shows URLs Google has already crawled and judged. The SEO Rocket site audit runs a real crawler (Screaming Frog-backed, with JavaScript rendering) that flags soft-404 candidates alongside true 404s, redirect chains and broken links, so an empty-category template gets caught the week it ships, not months later in the report.
The Four-Question Triage
This is the step most guides skip. Before you touch a flagged URL, answer these in order. The first “yes” gives you the fix.
| Question | Fix if yes |
|---|---|
| 1. Is the page gone for good, with no close replacement? | Return 404 or 410 |
| 2. Does an equivalent page exist elsewhere? | 301 to that specific page, not the homepage |
| 3. Should this page rank, and could it with real content? | Fix the content or rendering so the page is substantial |
| 4. Is it useful to visitors but not to searchers? | Keep it live and add noindex |
Question 3 comes before question 4 on purpose. noindex is the easy way out, and it is easy to hide pages that could have ranked. An empty category for a line you are restocking next month is a question-3 page. An internal search results page is a question-4 page.
How to Fix Each Type
Genuinely missing pages
Make missing URLs return a 404 status while still showing a helpful page with search and links to key sections. A friendly 404 page is fine; it just needs the right status underneath.
Moved or merged content
Redirect each old URL to its closest equivalent. Google’s site move guidance says redirecting several consolidated pages to one new page is fine; the trouble is many unrelated URLs pointing to one generic destination. The free 301 Redirect Generator writes the rules once you have mapped old to new.
Thin pages and empty category pages you want ranked
Add what a searcher on that page needs: products (even a curated set from related categories), a short buying intro and links to subcategories. Our guide to fixing thin content covers when to expand a page and when to merge it.
Pages for visitors, not for search
Zero-result searches and empty filter combinations can stay live with a noindex robots meta tag (the free Meta Robots Tag Generator writes it). Keep these URLs out of your XML sitemap.
Worked Example: A Store With Empty Category Pages
A mid-sized shop removes its seasonal products in the off-season. The category URLs stay live, now showing a header, filters and “No products found.” Search Console starts flagging them. The triage gives three different answers:
- A seasonal category returning next year isn’t gone and has no replacement, but passes question 3. Keep the URL. Replace “No products found” with a short guide to the range, a return note, an email signup and related in-stock products. The page has real content again and keeps its history and links.
- A brand category for a dropped supplier passes question 1 if nothing similar exists: return 404 or 410. If a comparable brand now lives in a broader category, question 2 applies, so redirect there.
- Zero-result filter combinations such as “red, size XS, under $20” are question-4 pages. Add
noindexand limit which combinations get crawlable links.
One symptom, three fixes. A blanket “404 them all” would have deleted a seasonal page with years of links behind it. For product-level cases, see how to handle out-of-stock and discontinued products.
JavaScript Sites and Single-Page Apps
Client-side routing often can’t send a meaningful status code: the server returns 200 for every route and the app decides later what to show. Google’s JavaScript SEO basics documentation names two fixes: use a JavaScript redirect to a URL where the server responds with a 404 (its example is /not-found), or add a noindex robots meta tag to error views with JavaScript.
If the page exists but its content never renders for Googlebot, the URL Inspection screenshot is your evidence. Fix rendering first (server-side rendering, or making sure the data request succeeds for crawlers), then judge the content.
Mistakes That Create More of Them
- Redirecting every 404 to the homepage. Some plugins sell this as a broken-link fix. It swaps a clear signal for a vague one.
- Using noindex on pages that deserve to rank. The flag disappears, and so does the page’s chance. Ask question 3 first.
- Leaving removed or noindexed URLs in the sitemap. A sitemap says “index these,” which contradicts the fix.
- Validating too early. Google’s help page says to fix all instances before clicking Validate Fix, and that validation typically takes up to about two weeks. Fix the template, then validate.
- Padding empty pages with filler. Generic copy may clear the flag and leave you with a thin page instead.
Frequently Asked Questions
Will the flag clear on its own?
Only if the cause goes away, such as a category being restocked. Otherwise Google keeps recrawling and keeps labelling the URL. Fix the cause, then use Validate Fix.
Do I need to clear every flagged URL?
No. The goal is that every flagged URL ends in the right state. A genuinely gone URL that now returns 404 moves to “Not found (404),” which Google says is not necessarily a problem.
Can a page with real content be flagged?
Yes, usually when the main content is small compared with the template, uses error-like wording or fails to render. Check the live inspection screenshot before assuming Google got it wrong.
Make It Part of Your Audit Routine
Each flagged URL is usually a template bug showing up as a report line. Check the reason in Search Console monthly, confirm your 404 template returns a real 404, and triage each pattern before changing anything. In SEO Rocket, the crawl-based audit and the Search Console integration work together: the crawler surfaces candidates early and GSC confirms what Google actually flagged, so you fix the template once instead of chasing URLs. It is part of a playbook proven across 1,000,000+ ranking pages: make every URL’s status code match what the page actually delivers.