No aggressive bot detection on content pages
Why it matters
Cloudflare Turnstile, reCAPTCHA, and user-agent-sniffing middleware that challenge every request will block OAI-SearchBot, PerplexityBot, Claude-SearchBot, and the other crawlers that feed AI answers, alongside malicious traffic. This failure mode is serious enough that the vendors document the fix themselves — OpenAI asks site owners to "ensure your site host and/or content delivery network allows traffic from our published IP addresses," and Perplexity's crawler docs include step-by-step Cloudflare and AWS WAF allowlisting instructions. A one-click "block AI bots" toggle in a CDN dashboard silently overrides a perfectly open robots.txt. When your blog and docs return a JavaScript challenge instead of HTML, AI systems record the page as uncrawlable and stop retrying — your content vanishes from generative answers even though it loads fine for humans.
Severity rationale
Medium because impact is conditional on how broadly the bot challenge is scoped across routes.
Remediation
Restrict bot protection middleware to API, auth, and form-submission routes using an explicit matcher, and leave content pages unprotected at the application layer. If a CDN or edge firewall enforces challenges, allowlist the AI search crawlers using the vendors' published IP ranges — openai.com/searchbot.json, perplexity.com/perplexitybot.json, claude.com/crawling/bots.json — or exclude content-only paths; OpenAI and Perplexity both publish first-party WAF-allowlisting instructions. Check CDN dashboards for one-click "block AI bots" toggles (Cloudflare, Vercel) — they override robots.txt silently. Update middleware.ts.
export const config = {
matcher: ['/api/:path*', '/auth/:path*'],
}
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the GEO Readiness Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- external · openai-searchbot-ips — OpenAI — OAI-SearchBot published IP ranges (allowlist at host/CDN)
- external · perplexity-crawlers-waf — Perplexity Crawlers — Cloudflare/AWS WAF allowlisting instructions
- external · anthropic-bot-ips — Anthropic — published crawler IP ranges
Taxons
History
- 2026-04-18·v1.0.0·Initial import from geo-readiness·automated
- 2026-06-10·v1.0.1·Additive update from first-party docs (criteria shape unchanged): added published IP-range allowlists (openai.com/searchbot.json, perplexitybot.json, claude.com/crawling/bots.json), OpenAI's and Perplexity's own WAF-allowlisting instructions, and CDN "block AI bots" toggles as the common failure mode. Fixed why_it_matters bot names (the blocked-search-bot consequence belongs to OAI-SearchBot/PerplexityBot/Claude-SearchBot, not training bots).·by geo-first-party-alignment