# 200 OK: when success is (and isn’t) enough for SEO

> 200 OK means the request succeeded and the server returned the requested content; it is the status every indexable page should send.

URL: https://yes-seo.com/http-status-codes/200

**200 OK** is the standard success response: the request worked and the server is returning what was asked for. For a web page, that’s the HTML. It’s the status every page you want in search results should return, but a 200 on its own doesn’t prove a page is healthy or indexable.

## What 200 means

[RFC 9110, section 15.3.1](https://www.rfc-editor.org/rfc/rfc9110#section-15.3.1) says a 200 indicates that the request succeeded, and what the response contains depends on the method: for GET, a representation of the resource; for HEAD, the same headers without a body; for POST, the result of the action. A 200 is cacheable by default, so browsers and CDNs may store it unless `Cache-Control` says otherwise.

## How Google treats a 200

[Google’s guide to HTTP status codes and network errors](https://developers.google.com/search/docs/crawling-indexing/http-network-errors) says Googlebot passes 200 content on to the indexing pipeline, which may index it, but indexing isn’t guaranteed. A page can answer 200 and still stay out of results because of:

- a [noindex](https://yes-seo.com/glossary/noindex) robots meta tag or `X-Robots-Tag` header;

- a [canonical tag](https://yes-seo.com/glossary/canonical-tag) pointing to another URL;

- content that looks like an error, which Google may report as a **soft 404**;

- thin or duplicate content that Google decides not to index.

## The soft 404 problem

A soft 404 is a page that says “not found,” “no results” or “this product is no longer available” while the server answers 200 OK. Visitors see an error; crawlers are told it’s a success. Google flags many of these in Search Console’s Page indexing report, and they waste crawling on empty pages. Typical sources:

- custom error templates that never set the status code;

- single-page apps where every route returns the same 200 shell;

- empty internal search or category pages;

- expired listings left online with a one-line notice.

Fix them by returning [404](https://yes-seo.com/http-status-codes/404) or 410 when the content is gone, a [301](https://yes-seo.com/http-status-codes/301) when a true replacement exists, or real content when the page should exist.

## Other 200 pitfalls

**Too many URLs answering 200.** If `http://` and `https://`, `www` and non-`www`, trailing-slash and parameter variants all return 200 with the same page, you create [duplicate content](https://yes-seo.com/glossary/duplicate-content). Pick one version, redirect the others and add a self-referencing canonical.

**Login walls and error messages served with 200.** A members area that shows a login form at the page URL, or a database error printed into a 200 page, can end up indexed as junk. Protected areas should answer 401, and failures a 5xx code.

## Setting the right status in code

```
// PHP: set the status before any output
http_response_code(404);

// Express
res.status(404).render('not-found');
```

## How to check

Run your key URLs through the [HTTP status checker](https://yes-seo.com/http-status-checker) to confirm each one returns 200 directly rather than after a redirect. Then use the [indexability checker](https://yes-seo.com/indexability-checker) to see whether robots rules, noindex or a canonical override that 200. A healthy response looks like this:

```
HTTP/2 200
content-type: text/html; charset=utf-8
cache-control: public, max-age=300
etag: "6a1f-5e2c"
last-modified: Tue, 27 Oct 2026 09:12:44 GMT
vary: Accept-Encoding
```

## Frequently asked questions

### Does a 200 status mean my page is indexed?

No. A 200 only means the server delivered the page. Google may still skip it because of a noindex directive, a canonical pointing elsewhere, duplicate or thin content, or because it looks like an error page.

### What is a soft 404?

A soft 404 is a page that tells visitors the content doesn’t exist while the server returns 200 OK. Google may detect it and report it in Search Console; the fix is to return a real 404 or 410, redirect to a true replacement, or add real content.

### Why does my error page return 200 instead of 404?

Usually the CMS, theme or single-page app renders the error template without setting the status code. Set it explicitly in code (for example http_response_code(404) in PHP) and check the result with an HTTP status checker.

