AI Content Signals
Content Signals in robots.txt declare how you want AI systems to use your content.
They rely on the receiving system to honor them. They do not restrict access to a page.
Standards
The module emits two directive formats:
Content-Usage (values: y/n)
train-ai: foundation model training
Content-Signal (values: yes/no)
search: indexing/snippetsai-input: RAG, grounding, AI searchai-train: model training/fine-tuning
See Nuxt Robots AI Directives for full documentation.
Default
With no contentSignal option, the module adds this line to the User-agent: * group:
Content-Signal: search=yes, ai-input=yesThe default allows search and AI input. It states no preference on AI training, so the line leaves out ai-train.
Under the Content Signals spec, a missing signal neither grants nor restricts that use.
The module adds no default line when a robots group or a merged robots.txt file already sets Content-Signal.
That policy stays the only one.
Set contentSignal: false to send no Content-Signal line.
Response headers
Markdown conversion preserves a Content-Signal header from the source HTML response.
An explicit header on the Markdown route takes precedence.
Disabling automatic robots directives does not remove headers supplied by your application.
Cloudflare Markdown for Agents also preserves an origin policy header.
If the origin sends no header, the converter adds ai-train=yes, search=yes, ai-input=yes.
Configure an origin header when you need the same preference across both conversion paths.
Prerendered policies
If your HTML response sends a Content-Signal header, prerendering preserves it on HTML and Markdown twins.
Explicit Markdown route policies and static header removals take precedence.
This preserves your existing headers. It does not create HTTP policy headers from contentSignal configuration.
Cloudflare builds write these policies into _headers.
Shared route policies stay shared. Specific policies replace broader policies.
Other static hosts need their own response header configuration.
Cloudflare allows 100 static header rules. If optional discovery rules exceed this limit, the build drops them and retains policy rules. If policy rules exceed the limit, the build fails. Use fewer per-page policies or a shared policy.
Configure
Set each use you want to allow:
export default defineNuxtConfig({
aiReady: {
contentSignal: {
aiTrain: true,
search: true,
aiInput: true
}
}
})The module adds these directive lines to the User-agent: * group. It merges them into a group you already define, so robots.txt keeps one wildcard group:
Content-Usage: train-ai=y
Content-Signal: ai-train=yes, search=yes, ai-input=yesSet contentSignal.contentUsage: false to omit the draft Content-Usage row while keeping the Content-Signal row for tooling that specifically rejects Content-Usage.
Nuxt AI Ready requires @nuxtjs/robots 7.0.0 or later.
no for each permission you leave out of the object.
For example, contentSignal: { aiTrain: false } sends ai-train=no, search=no, ai-input=no.
To keep the default and also refuse training, set all three permissions.Selective Permissions
Allow search and AI input, and refuse AI training:
export default defineNuxtConfig({
aiReady: {
contentSignal: {
search: true,
aiInput: true,
aiTrain: false
}
}
})Content-Usage: train-ai=n
Content-Signal: ai-train=no, search=yes, ai-input=yes