The robots directives that are not noindex
Everybody knows noindex. The rest of the vocabulary controls snippets, images, cached copies and expiry dates, can arrive in a response header instead of a tag, and resolves in ways that surprise people when two sources disagree.
The short answer
Robots directives control indexing and snippet behaviour, and there is more vocabulary than noindex: nofollow, nosnippet, noarchive, noimageindex, max-snippet and max-image-preview all change how a page is treated. They can be set in a meta tag or in an X-Robots-Tag response header, and when the two disagree the most restrictive one wins.
The vocabulary past noindex
These are instructions to a crawler about what it may do with a page it has already fetched. They are not access control: a directive is only read if the page is retrieved, which is why a robots.txt block and a meta directive do fundamentally different jobs.
noindex keep it out of the index. the big one
nofollow do not follow the links on this page
none noindex plus nofollow, in one token
nosnippet show no text snippet at all, and no preview
max-snippet:150 allow a snippet up to 150 characters
max-snippet:0 equivalent to nosnippet
max-snippet:-1 no limit, which is the default
max-image-preview: none, standard or large. controls the thumbnail
noimageindex do not index images found on this page
noarchive no cached copy offered
notranslate do not offer this page translated
unavailable_after: drop it after a date, in a valid date format
indexifembedded index this only where it is embedded in another
page, for iframe-delivered contentTwo of these are more consequential than they look. nosnippet removes your description from every result, which almost always costs more clicks than whatever it was protecting, and noarchive is largely obsolete now that cached copies are not offered the way they were.
nofollow deserves its own note. On a page-level directive it means the links here should not be followed, and as a link attribute it became a hint rather than a directive in 2019. Using it to control the flow of value inside your own site has not worked for a very long time, which is the subject of the authority guide.
The genuinely useful one nobody uses is max-snippet with a small positive number, which limits a snippet without removing it. Publishers reach for nosnippet when what they wanted was a cap.
The header form, and when you need it
Every directive above can be delivered as an X-Robots-Tag response header instead of a meta tag. Same tokens, same meanings, different transport.
# a PDF, which has no head to put a meta tag in
X-Robots-Tag: noindex
# targeting one crawler, and allowing a capped snippet for others
X-Robots-Tag: googlebot: noindex, nofollow
X-Robots-Tag: max-snippet:120
# nginx, applied to a directory of documents
location /reports/ {
add_header X-Robots-Tag "noindex" always;
}You need the header form in three situations, and only three. For files that are not HTML, which is the main one: a PDF, a spreadsheet, an image, a plain text file. For directives applied across a path pattern, where setting it at the server is one rule rather than a template change. And for crawler-specific instructions, since the header accepts a user agent prefix that the meta tag cannot express.
The header is also the invisible one, and that makes it the source of the worst incidents in this area.
A meta tag is in the markup, so anybody looking at the page can see it. A header is not: X-Robots-Tag: noindex applied at the CDN to a path pattern will remove a whole section from search while every page looks perfect in a browser and in your source control.
This is the specific failure that a staging configuration causes when it survives a promotion to production. If pages are disappearing and you have checked the markup, check the response headers next, before anything else.
Read the directives on one page
This reports the robots meta tag on the URL you enter and separates the permissive tokens from the ones that give something up. What it cannot see is the header form, and the guide above explains why that matters: the tag and the header are read together.
No signup required. Each free search audits one page, paste any URL to see it in action.
What happens when two sources disagree
A page can carry a meta tag and a header at once, and both can name several tokens. The rule is that the most restrictive instruction wins. A noindex in a header and an index in a meta tag resolves to noindex, and there is no notion of one overriding the other by being later or more specific.
Which produces a practical asymmetry worth internalising: adding a permissive directive can never undo a restrictive one somewhere else. Teams try this. Putting index, follow in a template does nothing to rescue pages that a CDN rule is marking noindex, and it creates the impression that the markup has been checked.
Two more resolution details. A directive naming a specific crawler beats the generic one for that crawler, which is how the header form targets one agent. And a page blocked in robots.txt has its directives never read at all, so a noindex behind a disallow is a message nobody receives, leaving the URL eligible to appear with no description. That combination is covered properly in the indexability guide.
Does this affect AI search?
Yes, and this is where the vocabulary has been extended most recently. The snippet controls in particular do double duty: nosnippet and max-snippet govern what may be shown as an extract, and extracts are what an answer surface is built from. A page with nosnippet has opted out of being quoted in the places that respect the directive.
There is also a per-element control worth knowing about here, because it has no equivalent anywhere else in the vocabulary. Marking a region with data-nosnippet excludes just that region from extracts while leaving the rest of the page eligible, which is the right tool for a paywalled paragraph, a disclaimer or a subscriber-only aside.
The separate matter of the agents that build training and retrieval corpora is not really this check. Those are named user agents with their own robots.txt entries, and the AI directives guide covers which ones exist and what each is for. What belongs here is the recognition that the two vocabularies overlap and are not the same, and that a blanket restriction written for one audience frequently catches the other.
Why this is Critical when most of its tokens are minor
Because the rating has to cover the worst thing the check finds, and the worst thing here removes pages from search entirely. Most of the vocabulary is a preference about a thumbnail or a snippet length. One token, in a header nobody can see, silently deindexes a section, and Critical is the rating for findings that take a page out of the running.
The invisibility is what settles it. Every other Critical finding leaves evidence on the page: a missing title, a broken link, a canonical pointing somewhere odd. A response header leaves nothing in the markup, nothing in your repository and nothing in a browser window. A check that reads them is doing something a person cannot do by looking.
The corollary is that most instances of this finding will be uninteresting, and that is expected. A page declaring index, follow is telling you the default twice. Read the report for the tokens that give something up, and read the header before you conclude the markup is the whole story.
Reading the tag and the header together
Both sources, one command, because checking only the markup is how this gets missed.
URL=https://example.com/reports/q2-2026
# the header form, which is invisible in a browser
curl -s -I "$URL" | grep -i 'x-robots-tag'
# the meta tag
curl -s "$URL" | grep -io '<meta[^>]*name="robots"[^>]*>'
# non-HTML files can only use the header, so check them directly
curl -s -I https://example.com/files/price-list.pdf \
| grep -iE '^(HTTP/|content-type|x-robots-tag)'
# and as a specific crawler, since the header can target one
curl -s -I -A 'Googlebot' "$URL" | grep -i 'x-robots-tag'The last command matters more than it looks. A header applied conditionally by user agent will not appear in an ordinary request, so a check that only runs as your browser can report a clean page that is being told something else.
When a directive turns out to be arriving in a header you did not write, the place to look is your CDN or reverse proxy configuration rather than your application, and the change that introduced it is usually months old.
Questions this check raises
- When do I need the X-Robots-Tag header instead of a meta tag?
- Whenever the resource is not HTML. PDFs, images and other files have no head to put a meta tag in, so the header is the only way to control them. It is also the practical choice when directives need to be applied at the CDN or server level across many URLs at once.
- What happens if the meta tag and the header disagree?
- The restrictive directive wins. A meta tag saying index and a header saying noindex results in a page that is not indexed, which is exactly the situation that produces a bug nobody can find: the HTML says one thing, the response says another, and only one of them is visible in view-source.
- Does nofollow on a meta robots tag stop link equity leaving the page?
- It stops the crawler following the links from that page, which is not the same as directing equity elsewhere. Google treats nofollow as a hint rather than an instruction, and the value that would have flowed is not redistributed to the remaining links. Page-level nofollow is rarely the right tool.