We make your site readable to every AI and search engine.

Most AI assistants don't run JavaScript, and search engines render it unevenly — so they reach a half-built shell of your pages, or skip them. PrerenderProxy gives each AI assistant and search engine your real, fully-rendered page, tuned to what it can use: clean HTML, the right structured data, shaped per bot.

Open. Works with the site you already have.

GET /product/atlas-pack · User-Agent: ClaudeBot
What a bot reads today
<html>
  <head><title></title></head>
  <body>
    <div id="root"></div>
    <script src="/app.js"></script>
  </body>
</html>
a near-empty page — nothing to show
What a bot reads through PrerenderProxy
<title>Atlas Pack 30L — €149</title>
<meta name="description" content="…">
<script type="application/ld+json">
  { "@type":"Product","offers":{"price":"149"} }
</script>
<h1>Atlas Pack 30L</h1>
<p>Waterproof, …</p>
your full page — same as customers see

62 of the top 100 e-commerce sites block at least one major AI · only 14 are fully readable · audited May 2026

What we found — top 100 e-commerce sites, May 2026

62 / 100
block at least one AI crawler outright
14 / 100
are fully AI-ready — every bot gets parseable HTML
24×
more HTML Amazon UK serves Googlebot than a real browser gets — bots and buyers treated differently
15 → 2 MB
Google's per-file crawl limit, cut Feb 2026 — content past the cutoff isn't indexed; lean prerendered HTML stays inside it

Raw data, screenshots, methodology, per-site cards → audit/2026-05-ecommerce-100

01 · What it is

One HTML response. Every crawler. No rewrite.

PrerenderProxy runs at the edge of your existing CDN. It detects every legitimate search and AI crawler — Google, Bing, GPTBot, ChatGPT-User, ClaudeBot, Claude-User, Perplexity, Applebot — and serves them a Puppeteer-rendered HTML snapshot of the same page your customers see. Your SPA stays exactly as it is. Your bot story converges to one HTML response.

Verified bots only

Reverse-DNS + IP-range validation against every vendor's published bot list. UA-only matching is a footgun — we don't ship it.

Same content as your users

The rendered HTML is exactly what your hydrated SPA would show — no special pleading, no drift. Compatible with Google's 2024 guidance and AI crawlers' 2026 reality.

Edge-cached snapshots

Snapshots warm proactively from your sitemap and live in your existing Fastly or Cloudflare cache. Crawlers get edge-cache-speed responses on hit; origin load drops; no SSR migration required.

Granular per-bot policy

Block training bots, allow live-retrieval bots, allow search-index bots — independently, per UA, by reverse-DNS. The right policy for AI shopping visibility in 2026.

Observability built in

Every render emits a structured event. Hit rate, error rate, render time, and per-bot success — straight into Elasticsearch / Grafana / whatever you already run.

AI-friendly source

All config is plain JSON + VCL + Markdown. No bespoke DSL, no opaque admin UI. Designed for iterative AI-led development: any change is one PR, one diff, one human review.

WebMCP-ready at the edge NEW

The agentic web needs pages that expose tools, not just content. When your CMS can't add tool attributes or let you register JavaScript, PrerenderProxy can inject WebMCP tool declarations at the render layer — the same no-rewrite pattern, aimed at agents that act. Read the explainer →

02 · How it works

Two paths to the page. One source of truth.

A request hits your existing CDN. Crawlers are routed to a Puppeteer service that runs your real JavaScript; everyone else gets your SPA shell as normal. Both paths render the same page — one in the user's browser, one at the edge.

STEP 01

Edge detect

VCL classifies the request: real user → SPA path; verified bot → prerender path. Verification is rDNS + IP-range, never UA-only.

STEP 02

Render or cache

Cache hit → edge-cache response, no compute. Cache miss → Puppeteer renders the page using your real SPA + JS bundle, then caches the HTML for next time.

STEP 03

Serve fully-formed HTML

The bot gets the same DOM your customers would see after hydration — title, meta, JSON-LD, Product / Offer schema, full body — in one fetch.

STEP 04

Warm + measure

A nightly crawler keeps the snapshot fresh against your sitemap. Every render emits a metric line. Drift between bot HTML and user HTML is alarmed, not tolerated.

03 · Why now

AI crawlers don't run your JavaScript.

Google deprecated dynamic rendering in 2024 on the assumption that everyone would migrate to SSR. Most didn't — and AI crawlers showed up that don't execute JavaScript at all. The technique came back under new names. We just write down honestly what the trade-offs are.

04 · Every crawler

It's not only AI.

Serving fully-formed HTML helps far beyond AI assistants. The same edge-prerendered page an AI crawler can finally read also reaches search engines that render JavaScript less reliably than Google — and even helps Googlebot, which renders JavaScript well but defers it to a separate, budget-limited pass, index your content faster and cheaper.

Google

renders JS — but static still wins on speed & budget

In February 2026 Google's documented crawl limit dropped from 15 MB to 2 MB per file — Googlebot now indexes only the first 2 MB of a page. Lean prerendered HTML stays well inside that budget; a bloated client-rendered bundle can push real content past the cutoff. And Googlebot does render JavaScript, so "Google can't read your app" is false — the value of static HTML is that your content lands in the first crawl wave, sparing both crawl budget and the separate render budget Google spends on JavaScript. Google's own docs put it plainly: "server-side or pre-rendering is still a great idea… not all bots can run JavaScript."

Other search engines

render JS less reliably — so static = they see you

Outside Google, JavaScript rendering is partial and inconsistent. Microsoft has long advised serving Bing prerendered HTML rather than relying on its JS rendering; DuckDuckGo leans on Bing's index, so the same limits apply; Yandex renders selectively and says to keep critical content in the initial HTML; Brave runs its own index with rendering depth it doesn't publicly confirm. The safe read: don't bet visibility on client-side rendering.

AI assistants

mostly don't render JS — empty without prerendering

The major AI crawlers — GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot and others — mostly don't execute JavaScript. The most-cited study (Vercel × Merj, across 500M+ GPTBot fetches) found no evidence of JS execution: they read your JavaScript as text but never run it. A client-rendered page looks blank to them, even when Googlebot renders it fine. (Google's Gemini, which rides Googlebot, and Applebot, on WebKit, are the exceptions.)

Static HTML wins in all three knowledge modes

AI knowledge reaches models through three modes — training, search, and fetch. Fully-formed HTML helps in every one. See the three knowledge modes — training, search, fetch.

Training

Crawlers that build training corpora mostly don't run JavaScript, so static HTML is what gets captured into a model's memory. Content missed at training time can't be added to that model later.

Search

One fix, two channels: AI answer engines reading live results and classic search engines indexing your page both get your full content instead of an empty shell.

Fetch

When an AI assistant fetches your URL mid-answer, it pulls the page without rendering — so a JavaScript-only page returns an empty shell. Prerendered HTML means it reads your real page: headings, links, prices, availability.

05 · Writing

Recent posts

EXPLAINER

WebMCP, explained — your website hands the AI a menu of buttons

The plain-language version: what WebMCP is, the HTML attributes and JavaScript it's made of, why the page has to render first, and how a rigid CMS still gets tools — at the edge.

8 min · 2026-07-02
DEEP DIVE

WebMCP, examined — the spec, the GitHub, and what's actually shipped

A citation-first teardown: what registerTool really does, where the spec is a TODO, the single-engine reality, the one real attack paper, an FAQ, and the honest good and bad.

16 min · 2026-07-02
PRACTICE

Stuck with legacy — fix Product schema, canonicals, soft 404s at the edge

When the CMS can't ship modern SEO + AI metadata, the prerender layer can. Per-bot response shaping with the cloaking-risk safety rails worked out.

12 min · 2026-05-19
OBSERVABILITY

What to log when you serve bots — schema + Combot.ai integration

Structured-log schema, Vector → ES → Combot pipeline, five anomaly alerts with thresholds, GDPR PII handling.

13 min · 2026-05-19
ENGINEERING

Reverse-DNS bot verification — recipes for seven platforms

nginx, Cloudflare, Fastly, Vercel, AWS, Apache + OpenResty Lua. The three-step protocol, the vendor IP-range JSON sources, the operational tips most posts skip.

14 min · 2026-05-19
POSITION

Don't block GPTBot if you're a brand

The block-training framework was written for publishers. For brands, the math inverts. The parametric-recall mechanism, the 2026 numbers, the strongest counter-argument addressed.

11 min · 2026-05-19
DEEP DIVE

The strange afterlife of dynamic rendering, 2018–2026

Google deprecated it. The AI crawlers brought it back. A history of a technique that refused to die — with the 2027 forecast.

Long read · 2026-05-19
RESEARCH

62 of 100 — what we learned auditing the world's largest stores

The single biggest finding from our May 2026 audit: most large e-commerce sites have voluntarily made themselves invisible to AI shopping.

Findings · 2026-05-19
DECISION

Should you block AI bots? A 3-step decision framework

Training vs live retrieval vs search index. They're not the same thing. How to write a robots.txt that blocks the first and welcomes the second.

How-to · 2026-05-19
BEHIND THE SCENES

Building PrerenderProxy in 2026

Why we chose Puppeteer over Playwright, what Fastly VCL lets us do that Cloudflare doesn't, and the operating cost of a self-hosted prerender layer.

Engineering · 2026-05-19

All writing →  ·  Bot Directory →

06 · Get in touch

Want the full audit + a same-site benchmark?

We send our full 100-site audit dataset (every site × every bot, raw HTML, screenshots) and a one-page benchmark of your own site against the cohort. No pricing pages yet — we're picking the first ten partners by hand.