What cloaking is and why it matters
Search engines like Google send crawlers to build their index. If those crawlers see content that differs from what users see, Google considers it an attempt to manipulate rankings and can demote or deindex the affected pages. The risk is real even when the intent is benign: serving any content variant to Googlebot, including a “nicer” version, crosses that line.How Bluesky stays on the right side of the line
Bluesky’s approach rests on two guarantees that work together.Guarantee 1: Search-index bots are never bot-branched
The Bluesky bot registry marks every classic search-index crawler withisSearchIndex: true. The middleware checks this flag before it evaluates verification, purpose, or serve mode, and if the flag is set it immediately returns NextResponse.next() — the same code path a normal visitor takes.
isSearchIndex: true are:
| Bot | Operator |
|---|---|
| Googlebot | |
| Bingbot | Microsoft |
| Applebot | Apple |
This list lives in the Bluesky-managed bot registry (the botset), not in your local middleware file. The middleware fetches the botset from the control plane and caches it. When a vendor publishes a new crawler variant, Bluesky updates the registry and your edge picks it up on the next refresh — no redeployment required.
Why Google’s AI products are covered by this rule
You might wonder: if Google’s AI Overviews use different content than classic search, why not serve a special version to “Google’s AI crawler”? The answer is that Google AI Overviews run off the same Googlebot and the same search index as Google Search. There is no separate crawler for AI Overviews. If you served a different page to Googlebot, that different page is what both AI Overviews and Search would index and rank you on — there is no way to target one without cloaking the other. This is why the rule is unconditional: a search-index bot always sees your real page, full stop.Guarantee 2: Content parity — same substance, better form
The AEN only varies the form of your content, never the substance. The optimized artifact that verified non-search agents receive is:- Answer-first markdown with embedded
ArticleJSON-LD (plusFAQPageJSON-LD when your page contains question-and-answer content) - Derived entirely from your existing page — the generator runs a strict-parity grounding guardrail and will not add claims, facts, or assertions that are not already present in the source
- Generated offline and cached, so there is no model call on the request path
What changes
Form. The content is restructured as answer-first prose with structured data that helps answer engines extract specific facts without parsing HTML.
What stays the same
Substance. Every claim in the artifact exists on your source page. The generator refuses to emit an artifact that introduces new assertions. If your page changes, you regenerate the artifact.
Which bots are served the optimized artifact
Only verified non-search answer-engine agents are eligible for bot-branching — crawlers operated by products that answer user questions directly rather than building a ranked index.| Bot | Operator | Purpose class |
|---|---|---|
| OAI-SearchBot | OpenAI | RETRIEVAL |
| ChatGPT-User | OpenAI | USER_TRIGGERED |
| Claude-SearchBot | Anthropic | RETRIEVAL |
| PerplexityBot | Perplexity | RETRIEVAL |
isSearchIndex, so they pass the firewall check and enter the detection-and-serve flow.
In the drop-in Next.js middleware, the
ENABLED set controls which purpose classes are eligible. The default is new Set(["USER_TRIGGERED", "RETRIEVAL"]). Narrow it if you only want to serve one class of agent. See serve modes for how shadow, canary, and default gate whether an eligible agent is actually served.The two-tier bot model
IP_VERIFIED). A bot recognized by user agent alone is treated as unverified (UA_ONLY) and always gets the normal page.
The firewall is not a configuration option — the isSearchIndex check is hardcoded and runs first. You cannot disable it by changing SERVE_MODE or ENABLED. Classic search-index bots always receive your normal page.
Related
Serve modes
off, shadow, canary, and default — how the AEN ramps from log-only to full serving.
Agent analytics
See which agents hit your site, how they verified, and served-vs-cited breakdowns.