Robots meta tag checker
A robots meta tag can look simple while quietly combining instructions that point in opposite directions.
Run — free
This checker parses the tag’s content value, explains each recognized directive in plain English, summarizes the resulting index and link-following signals, and calls out direct conflicts such as index with noindex. It also validates parameterized controls for snippets and previews. Unknown or malformed tokens produce an error, so a typo cannot disappear behind an apparently successful report.
Read the tag as a set of crawler instructions
Paste only the content value from the robots meta element, for example noindex, follow, max-snippet:120. The checker separates comma-delimited tokens, ignores harmless differences in capitalization and surrounding whitespace, and returns a normalized form. Every directive receives its own explanation, so the result is useful even when you did not write the original markup. Index and noindex address whether the page may appear in search results. Follow and nofollow address whether crawlers should follow links found on the page. The aliases all and none carry two meanings at once: all represents index plus follow, while none represents noindex plus nofollow. Other instructions control cached copies, snippets, translations, image indexing, preview sizes, or removal after a specified date. This tool interprets the supplied tag value; it does not fetch the page or claim that every crawler implements every instruction identically. That separation keeps the report precise: it explains the syntax and its internal consistency without pretending to observe external search-engine behavior.
Find contradictions before they reach production
Conflicting directives commonly appear when templates, plugins, and page-level overrides all contribute to one tag. A value containing index and noindex says both that a page may appear and that it must not appear. Follow with nofollow creates the same problem for links. Conflicts can also hide behind shorthand: all contradicts noindex or nofollow, while none contradicts index or follow. The checker expands those meanings during analysis and lists each contradiction with a focused explanation. It also reports an effective summary for indexing and following, using allowed, disallowed, or unspecified. That summary is convenient for automated reviews, but the conflict list remains the important signal: contradictory markup should be corrected at its source rather than treated as a reliable precedence rule. Run the check on generated values in tests or deployment workflows to catch configuration drift. Because an unknown token fails the request, misspellings such as nofolow cannot be mistaken for valid crawler controls. Fixing the tag becomes an explicit task instead of a silent SEO risk.
Validate snippet and preview limits accurately
Robots metadata can do more than switch indexing on or off. Max-snippet accepts a nonnegative character limit or -1 for no limit. Max-video-preview similarly accepts a number of seconds, zero to prevent a preview, or -1 for no limit. Max-image-preview accepts only none, standard, or large. The checker validates these forms and explains the chosen value instead of returning an opaque string. It also recognizes unavailable_after when it includes a parseable date, along with noarchive, nocache, nosnippet, notranslate, and noimageindex. If a parameter is missing, misspelled, or outside its permitted shape, the entire input is rejected as invalid. This strict behavior is useful in content management systems and CI pipelines because success means every supplied token was understood. Use the normalized output for review and logging, but preserve your original source configuration as the system of record. Finally, remember that robots metadata is a crawler request, not access control: private or sensitive material still needs authentication and authorization, regardless of whether a noindex directive is present.
What you can do with it
Audit a page template
Check the directive value produced by a shared layout before it affects thousands of pages.
Validate CMS output
Reject misspelled or contradictory robots settings when editors publish or update content.
Add an SEO deployment check
Test generated meta values in CI and stop accidental noindex or conflicting combinations from shipping.
FAQ
What should I paste?
Paste the content value, such as noindex, follow. Do not paste the entire HTML meta element.
What does it cost?
The API price is $0.002 per request, and the browser version is free.
Does noindex protect private content?
No. Robots directives are crawler instructions, not security controls. Protect private content with authentication and authorization.
Why does an unknown directive cause an error?
Strict rejection makes typos and unsupported syntax visible instead of silently producing an incomplete analysis.
Are directive names case-sensitive?
No. The parser accepts capitalization differences and normalizes directive names to lowercase.
Does the checker fetch my web page?
No. It analyzes only the supplied robots meta content value and makes no network request.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/seo/robots-meta-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"noindex, follow, max-snippet:120"}'const res = await fetch("https://api.kit.forhosting.com/seo/robots-meta-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "noindex, follow, max-snippet:120"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/robots-meta-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "noindex, follow, max-snippet:120"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/robots-meta-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"noindex, follow, max-snippet:120"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"noindex, follow, max-snippet:120"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/robots-meta-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "noindex, follow, max-snippet:120"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.robots_meta_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_chars | 2000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |