HTTP 200 OK: when a working page still isn't indexed

·4 min read

HTTP status code 200 means the server found the URL and returned its content. For Google that only makes the page eligible. A 200 page still stays out of the index when it carries a noindex, points its canonical elsewhere, is blocked in robots.txt, looks like an error, duplicates another URL, is too thin to keep, or has never been crawled.

When a page "works" but isn't on Google, the answer sits in the response headers, the HTML, or Google's own judgement.

What does HTTP status code 200 mean for SEO?

A 200 tells the client the request succeeded. RFC 9110 defines it in one line, and for a GET the body is the page itself. It says nothing about whether the page is useful or unique.

Google is blunt about this. Its HTTP status code documentation says a 2xx response "doesn't guarantee indexing" and that the content may be considered for indexing. A 200 gets you through the door. Everything after that is a separate test.

If you are seeing 3xx, 4xx or 5xx instead, start with HTTP status codes for SEO. This post assumes the page really returns 200 to Googlebot.

Why a page with status 200 is not indexed

Work through these in order. The first four are signals you control and can read in seconds. The last three are Google's call.

1. A noindex in the HTML or the headers

The page returns 200 and tells Google not to index it. Look for <meta name="robots" content="noindex"> in the head, and for an X-Robots-Tag: noindex header, which no view-source will show you.

curl -sI https://example.com/pricing | grep -iE "^HTTP|x-robots-tag|link:"

If the header is there, see X-Robots-Tag for where hosts and CDNs set it. If the meta tag is there on purpose, what is noindex covers when it belongs.

2. A canonical that points to another URL

A rel="canonical" naming a different URL asks Google to index that URL instead. Google then reports this page as an alternate, and that is working as intended. The trouble starts when the canonical is wrong. Templates hardcode the home page, point at http, or name a target that redirects or carries its own noindex. The canonical tag guide walks through each case.

3. A robots.txt rule that blocks crawling

robots.txt does not change the status code. Your browser gets 200 while Googlebot is told not to fetch the page at all. Google can still list the bare URL if other pages link to it, without any content. Find the matching Disallow line and decide whether the path should be open.

4. A soft 404

The server says 200 but the page reads like an error, such as "product not found", an empty search result or a nearly blank shell. Google's documentation says Search Console reports these as soft 404s. The fix is either real content or a real 404 or 410, covered in soft 404 errors.

5. A duplicate of another page

When two URLs show the same content, Google keeps one and drops the other, even without a canonical tag. Parameters, trailing slashes and www variants are the usual sources. Search Console shows which URL it kept, and trailing slash SEO handles one of the most common splits.

6. Thin or low-value content

Google crawled the page and decided it was not worth keeping. Tag archives, near-empty location pages and auto-generated listings land here. No header change fixes this. Merge, expand or remove the page. Crawled, currently not indexed covers the triage.

7. Google has not crawled it yet

A new page with no internal links and no sitemap entry can wait a long time. Google knows the URL exists, or does not know at all. Link it from a page that already gets crawled and list it in your sitemap. Discovered, currently not indexed goes deeper.

Match the indexing report label to the cause

The Page indexing report usually names the reason for you. Inspect the URL and compare the label with this table.

Search Console says Checklist item Where to look
Excluded by 'noindex' tag 1 Meta robots and X-Robots-Tag
Alternate page with proper canonical tag 2 rel=canonical in the head or Link header
Duplicate, Google chose different canonical than user 2 or 5 Canonical target, internal links, sitemap
Blocked by robots.txt 3 The Disallow line that matches the path
Soft 404 4 Page content and template
Duplicate without user-selected canonical 5 URL variants serving the same page
Crawled, currently not indexed 6 Content depth and uniqueness
Discovered, currently not indexed 7 Internal links and sitemap

If URL Inspection shows the page as indexed but you cannot find it in results, that is a ranking problem, not an indexing one. How to check if a page is indexed explains why a site: search misleads here.

Check whether a 200 page can be indexed

Our indexing and canonical checker covers items 1 to 3 on one URL. It reads the HTTP status, the robots.txt rule for Googlebot, meta robots and X-Robots-Tag, and the canonical. It also loads the canonical target to see whether it redirects, errors or carries its own noindex, and reads snippet controls such as nosnippet and max-snippet for Google and Bing. The result names the signal that blocks the page and the tag or header to change. A run costs 8 credits.

It does not render JavaScript, so a noindex or canonical added by a script will not show up. It cannot see Search Console either, so it will not confirm that Google has indexed the URL or judge soft 404s, duplicates and thin content. For those, use URL Inspection.

Keep reading