---
title: "Soft 404: what it means and how to fix it"
description: "Your page returns 200, but Google thinks it looks like an error or empty page. Learn why Soft 404 happens and how to fix it with a real 404, a redirect, or content."
canonical: "https://indexmysite.app/soft-404"
language: "en"
---

# Soft 404: make the page real or let it return a 404

The page loads with a success code, but Google thinks it looks like an error or an empty page. Here is what the status means, what usually causes it, and how to decide between a 404, a redirect, and more content.

[Check a page](#check)[Resubmit fixed pages](https://app.indexmysite.app/signup)

## What the status means

In the Page indexing report, "Soft 404" means the URL returned a 200 status code, but the page Google rendered looked like a "not found" page, an error, or an empty page. Google leaves it out of the index.

The server said success

The URL returned a 200 status code, not a 404 or 410.

The page looked like an error

Google read the rendered page and saw a "not found" message, an error, or little or no main content.

Google left it out

The page is not indexed. It is fixed when the status code and the page agree.

Definition from Google's [Page indexing report help page](https://support.google.com/webmasters/answer/7440203).

## Why Google sees the page as a soft 404

Google decides based on the content it renders. These are the usual reasons a 200 page looks like an error to it.

-   A "not found" page that returns 200

    The page tells visitors it does not exist, but the server sends a 200 status code. Custom error pages and catch-all routes often do this by default.

-   Empty search, category, or tag pages

    An internal search with no results, or a category or tag page with no items, has nothing on it except the template.

-   Out of stock or expired with nothing else

    A product, listing, or job page that only says it is unavailable, with no details, alternatives, or other useful content.

-   Thin placeholder pages

    Pages published before they have content, such as "coming soon" pages, empty profiles, or templates with no fields filled in.

-   A JavaScript app renders an error or nothing

    Client-side routing serves 200 for every URL, then shows a "not found" view or a blank screen. Scripts or API calls that fail for Googlebot have the same effect.

-   Error text in a working response

    A broken database connection, a missing include file, or a missing JavaScript file leaves an error message or an empty page behind a 200 status code.

-   Redirects to an unrelated page

    Sending many old URLs to the home page, or another page that does not replace them, can be treated as a soft 404.

## Check the page for empty or thin content

Paste the URL from Search Console. The free checker shows whether Google can reach the page, whether it redirects, and reviews the content for thin or empty writing that could look like an error page.

Use the free indexability checker at /tools/indexability. Enter a public page address and it reports whether the site lets Google visit the page, whether the page carries a noindex setting or points to another page as the original, and whether the content is thin, repeated, or unclear. It does not tell you whether Google has indexed the page.

## Fix it in this order

First find out what Google saw. Then pick one fix per URL: a 404 for pages that are gone, a redirect for pages that moved, or real content for pages that should be indexed.

1.  1

    Look at what Google rendered

    Run a live test in URL Inspection and click View tested page. Check the HTTP response code and the screenshot. A blank page, a near blank page, or an error message explains the status.

2.  2

    If the page is gone, return a 404 or 410

    For pages you removed with no replacement, send a real 404 or 410 status code. You can keep a friendly error page with links to your site. Only the status code needs to change.

3.  3

    If it moved, redirect to the equivalent page

    Use a 301 redirect when there is a page that genuinely replaces this one. Do not send unrelated URLs to the home page.

4.  4

    If the page should exist, give it real content

    Fill in placeholder pages, add details and alternatives to out of stock pages, and stop publishing empty search, category, or tag pages. Pages you cannot fill yet can be left out with a noindex tag or a 404.

5.  5

    Fix rendering for JavaScript pages

    Make sure scripts, API calls, and other resources load for Googlebot and are not blocked by robots.txt. In a single-page app, redirect missing routes to a URL that returns 404, or add a noindex tag to the error view.

6.  6

    Then resubmit pages that should be indexed

    Once the page returns 200 with real content, run the live test again, then request indexing in URL Inspection or submit the URL with Index My Site.

## When resubmitting helps, and when it will not

Submitting asks Google to crawl the page again. It only helps if the page Google finds next time returns 200 and has real content.

It helps when

-   You added real content to a page that should be indexed
-   You fixed scripts or resources so the main content now renders for Googlebot
-   You removed error text from a page that works
-   A live test in URL Inspection now shows the full page

It will not help when

-   The page has not changed since Google flagged it
-   The page is gone and should return a 404 or 410 instead
-   It is an empty search, category, or tag page
-   The URL now redirects: submit the destination page instead

When you submit a URL, we check it first and skip redirects, noindex pages, robots.txt blocks, error pages, and pages that point to another page as the original, without charging. Then we help Googlebot discover and crawl it and search Google for the exact URL after 24 hours, again around days 3 and 7 if it is not found yet, with a full report around day 5and final checks around day 14. A URL confirmed as not indexed gets its standard credit back. Google still decides what it indexes. See [Submitting URLs](https://indexmysite.app/docs/submitting-urls) for the details.

## Soft 404 vs Not found (404)

Both mean the page is not indexed. A 404 is the server saying the page does not exist. A soft 404 is Google deciding the page looks missing even though the server said it was fine.

Soft 404 compared with Not found (404)
| Question | Soft 404 | Not found (404) |
| --- | --- | --- |
| What the server sent | A 200 success status code | A 404 status code |
| What Google saw | A page that looks like an error, a "not found" message, or an empty page | A page that says it does not exist, which is what the status code says too |
| Is it a problem? | Usually. The server and the page disagree, so either the code or the page is wrong | Not if the page was removed on purpose. Google says 404s are fine for pages with no replacement |
| What to do | Return a 404 or 410 if the page is gone, redirect if it moved, or add real content if it should exist | Nothing if the page is gone. Redirect it if it moved, or restore it if it was removed by mistake |
| Does submitting help? | Only after the page returns 200 with real content | No. Submit the page that replaced it, if there is one |

## Other Page indexing statuses

Each reason in the report needs a different fix. Find the one Search Console shows you.

[

### Discovered - currently not indexed

Google found the URL but has not crawled it yet.

](https://indexmysite.app/discovered-currently-not-indexed)[

### Crawled - currently not indexed

Google crawled the page and chose not to index it for now.

](https://indexmysite.app/crawled-currently-not-indexed)[

### Duplicate without user-selected canonical

The page does not name a main version, so Google picked another URL as the original.

](https://indexmysite.app/duplicate-without-user-selected-canonical)[

### Duplicate, Google chose different canonical than user

The page names itself as the main version, but Google picked another URL instead.

](https://indexmysite.app/duplicate-google-chose-different-canonical-than-user)[

### Alternate page with proper canonical tag

The page points to another page as the main version, and Google agreed.

](https://indexmysite.app/alternate-page-with-proper-canonical-tag)[

### Excluded by 'noindex' tag

The page tells Google not to index it.

](https://indexmysite.app/excluded-by-noindex-tag)[

### Blocked by robots.txt

Your robots.txt file stops Googlebot from crawling the page.

](https://indexmysite.app/blocked-by-robots-txt)[

### Page with redirect

The URL redirects to another page, so Google does not index this URL.

](https://indexmysite.app/page-with-redirect)

## Tools for getting pages indexed

[

### Every Page indexing status

What each reason in the report means, whether it needs fixing, and whether submitting helps.

](https://indexmysite.app/page-indexing-report)[

### Free indexability checker

The full checker page, with notes on what each result means and what to do next.

](https://indexmysite.app/tools/indexability)[

### Indexing API

Submit fixed pages from your own code with one API key and track each one until it is indexed.

](https://indexmysite.app/indexing-api)[

### Automatic indexing

Submit pages every time you publish or fix them, from your sitemap, your deploy, or your agent.

](https://indexmysite.app/automatic-indexing)

## Frequently asked questions

### What is a soft 404?

It is a URL that returns a 200 (success) status code but shows a page that looks like an error to Google: a "not found" message, an error message, or a page with no main content. Google excludes these pages from Search. Google recommends returning a 404 for pages that really do not exist, and adding more content to pages that do.

Source: [Google Search Console Help: Page indexing report](https://support.google.com/webmasters/answer/7440203)

### Why does Google call my page a soft 404 when it works for me?

Google judges the page it rendered, not the one you see in your browser. If scripts, images, or API calls failed to load, were blocked by robots.txt, or were too slow, Googlebot may have seen a blank or near blank page. Run a live test in URL Inspection and look at the screenshot and response code.

Source: [Google Search Central: Troubleshoot Google Search crawling errors](https://developers.google.com/search/docs/crawling-indexing/troubleshoot-crawling-errors#soft-404-errors)

### Should I fix a soft 404 with a 404 or a redirect?

It depends on what happened to the page. If it was removed with no replacement, return a 404 or 410. If it moved or has a clear replacement, use a 301 redirect to that page. Do not redirect many old URLs to the home page: Google says that can be treated as a soft 404 too.

Source: [Google Search Central: Site moves and migrations](https://developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes)

### How do I avoid soft 404s in a single-page app?

With client-side routing the server often returns 200 for every URL. Google suggests two options for routes that do not exist: redirect with JavaScript to a URL where the server returns a 404, such as example.com/not-found, or add a robots noindex meta tag to the error view.

Source: [Google Search Central: Understand the JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics#avoid-soft-404s)

### Do soft 404s hurt the rest of my site?

The flagged URLs are left out of Search. Google does not say they count against your other pages. They do waste crawls on pages that will not be indexed, and a soft 404 on a page that should rank is a lost page. Fix those first.

### What does Index My Site do with a submitted URL?

We check the page for redirects, noindex tags, robots.txt blocks, and error pages, then help Googlebot discover and crawl it. We check every URL once after 24 hours. Your full report follows around day 5, with final checks around day 14. If Google has not indexed the URL at the final check, the standard credit comes back. Submitting does not change how Google judges the page, so fix the content or the status code first.

### What does it cost?

Each sent URL costs 1 credit, which is $0.20, or $0.10 on purchases of $1,000 or more. URLs skipped before sending are not charged.

## Fixed the page? Ask Google to crawl it again

Resubmit fixed pages from the web app, the API, the CLI, or your AI agent. Credits start at $25.

[Resubmit fixed pages](https://app.indexmysite.app/signup)

[See pricing](https://indexmysite.app/pricing)
