Baron Munchausen’s Crawl Test Lab

Soft 404 Example: A Page That Lies About Being Fine

Vulcan's doorkeeper assured me the way into Etna was not found, and then showed me in.

The short answer

What it is
A soft 404 is a page that returns a 200 status while telling the visitor that the content is missing. The status code and the page text disagree.
Why it matters
Search engines waste crawl time on these URLs and then leave them out of the index. Site owners also lose sight of real errors, because the logs show success.
How a crawler should report it
Flag the URL as a soft 404 when a 200 HTML page has a missing-page phrase in its title or H1, has under 50 words plus such a phrase, or matches the site's random-URL error page at 0.9 or more.
Live examples
A noble stag with a full-grown cherry tree between its antlers.
Fig. 57. Reports as healthy venison, despite the orchard.

Pages that say everything is fine while showing nothing

A soft 404 is a URL that returns a normal 200 status while the page says there is nothing here. It usually comes from a template. A store shows an empty product page. A search page shows zero results. A single-page app loads, fails to fetch its data, and prints an error message. In each case, the server reports success since the template ran without a problem.

A browser shows the page and sees nothing wrong. Search engines look closer. Google compares the page against patterns of error pages, and it can label the URL as a soft 404 in the indexing reports it gives site owners. Those URLs are left out of search results. Redirecting many removed pages to the home page can get the same label, because the target has nothing to do with the old page.

A good test is to request a random URL on the site, such as /qwxz-test-9281/, and check the status. If it returns 200, every bad URL on the site is a soft 404. A crawler can also compare page text with that random-URL response, and look for missing-page phrases in the title and H1. Do not flag a long article just for using such a phrase in its body. That is a normal page.

To fix it, make the server return the real status. If the content is gone, send a 404 or 410 and keep your friendly template. In a single-page app, have the server send the error status, or add a noindex tag when the data fails to load. If the page should exist, add real content. If the content moved, use a 301 to the closest match.