Table of contents
If Google Search Console shows "Syntax not understood" next to a Content-Signal: search=yes, ai-train=no line in your robots.txt, nothing is blocked and you do not need to fix anything. In a local test on 4 November 2026, a robots.txt with the line and the same file without it produced identical crawl decisions for every URL I tried, and Python's urllib.robotparser still read the sitemap and every Allow and Disallow rule around it. The warning means the checker does not know the Content Signals field yet. It does not mean your file is broken.
TL;DR
| Your situation | Do this | Time |
|---|---|---|
Search Console or a validator flags the Content-Signal line | Keep it. It is a warning, and crawl rules are unaffected | 0 min |
| A CI check fails the build on "unknown directive" | Allow-list Content-Signal in that check, not in robots.txt | 10 min |
| You only added the line to silence a bot | Remove it. Content Signals declare a policy, they do not block anything | 2 min |
| Not sure what your file does | Run npx aiscan-cli yoursite.com (check B1), then the curl line below | 2 min |
Short answer: the warning is cosmetic. Keep the line if you want to state a policy, and fix the validator, not the file.
Why the warning appears
robots.txt has four fields that every crawler agrees on: User-agent, Allow, Disallow and Sitemap. Content-Signal is newer. Cloudflare put it into the managed robots.txt it serves for its customers, and its own documentation says that Google Search Console may occasionally report "Syntax not understood" for Content Signals, with no observed effect on crawling or SEO.
The standard explains why that is safe. RFC 9309 section 2.2.4 says crawlers may interpret other records, and that "parsing of other records MUST NOT interfere with the parsing of explicitly defined records." Google's robots.txt documentation lists the fields it supports and says other fields, such as crawl-delay, aren't supported. An unsupported field is skipped. It is not an error that stops the file.
Think of a robots.txt as a notice board with four columns the crawler reads. A fifth note pinned at the side gets a puzzled look from the checker, and the four columns are still read as before.
Prove it on your own file
This is the check I ran. It needs only Python 3.
cat > with.txt <<'EOF'
User-agent: *
Content-Signal: search=yes, ai-train=no
Allow: /
User-agent: GPTBot
Disallow: /private/
Sitemap: https://example.com/sitemap.xml
EOF
grep -v '^Content-Signal' with.txt > without.txt
import urllib.robotparser as r
for f in ("with.txt", "without.txt"):
p = r.RobotFileParser(); p.parse(open(f).read().splitlines())
print(f, p.can_fetch("*", "/page"), p.can_fetch("GPTBot", "/private/x"),
p.can_fetch("GPTBot", "/page"), p.site_maps())
Output from the run on 4 November 2026 (Python 3.11):
with.txt | * /page: True | GPTBot /private/x: False | GPTBot /page: True | sitemaps: ['https://example.com/sitemap.xml']
without.txt | * /page: True | GPTBot /private/x: False | GPTBot /page: True | sitemaps: ['https://example.com/sitemap.xml']
The two lines match. The only difference is that a validator limited to the four RFC fields reports one problem on the first file:
line 2: unknown field 'Content-Signal' (Content-Signal: search=yes, ai-train=no)
That is the whole "error". One caveat: this proves the behavior of Python's parser and the documented behavior of Google and the RFC. It does not prove what every third-party crawler does with an unknown line. Parsers are allowed to be lenient or strict about records they do not know.
Decide: keep it, gate it, or drop it
Keep it if you want a machine-readable statement of what you allow. The line costs nothing at crawl time. It declares that search is allowed and training is not. It does not stop any crawler. A crawler that ignores it still fetches the page, so pair it with real rules if you need enforcement; the Cloudflare AI Crawl Control guide covers that.
Gate it if a pipeline fails on unknown directives. Find the validator step, for example a robots.txt linter in your CI config, and add Content-Signal to its list of accepted custom fields, or downgrade that rule from error to warning. Check the tool's own documentation for the option name; they differ.
Drop it if it is there by accident. Delete the line and save the file. Then say your policy another way. Declare your content-use policy to AI walks through Content Signals, ai.txt and TDMRep.
How to know which branch you are on: if the line sits under a # BEGIN Cloudflare Managed content comment, Cloudflare writes it and will rewrite your edits. Change it in the dashboard under AI Crawl Control, not in the file.
Verify what the file does
- Scan. Run
npx aiscan-cli yoursite.com. Check B1 reads your Content Signals and check B2 reads the explicit AI bot rules. Both can pass while Search Console still shows the warning. AIScan cannot see how a given crawler interprets the line, only that it is present and well-formed. - By hand. Fetch the live file and read the line:
curl -s https://yoursite.com/robots.txt | grep -i '^content-signal'
Expected output is one line, for example Content-Signal: search=yes, ai-train=no. Several lines mean several groups each carry their own signal, which is allowed. No output means the line is not on the live file, whatever your editor shows.
3. Crawl rules. Run the Python snippet above against your real file after saving it as with.txt. The can_fetch results for the URLs you care about must not change when you remove the signal line.
If a URL is blocked that should not be, look at your Disallow rules, not at Content-Signal.
Maintenance
Re-check after any change to a CDN or SEO plugin that manages robots.txt. Those tools rewrite the file, and a rewrite can add, move or remove the line. The warning can also appear or disappear without any change on your side, so treat it as a note about the checker, not about your file.
Next step
Run npx aiscan-cli yoursite.com and look at checks B1 and B2, then read the rest of the AIScan guides. The full check list is on the bot access docs page, and the numbers behind adoption are in Content Signals in robots.txt: 117 of 799 sites declare one.
Frequently asked questions
Why does Search Console say "Syntax not understood" for Content-Signal?
Search Console's robots.txt checker does not recognise the Content-Signal field yet. Cloudflare's documentation says the report may appear for Content Signals and has no observed effect on crawling or SEO.
Does the Content-Signal line block Googlebot?
No. It declares a policy and blocks nothing. In a local parser test, crawl decisions for every URL were identical with and without the line.
Is my robots.txt invalid because of this warning?
No. RFC 9309 section 2.2.4 says parsing other records must not interfere with the records the standard defines, and Google skips fields it does not support.
My CI fails with "unknown directive: Content-Signal". What now?
The linter only knows the four RFC fields. Add Content-Signal to its accepted custom fields or downgrade that rule to a warning. Check the tool's documentation for the option name.
The line disappeared from my robots.txt after I deleted it. Why?
If it sat under a Cloudflare managed content block, Cloudflare rewrites the file. Change the policy in the dashboard under AI Crawl Control instead of editing the file.
Will removing the line fix the Search Console warning?
It removes the flag, but it also removes your declared policy, and the warning never affected crawling. Remove it only if the line was added by accident.
Do other crawlers understand Content-Signal?
Not all of them, and parsers may be lenient or strict about unknown records. The line is a declaration, so pair it with Disallow rules or bot controls if you need enforcement.
How do I check what my live file says?
Run curl -s https://yoursite.com/robots.txt | grep -i '^content-signal', or run npx aiscan-cli yoursite.com and read checks B1 and B2.

About the author
M Asif Rahman
Entrepreneur, curious about AI
I have been building companies for a long time, and lately most of my curiosity goes to AI. AIScan is a small personal project I built on a flight from Dubai to Narita. I use it to understand how ready the web is for AI agents, and I share what the scans teach me.
Related guides
What Sites Tell GPTBot in robots.txt, and Whether They Mean It
We pulled robots.txt from 538 hosts in the AIScan scan corpus on 2 October 2026 and parsed 451 of them with a group parser that follows RFC 9309. The headline: 173 of the 451 files 38.4% name at…
Do noai and noimageai Meta Tags Stop AI Crawlers? What Each Vendor's Docs Say (2026)
No. On 12 Nov 2026 we read the crawler documentation of eight AI operators OpenAI, Anthropic, Google, Apple, Perplexity, Common Crawl, Amazon and Microsoft and none of them documents noai or…
The __usage_ai-training robots.txt Token, Tested in 3 Parsers (2026)
usageaitraining is a robots.txt "policy token": you write UserAgent: usageaitraining followed by Disallow: and Allow: paths, and participating AI companies read that group as your preference about AI…
