noai and nosnippet: the AI opt-out tags squirrel reports
Which pages declare noai, noimageai, nosnippet or max-snippet:0, and where the directive came from. squirrel reports, and never penalises.
What noai and nosnippet are
noai and noimageai are an informal convention. Some AI companies said they would honour them for text and image use, no specification defines them, and nothing enforces them. They express intent, which is worth recording even where it is not binding.
nosnippet and max-snippet:0 are different. They are long-standing robots directives that Google documents, they tell a search engine not to show a text snippet from the page, and answer engines treat them as instructions not to quote the page verbatim. All four can be declared in a <meta name="robots"> tag or in an X-Robots-Tag response header.
What squirrel checks
The rule runs on every crawled page. It reads the X-Robots-Tag response header and every <meta> element whose name is robots, ai, googlebot or bingbot, and matches four tokens case-insensitively in each: noai, noimageai, nosnippet, and max-snippet:0 with optional spaces around the colon. It emits one check:
noai-signals: passes with the messageNo noai / noimageai / snippet-limit signals declaredand the valuenonewhen nothing matched. Otherwise it reports at info status withDeclares AI opt-out signals: <signals>., joining the signals found with,and closing with a full stop. The four descriptions arenoai (advisory opt-out from AI text use),noimageai (advisory opt-out from AI image use),nosnippet (limits AI-search quoting)andmax-snippet:0 (limits AI-search quoting). Whennoaiornoimageaiis among them the message ends withnoai/noimageai are advisory only — honoring them is up to each crawler, with no enforcement behind the tag.Each item names the token and the source it came from, such asnoai in X-Robots-Tag header.
The noai match is word-bounded, so it never fires inside noimageai. The X-Robots-Tag header is always read. When the page has no parsed document, which happens on an error page or a stored parse, the meta side falls back to the extracted robots value instead of scanning the DOM. This rule reports and never penalises: the only non-info result is the pass.
How to fix it
There is nothing to fix unless the declaration is missing or wrong. To declare the intent:
<meta name="robots" content="noai, noimageai, nosnippet" />Put it in <head>, or send the same directives in an X-Robots-Tag header when you want them on non-HTML responses too.
Treat these tags as the declared-intent layer and robots.txt crawler blocks, covered by ax/ai-crawlers, as the layer a cooperative crawler is more likely to act on. Neither is a control: robots.txt is also honoured voluntarily. Blocking at the edge is the only layer that enforces anything.
| Rule ID | ax/noai-signals |
| Category | Agent Experience |
| Scope | Per-page |
| Severity | info |
| Weight | 1/10 |
Enable / disable
Disable this rule
[rules]
disable = ["ax/noai-signals"]Disable all Agent Experience rules
[rules]
disable = ["ax/*"]Enable only this rule
[rules]
enable = ["ax/noai-signals"]enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.
Related rules
- ax/ai-crawlers: the robots.txt blocks a cooperative crawler reads before fetching.
- ax/content-signals: the site-wide per-purpose declaration in robots.txt.
- core/nosnippet: the same directive read for its effect on search snippets.
- core/robots-meta: the indexing directives declared alongside these tokens.
Agent experience findings ship in every audit next to the SEO, performance and security rules. See AI crawlers for how an agent works through a report.
References
- Robots meta tag, data-nosnippet, and X-Robots-Tag specifications, Google Search Central
- meta name, MDN
Check your site
Run squirrel audit https://example.com and open the Agent Experience section of the report. Each declared token is listed with the tag or header it came from. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.