# Real 404 status codes and soft 404s

> A real 404 for a missing page: A URL that does not exist answers 404 or 410 (RFC 9110). A 200 there makes every mistyped link look like a page.

- Source: /checks/not-found-status
- Site: AgenticWebScore
- Language: English

---
A URL that does not exist answers 404 or 410 (RFC 9110). A 200 there makes every mistyped link look like a page.

Standard status: Adopted. A ratified standard with real deployment. Standard: [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html).

- Kind: Scored check
- Part of the score: Web standards: 70% of the score. A check in it can hold a level.
- Module: Every site
- Who reads it today: Google reports a missing page that answers 200 as a soft 404. Every HTTP client reads the status first.
- Effect on Google Search: Direct. A documented Google Search feature reads it. This is not a ranking factor.

| Property | Value |
| --- | --- |
| Check id | `not-found-status` |
| Dimension | Discoverability |
| Part | Web standards |
| Tier | Recommended. Counts its weight once. |
| Weight | 1 |
| Maturity | Adopted. A ratified standard with real deployment. |
| Publishing skill | `not-found-status` |
| Standards | RFC 9110 |

## Sources

- [RFC 9110, 15.5.5: 404 Not Found](https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found), IETF
- [Google: HTTP status codes and soft 404s](https://developers.google.com/search/docs/crawling-indexing/http-network-errors), Google Search Central
- [Bing Webmaster Guidelines, §9: 404 for missing pages](https://www.bing.com/webmasters/help/webmaster-guidelines-30fba23a), Microsoft Bing

## What is measured

The scanner requests one path that does not exist on the measured origin: /aws-probe- followed by 12 random hexadecimal characters, new for every scan, with the Accept header of a page. It follows redirects on the same site only, and the request is kept out of the paths found, so a soft 404 never counts as a page the site serves. Pass = 404 or 410, after any redirect. Partial = a redirect to the homepage that answers 2xx, which Google reads as a soft 404; a redirect to another site, which is not followed; or another 4xx status. Fail = a 2xx answer at the path, or after a redirect to a page other than the homepage: a soft 404. Not measured = 401, 403, 407, 429 or a 5xx status, 406, which refuses the scan's Accept header, or no answer.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
ORIGIN=https://example.com
MISSING="/aws-probe-$(head -c 6 /dev/urandom | od -An -tx1 | tr -d ' \n')"
curl -sS -o /dev/null -w 'status=%{http_code} location=%{redirect_url}\n' -A 'AgenticWebScore/0.3 (+https://agenticwebscore.com/bot)' -H 'Accept-Language: en' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7' "$ORIGIN$MISSING"
```

## The fix

This page shows no artifact for this check, because the change depends on something only the site owner can supply. The note below says what to do.

> Answer a URL that matches no page with HTTP 404, or 410 for a page removed on purpose. A single-page app that serves its shell for every path can still send 404 for a route it does not know.

## Standards referenced

- `RFC 9110`

## Related checks

| Check | Kind | Maturity | Same skill |
| --- | --- | --- | --- |
| `reachable` — Readable homepage | Scored check | Adopted | — |
| `sitemap-xml` — XML sitemap | Scored check | Adopted | — |
| `llms-txt` — /llms.txt published and well-structured | Scored check | Draft | — |
| `link-headers` — Discovery via Link response headers | Scored check | Adopted | — |
| `dns-aid` — DNS-AID discovery record | Unscored check | Experimental | — |
| `canonical` — Canonical URL | Scored check | Adopted | — |
| `http-caching` — HTTP caching of the homepage | Scored check | Adopted | — |
| `indexing-directives` — Homepage indexable: no noindex directive | Scored check | Adopted | — |
