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.
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 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 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 robots meta tag or
X-Robots-Tagheader; - a 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 or 410 when the content is gone, a 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. 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 to confirm each one returns 200 directly rather than after a redirect. Then use the 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.