Indexability

Noindex Checker API

One call tells you whether a URL can be indexed: the HTTP status it answers with, every redirect it goes through, and the noindex and nofollow directives in its robots meta tags and X-Robots-Tag header. Checked live, every time.

The call

One GET, a live check

GET /v1/indexability?url=<absolute URL>. Send the full URL, scheme included, URL-encoded. The answer reports the URL's own status, each redirect it followed, and the robots directives of the page the chain ends on. Nothing is cached: re-check a page you have just fixed and the answer shows the fix.

$ curl -H "Authorization: Bearer $KEY" \ "https://seometricsapi.com/v1/indexability?url=https%3A%2F%2Fexample.com%2Fold-page"
{ "data": { "url": "https://example.com/old-page", "status_code": 301, "redirects": [{ "url": "https://example.com/old-page", "status_code": 301 }], "final_url": "https://example.com/new-page", "final_status_code": 200, "indexable": false, "noindex": false, "nofollow": true, "robots": { "meta": ["index, nofollow"], "header": [] }, "reachable": true, "error": null, "blocked": false, "content_type": "text/html", "checked_at": "2026-10-13T09:12:44Z" }, "meta": { "resource": "indexability", "cache": "bypass", "cost_units": 1, "degraded": false }, "error": null }

Here the old address redirects once, so it is not indexable itself, and the page it lands on carries index, nofollow: that page can be indexed, but its links are not followed.

FieldMeaning
urlThe URL checked, in canonical form: the scheme and host lower-cased, the host in its ASCII form, the default port and any fragment dropped, and the path and query kept as sent.
status_code · final_status_codeThe URL's own HTTP status, from the first response, and the status of the last response received. null when no response came back.
redirects · final_urlEach response that redirected (301, 302, 303, 307 or 308), in order, as {url, status_code}, and the URL the chain ended on. At most 10 redirects are followed.
noindex · nofollowRead from the final page's robots and googlebot meta tags and its X-Robots-Tag headers. none counts as both, and the most restrictive directive wins. null when there is no readable page, or when the page's HTML could not be read.
robots.meta · robots.headerThe evidence, verbatim: each robots meta tag that counted (a googlebot tag is listed as googlebot: <content>), and every X-Robots-Tag value received.
indexableTrue only when the URL itself answers 2xx, with no error, no block and no noindex. A redirect makes it false: final_url is the page that could be indexed.
reachable · errorreachable is false when no response came back at all. error says why an answer is incomplete: dns_not_found, connection_failed, timeout, tls_error, redirect_loop, too_many_redirects or redirect_refused.
blockedTrue when a bot wall answered instead of the page: a bot-protection challenge, whose status is the final one reported.
content_type · checked_atThe final response's media type, and when the check finished.
errorreachableWhen
dns_not_foundfalseThe host has no address: the name does not exist (NXDOMAIN), or it has no A or AAAA record.
connection_failedfalseThe server refused or reset the connection.
timeoutfalseNo answer in time, from the host's DNS (a timeout or SERVFAIL) or from the server.
tls_errorfalseThe certificate or the TLS handshake failed. That includes an incomplete certificate chain: browsers may repair one, and the check does not.
redirect_looptrueA redirect points back at a URL already visited. The chain stops there.
too_many_redirectstrueThe URL is still redirecting after 10 redirects. The chain stops there.
redirect_refusedtrueA redirect points somewhere the check will not go: a URL that is not http or https, one with credentials or a port other than the default, an IP address, an internal name, or a host that does not resolve to a public address. That includes a redirect target longer than 512 characters. It is not fetched.

reachable: false is for a failure on the first request. The same failure after a redirect keeps reachable: true, because a response did come back, and final_url and final_status_code are then the last response received.

What it reads

The page as the server sends it

The check reads what the server answers for the URL: the status of every response, the Location of each redirect, the X-Robots-Tag headers and, for an HTML page, the robots and googlebot meta tags in its first megabyte. A tag inside a comment, a script, a style block or a template does not count. A directive addressed to another crawler, such as bingbot: noindex, is listed in robots.header and not counted. A PDF or an image is judged on its headers alone.

Left out on purpose: robots.txt rules, canonical tags, meta-refresh redirects and rel="nofollow" on single links. nofollow here is the page-wide directive.

Whether a page is already in Google's index is a different question, and the Google Index Checker API answers it. Once a page can be indexed, the Link Indexing API submits it for crawling.

Cost

One credit per check

A check costs the credits set for the noindex checker on the pricing page — 1 credit by default — whether the page answered 200, 404 or nothing at all: each of those is an answer about the page. A URL the API will not check, such as one without its scheme, an IP address or a private name, is refused with a 400 and costs nothing. A 503 means the check could not be run at all just now: nothing is charged, and you can retry in a moment. The endpoint needs the index:read scope and is included in every plan, the free tier's 100 monthly credits included.

FAQ

Questions

Does it follow redirects?

Yes, up to 10, one hop at a time. Each redirect is listed in redirects with its status, final_url and final_status_code describe where the chain ends, and noindex and nofollow are read from that final page. A URL that redirects is never indexable itself: final_url is the page that could be.

Does it see robots tags that JavaScript adds?

No. The check reads the HTML the server sends. A robots meta tag that a script inserts after the page loads is not seen, so a page that adds noindex only with JavaScript reads as noindex: false here.

What does blocked mean?

That a bot wall answered instead of the page: a bot-protection challenge stood in front of it. The final status is the wall's, and noindex and nofollow are null: a challenge page carries robots tags of its own, which say nothing about the page behind it.

How long can a check take?

A check is live, so it takes as long as the page takes to answer, and a slow or protected page can take up to 25 seconds. Give your HTTP client a timeout of 30 seconds or more.

What does meta.degraded mean on a check?

That the check couldn't be fully confirmed; retry for a confirmed answer. The answer still reports what was seen, and it is charged like any other check.

Check a page before you submit it

A free key carries 100 credits a month and works on this endpoint immediately.

Start now

100 free credits a month, forever. Upgrade only when you outgrow them.

Get free API key

© SEO Metrics API