BotBridge · Bridge CDN

Bots don't run your JavaScript. Serve them a finished page.

BotBridge is Bridge CDN’s layer for crawlers and AI agents. Named bots get a prerendered HTML snapshot when the edge has one ready. Humans always get your origin.

Start on Bridge CDN How prerendering works

Prerendering, IndexNow and analytics are on every plan · AI SEO is Pro and up.

Prerender

Serve bots a finished page

Bot UAs get a server-rendered HTML snapshot from the edge. Humans get your origin, unmodified. If the UI hydrates in the browser, the crawler either sees a shell or a finished page.

Human lane

Origin

GET /pricing  200
<script src="/app.js"></script>
path: origin

Bot lane

Snapshot

GET /pricing  200
X-BB-CDN-Cache: prerender-hit
<script> stripped

Googlebot · Bingbot · GPTBot · ClaudeBot · PerplexityBot · Applebot · +34 more

Bots get prerendered HTML. Humans keep your origin.

Serve prerendered HTML snapshots to bots and crawlers.

Bridge is off. Bots receive origin only.

Sample cycle shape
78% of cycle cap 22% left
scroll-bottom scroll-events scroll-top

Chips mirror Rendering options below. Sample only.

Rendering options. Try the switches.

Trigger lazy-loaded content before capture.

Fire scroll events used by scroll-based rendering.

Scroll back so the snapshot starts at the top.

Sample list. Real domains allow up to 50.

Demo only. Max 3 chips here.

Bridge CDN dashboard · Prerendering · sample data

Toggle opens settings. Demo.

Step 1

Classify the request

40 named crawlers decide the lane. You can add up to 50 more. Humans stay on origin; bots enter the prerender path.

Step 2

Cold path: origin now, warm behind

If no snapshot is ready, the edge serves origin immediately and warms the snapshot in the background. A bot is never held waiting on a live render.

Step 3

Warm path: finished snapshot

When a snapshot is ready, bots receive server-rendered HTML from the edge. Humans still get your origin, unmodified.

Finished HTML, not a shell

Bots get a server-rendered snapshot. Scripts are stripped by default. JSON-LD and AMP scripts stay.

40 named crawlers built in

40 named crawlers built in. You can add up to 50 more.

A bot is never held waiting

Cold path serves origin now and warms the snapshot in the background. No bot waits on a live render.

IndexNow

Tell engines when a page changes

Edge change detection queues URLs to Bing, Yandex, Seznam, Naver, Yep, and api.indexnow.org. Bulk posts run on a short interval. Google is not in IndexNow. Keep sitemaps.

Six endpoints, one submission

Grouped per host and engine. Bulk POST on a short interval. Modes are fallback, balance, or all.

Key file on your hostname

The edge serves the verification key at your own hostname. Nothing to upload to origin.

Route rules, first match wins

Include and exclude globs pick eligible paths. No rules means the whole domain. One include makes the domain opt-in.

Submit changed URLs to IndexNow engines. Indexing stays each engine’s call.

Submit changed URLs. On every plan.

IndexNow is off on this domain. No submissions. Sample.

3 of 6
Engines active
~99% 2xx
Latest-day mix
36
In-flight queue
1
Engines on cooldown
Per-engine status mix (sample day)
EngineShareHTTP status mix
Bing~50%200 heavy 429 rare
Yandex~30%200
IndexNow (aggregator)~20%202
3 / 25 · Pro plan
  • Include /blog/*
  • Include /docs/*
  • Exclude /blog/drafts/*

Rules decide where IndexNow is active. First match wins. No rules means the whole domain. Demo reorder and delete only.

Imitation highlight only. Not a live submit.

  • /blog/migrating-our-docs Bing · 200 sample
  • /docs/getting-started Yandex · 200 sample
  • /blog/edge-routing Bing · 429 sample
  • / Aggregator · 202 sample

Verification key is derived per hostname and served at your own domain by the edge. Nothing to upload to origin.

Key path (sample)

/{key}.txt on acme.com

Served

Bridge CDN dashboard · IndexNow delivery · sample data

Tabs switch panels. Demo. Range changes chart shape only. Sample.

Six endpoints, one change signal

  • Bingengine
  • Yandexengine
  • Seznamengine
  • Naverengine
  • Yepengine
  • api.indexnow.orgaggregator

Google does not participate in IndexNow. Bulk POST on a short interval. Sample endpoint set, not live volume.

Range changes the chart shape (sample).

−60m−45m −30m−15mnow 00:0004:0008:00 12:0016:0020:00 429 · engine cooldown, 30 min wk 1wk 2 wk 3wk 4 Q1Q2 Q3Q4
Requests Errors

Illustrative sample data. Shape only. Not measured delivery volume.

AI SEO

Fill the tags bots still miss

Fills missing meta, Open Graph, Twitter, and JSON-LD in the bot snapshot only. Authored tags always win. Pro and up. Off per domain until you enable it.

Fill missing meta, OG, Twitter, and JSON-LD in the bot snapshot. Never overwrite yours.

Generate missing tags for the bot snapshot. Off by default.

Pro and up

Off on this domain (default). Pro and up.

Fill missing og:image with a 1200×630 card. Off by default.

Off. Pages that already have og:image keep it. Nothing is generated.

Approximation. Injected only when the page has no og:image.

Migrating our docs to the edge

Acme

Try a URL on this domain. Preview tags BotBridge would add if missing. Demo swaps two canned profiles.

Enriched
Tags in the snapshot (docs profile)
GroupPropertyValue
MetatitleMigrating our docs to the edge · Acme
MetadescriptionHow we moved the Acme docs behind Bridge CDN, and what changed for crawlers.
Open Graphog:titleMigrating our docs to the edge
Open Graphog:urlhttps://acme.com/blog/migrating-our-docs
Open Graphog:imagegenerated 1200×630 card
Twittertwitter:cardsummary_large_image

Per URL, when JSON-LD is on. Organization and WebSite from the brand profile; BreadcrumbList, WebPage, and BlogPosting from this path. Existing JSON-LD stays.

Organization
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Acme Inc.",
  "url": "https://acme.com/",
  "sameAs": ["https://twitter.com/acme"]
}
WebSite
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Acme Marketing Site",
  "url": "https://acme.com/"
}
BreadcrumbList
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://acme.com/" },
    { "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://acme.com/blog" },
    { "@type": "ListItem", "position": 3, "name": "Migrating our docs to the edge", "item": "https://acme.com/blog/migrating-our-docs" }
  ]
}
WebPage
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "name": "Migrating our docs to the edge",
  "url": "https://acme.com/blog/migrating-our-docs"
}
BlogPosting
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Migrating our docs to the edge",
  "url": "https://acme.com/blog/migrating-our-docs"
}
Tags in the snapshot (homepage profile)
GroupPropertyValue
MetatitleAcme · Marketing that ships
MetadescriptionAcme helps teams publish at the edge. Product, docs, and blog on one origin.
Open Graphog:titleAcme
Open Graphog:typewebsite
Open Graphog:imagegenerated 1200×630 card
Twittertwitter:cardsummary

Per URL, when JSON-LD is on. Organization and WebSite from the brand profile; WebPage from this path. Homepages skip BreadcrumbList. Existing JSON-LD stays.

Organization
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Acme Inc.",
  "url": "https://acme.com/"
}
WebSite
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Acme Marketing Site",
  "url": "https://acme.com/"
}
WebPage
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "name": "Home",
  "url": "https://acme.com/"
}
Enrichments this month (Pro sample)
1,284 / 2,000 64% used · 36% left

Bridge CDN dashboard · AI SEO enrichment · sample data

Pro mock. Flip to show enrichment panels. Family chips filter the table. Preview-image toggle shows the card.

Fill missing, never overwrite

Injection runs in three tiers: your brand profile, deterministic derived values, then the generated record. Your tag always wins. Injected nodes use data-bb-seo="1". Missing og:image can be filled with a 1200×630 card.

Generated on our own hardware

A self-hosted model, not a third-party API. Output is checked before it is stored. Invalid records are never injected.

Pro and up. AI SEO enrichment is off per domain until you enable it. Not available on Free or Hobby.

MetaOpen Graph TwitterJSON-LD Solid = your own tags. BotBridge never touches them.
Already present Filled by BotBridge Left empty

Illustrative sample proportions on a hypothetical site. Not measured coverage.

Analytics

Watch bots and AI agents apart from visitors

Computed at the edge from the request. No script. No cookie. Humans and bots chart on separate planes.

Human plane

Visitors only. GET + 2xx + text/html. Daily-rotating salted hash. 30-minute sliding sessions.

Bot & AI plane

Same registry as the router names the crawler. Prerendered vs origin split. Crawl-infra hits first-class.

Analytics from HTTP only. No client JS. No cookies. Visitors vs bots and AI. Uniques deduped daily.

~2 : 1
Bots & AI vs visitors (shape)
92.4%
Prerendered bot hits vs origin

Cookieless, no client script. Planes stay separate so crawls never distort visitor counts.

~1 : 2
Visitors vs bots (sample shape)
30 min
Sliding session window

Only GET 2xx text/html enter the visitor pipeline.

92.4%
Prerendered (vs 7.6% origin)
robots.txt
Largest crawl-infra hit
sitemap
Mid crawl-infra share
RSS/Atom
Smallest crawl-infra hit

Crawl-infra hits (not pageviews). Category table below is bot request mix by category.

Bot and AI-agent mix by category (share-first sample)
CategoryShareShape
AI assistant37.0%largest
Search31.0%high
AI crawler15.8%mid
SEO tool7.6%low
Other4.6%low
Social2.4%small
Monitoring1.6%small

No tag to install. No cookie set. Identity is a salted hash that rotates daily. Country is resolved locally. Mechanism only, not a compliance claim.

Bridge CDN dashboard · Bot and AI analytics · sample data

Tabs switch panels. Chips filter categories. Range changes the chart shape (sample).

No script, no cookie

Daily-rotating salted hash. Country resolved locally. No client JS.

Router-aligned names

Same registry as prerender. History length is plan-gated.

−60m−45m −30m−15mnow 00:0004:0008:00 12:0016:0020:00 AI-crawler burst wk 1wk 2 wk 3wk 4 Q1Q2 Q3Q4
Longer history Your current plan keeps 365 days of analytics; this range needs more history. Upgrade plan
Visitors Bots & AI

Illustrative sample data. Shape only. Not measured traffic.

How it fits

One request path, four jobs

Four features on one request path, not four products bolted on. Classification picks the path. Everything after follows that decision.

  1. Request arrives
  2. User-agent classified
  3. Snapshot or origin
  4. Tags filled at render
  5. Change detected
  6. IndexNow ping
  7. Counted in analytics

What each plan includes

Capability Free Hobby Pro Business
PrerenderingIncludedIncludedIncludedIncluded
IndexNowIncludedIncludedIncludedIncluded
IndexNow URLs per day5002,00010,00025,000
IndexNow route rules2525100
Submission log retention7 days14 days30 days90 days
AnalyticsIncludedIncludedIncludedIncluded
Analytics history14 days90 days365 days1,825 days
AI SEO enrichmentIncludedIncluded
Enrichments per month2,00010,000

Plans and volumes are managed on Bridge CDN. Enterprise is arranged directly.

FAQ

Before you switch it on

Do bots always get the prerendered page?

No. The first bot to reach a path with no snapshot gets your origin, served immediately, while the snapshot is rendered in the background. The next crawler on that path gets the snapshot. A bot is never held waiting on a live render.

Does IndexNow submit to Google?

No. Google does not participate in IndexNow. IndexNow is an open standard supported by Bing, Yandex, Seznam, Naver, Yep, and the IndexNow aggregator, and BotBridge submits to all six. For Google, keep using sitemaps and on-page SEO.

Does AI SEO overwrite the tags I already wrote?

No. Injection is fill-missing only. Every injected node is marked with the attribute data-bb-seo="1", and any tag you authored yourself is kept. The generated one is added only when that tag is absent. Change your own meta description later and the generated one never replaces it.

Do human visitors see any of this?

No. Humans are routed to your origin, unchanged. Prerendering, generated markup, and snapshot caching apply to the bot path only, so generated tags land in the snapshot served to crawlers rather than in the response your visitors receive.

Does analytics need a script or a cookie?

Neither. Everything is computed at the edge from the request and response themselves, so there is no tag to install and no cookie is set. Visitor identity is a salted hash that rotates every day, uniques are counted and deduplicated daily, and country is resolved locally. Only pageviews, GET requests returning 2xx and text/html, enter the visitor pipeline.

What do bots receive?

A server-rendered HTML snapshot when the edge has one ready. Script tags are stripped by default. JSON-LD and AMP scripts stay. A page can declare its own HTTP status, and an origin 3xx is passed through as a real redirect.

What is on the free plan, and what needs Pro?

Prerendering, IndexNow, and analytics are on every plan, including Free. AI SEO enrichment is Pro and up, and it stays off on each domain until you switch it on. Volumes are tiered: IndexNow allows 500 URLs a day on Free and 10,000 on Pro, and analytics history runs 14 days on Free and 365 days on Pro.

Where do I sign up?

At bridge-cdn.com. BotBridge is the bot and AI-agent layer of Bridge CDN rather than a separate product, so you configure it from the Bridge, IndexNow, SEO, and Analytics tabs of the Bridge CDN dashboard, on the same account that manages your DNS, caching, and certificates.

Get started

BotBridge ships with Bridge CDN.

Nothing separate to buy. Point DNS at Bridge CDN and enable Bridge. Bots get a finished page path.

Start on Bridge CDN View pricing

Prerendering, IndexNow, and analytics on every plan · AI SEO enrichment on Pro and up.