Prerender.io and prerendering: what it costs and when it pays off

Equipe NotHuman

Written with AI, reviewed by humans.

Reading time: 12 minutes

Prerender.io is a prerendering service for sites built with React, Vue, Angular and other JavaScript frameworks. It serves bots a fully rendered copy of each page. Meanwhile, people still get the page that the browser builds. So it quickly fixes the empty page without a rewrite, but Google treats the technique as a workaround.

In short

  • With Prerender.io, your CDN or server spots the bot by its user agent, and the service returns ready HTML. Google calls this dynamic rendering but doesn’t recommend it.
  • In the price table in effect since September 2026, plans with public prices cost $59 to $419 a month. The price depends on the render quota, and each page counts twice by default.
  • On a React site, AI crawlers only get the Prerender.io version if they’re on the integration’s list. The official Nginx templates include no OpenAI, Anthropic or Perplexity crawlers.
  • For a new site or a redesign, SSR or static generation works for both bots and people. So prerendering for bots works as a bridge.

What is prerendering and how does Prerender.io work?

Prerendering means generating a ready HTML version of a page, so the content doesn’t depend on JavaScript in the browser. The term covers two practices: generating pages at build time for every visitor, and rendering on demand only for bots. Prerender.io does the second.

According to the service documentation, the site’s CDN or server checks the user agent of each request. When it spots a bot, it forwards the request to Prerender.io with the account token. Then the service opens the page in a headless browser, caches the result and returns the HTML.

Human visitors skip this flow, because they receive the usual page that JavaScript builds. For example, on a React site built with Vite, only bots receive the rendered HTML from Prerender.io.

ModeWho gets ready HTMLExamples
Build-time prerenderingEvery visitorReact, React Router, Next.js
Prerendering for botsOnly bots on the listPrerender.io, Rendertron
Server-side rendering (SSR)Everyone, on every requestNext.js, Nuxt

Our SSR vs CSR comparison shows what each crawler sees in each mode.

Prerendering with Prerender.io: illustration of code fragments passing through a rendering cube and becoming a static page read by a robot

Does Google still recommend dynamic rendering?

No. On its page updated in December 2025, Google says dynamic rendering was a workaround. Instead, it recommends server-side rendering, static rendering or hydration. In fact, Prerender.io follows the model that page describes: the site detects the bot and passes the request to a renderer.

Dynamic rendering “is a workaround and not a recommended solution, because it creates additional complexities and resource requirements,” according to Google Search Central. It isn’t cloaking when the bot receives content similar to what people see. However, Google may treat serving completely different content as cloaking.

Build-time prerendering, on the other hand, is a different story. In its JavaScript SEO basics guide, Google says that “server-side or pre-rendering is still a great idea” for two reasons. First, “it makes your website faster for users and crawlers.” Second, “not all bots can run JavaScript.”

So Google accepts the Prerender.io approach as a temporary fix. It also notes that other search engines may ignore JavaScript.

Do AI crawlers get the Prerender.io version?

Only if their user agent is on your integration’s list. In the official integrations, the code on your CDN or server decides what counts as a bot, not Prerender.io. Each integration ships with a default list, but the lists don’t match.

This matters more for AI than for Google, because Googlebot runs JavaScript. But the OpenAI, Anthropic and Perplexity crawlers that Vercel tested with MERJ in 2024 did not run it. Vercel sells hosting for Next.js, so it has a stake in the topic. On a React site without SSR, then, these crawlers only read the text if they receive a prerendered version, like the one from Prerender.io. Our guide to JavaScript SEO for AI crawlers covers the study and an unconfirmed report of a change at OpenAI.

What we found in Prerender.io’s official integrations

We downloaded the code of seven integration files that the company publishes on GitHub. They are the Cloudflare worker, the three Nginx templates, the two Next.js files and the Express middleware. Then we ran each file’s matching rule against the official user agents of eight AI crawlers.

IntegrationAI crawlers servedLeft out
Cloudflare worker7 of 8Claude-SearchBot
Next.js 16 or later6 of 8Claude-User and Claude-SearchBot
Express (prerender-node)6 of 8Claude-User and Claude-SearchBot
Next.js 15 or earlier5 of 8ClaudeBot, Claude-User and Claude-SearchBot
Nginx (SPA, PHP and proxy)0 of 8All eight

We tested GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, Claude-SearchBot, PerplexityBot and Perplexity-User. Since Anthropic only publishes its crawlers’ names, we used the names. Googlebot and Bingbot passed in every integration.

In the file for Next.js 15 or earlier, the name appears as claudeBot, with a capital B. But the code compares it with the lowercase user agent, so ClaudeBot never matches.

Claude-SearchBot, the crawler behind Claude’s search, isn’t on any of the default lists we checked. Anthropic doesn’t publish the full user agent, so check your server logs to see if it receives the rendered page. Before the Prerender.io list, also check that robots.txt allows the AI crawlers you want to serve.

How much does Prerender.io cost, and what are the alternatives?

Prerender.io costs $59 to $419 a month, depending on the renders included, and Enterprise Plus has custom pricing. On the other hand, the alternatives range from running your own renderer to build-time prerendering or server-side rendering (SSR).

Plans and renders

PlanPrice per monthRenders included
Starter$5930,000
Growth$169100,000
Pro$419500,000
Enterprise PlusOn requestFrom 1 million

The prices come from the official pricing table, in effect since September 15, 2026. Billing is monthly, and Starter comes with a 30-day free trial. Above the quota, every 1,000 extra renders cost $2.25 on Starter, $1.75 on Growth and $1.50 on Pro. In addition, the minimum cache expiration is 24 hours on Starter, 12 on Growth and 6 on Pro.

The company charges when it caches or recaches a page, not for every bot visit. By default, each page generates two renders, one for desktop and one for mobile. For example, a store with 1,000 pages refreshed daily uses 60,000 renders a month, according to the pricing page.

By our math, with the same rule, a store with 20,000 URLs refreshed weekly goes past 171,000 renders a month. So on Growth, with the extra renders, the bill comes to about $294 a month.

Prerender.io alternatives

  • Prerender on your own server. The company’s open source server is the prerender package on npm, under the MIT license. Your cost becomes servers and maintenance, and caching depends on plugins. Finally, the last release came out in September 2024, and the GitHub repository the package points to no longer opens.
  • Rendertron. Google’s Chrome team deprecated Rendertron in 2022. Since then, the repository, now archived, has warned that dynamic rendering is not a recommended approach.
  • Build-time prerendering. In React, the prerender function from react-dom/static generates static HTML and waits for the data to load. Likewise, React Router and Next.js generate pages at build time. So every visitor gets the same HTML, with no bot list.
  • SSR. It also handles pages that change on every request, but it means rewriting part of the front end and running a server.
  • A platform with built-in prerendering. Older apps hosted on Lovable receive prerendering for verified crawlers without an outside service, as our Lovable SEO guide explains.

How do you set up Prerender.io on Cloudflare, Nginx or Vercel without cloaking?

In all three cases, code in front of the site reads the user agent. It sends only bots to Prerender.io, with the account token. To avoid cloaking, however, the bot must receive the same content and HTTP status that a person gets.

Cloudflare

On Cloudflare, the integration is a worker. According to the official Cloudflare guide, the DNS record must go through the proxy (the orange cloud). Put the token in the PRERENDER_TOKEN variable. The route should use Fail open mode, so the site stays up if the worker fails.

The same guide also tells you to allow AI crawlers in the dashboard, the topic of our guide on AI crawlers blocked by Cloudflare.

Nginx

On Nginx, the official templates create a user agent map and an internal route that passes bots to the service. Since the map has no AI crawlers, add the lines below to the map $http_user_agent $prerender_ua block. Then run nginx -t and restart Nginx.

"~*gptbot"            1;
"~*oai-searchbot"     1;
"~*chatgpt-user"      1;
"~*claudebot"         1;
"~*claude-user"       1;
"~*claude-searchbot"  1;
"~*perplexitybot"     1;
"~*perplexity-user"   1;

Vercel

On Vercel, the documented path is the official Next.js guide. Up to version 15, the code goes in a middleware.js file; from 16 on, it goes in a proxy.js file. The token lives in the PRERENDER_TOKEN environment variable. In middleware.js, change claudeBot to claudebot and add the missing crawlers.

Prerender.io has no official Vercel guide for a React app built with Vite. In that case, the Routing Middleware code is up to you. If the site already runs on Next.js, however, first consider fetching the data on the server. In general, Next.js rendering and metadata options solve these cases without an outside service.

What to check to avoid cloaking

  • Same content. The text, prices, links, title and canonical in the bot’s HTML must match the page people see.
  • Right status. By default, Prerender.io caches the page and returns a 200. So for a deleted or redirected page, set the prerender-status-code meta tag to 404 or 301. The company’s best practices recommend this.
  • Full page. If data arrives after the page loads, set window.prerenderReady = false and switch it to true when everything has loaded.
  • Fresh cache. In a store, use the recache API to refresh pages whose price or stock changed.
  • No broad terms in the list. Strings like “Mozilla” or “Chrome” send the prerendered version to regular visitors. That’s because almost every browser has “Mozilla” in its user agent.

How to test your Prerender.io integration

Request the page with each crawler’s name and look for the x-prerender-requestid header, which comes with the service’s responses. Run it in the Mac or Linux terminal, or in Git Bash. Then “prerender: 1” means the prerendered version, while a 403 or 429 status means a block.

URL="https://www.yourdomain.com/"
for BOT in Googlebot GPTBot OAI-SearchBot ChatGPT-User ClaudeBot Claude-User Claude-SearchBot PerplexityBot Perplexity-User; do
  HDR=$(curl -sI -A "Mozilla/5.0 (compatible; $BOT/1.0)" "$URL" | tr -d '\r')
  echo "$BOT | $(echo "$HDR" | head -1) | prerender: $(echo "$HDR" | grep -ciE 'x-prerender-request-?id')"
done

The test runs from your own IP, so it doesn’t reproduce IP blocks or the CDN’s bot verification.

When should you move from Prerender.io to SSR?

Move when the front end will change anyway, when many pages change daily, or when slowness also hurts people. After all, server-side rendering delivers ready HTML to everyone, with no bot list. It’s also one of the paths Google recommends.

Prerender.io only serves bots. Meanwhile, visitors keep getting the page that JavaScript builds, at the same speed as before. SSR and static generation, by contrast, speed up the page for both audiences.

The bot list also needs upkeep, as the Claude-SearchBot case shows. With SSR, on the contrary, a new crawler gets the full HTML on its first visit.

  • Stay on Prerender.io if the site is a live SPA with no time or budget for a rewrite.
  • Migrate if you plan a redesign, run a large catalog with daily price changes, or get complaints about speed.
  • Combine both during the transition: use prerendering now, and move your most important pages to SSR or static generation first.

On a React site, you can migrate to Next.js or React Router, and Prerender.io serves crawlers in the meantime. SEO for React comes down to this choice between Prerender.io, build-time prerendering and SSR. In sum, rendering is one of the foundations of the SEO that supports brand visibility on Google and in AI.

Frequently asked questions

Does Prerender.io have a free plan?

Prerender.io has no free plan in the price table in effect since September 2026. However, you can try the Starter plan free for 30 days. It costs $59 a month for 30,000 renders. Billing is monthly, and extra renders cost $1.50 to $2.25 per 1,000, depending on the plan.

Does Prerender.io work with React?

Prerender.io works with React, Vue, Angular and other frameworks. That’s because the integration lives on the CDN or server, not in the front-end code. On a new React site, however, build-time prerendering or SSR makes Prerender.io unnecessary, since both deliver ready HTML to every visitor.

How often does Prerender.io refresh its cache?

Prerender.io’s minimum cache expiration depends on the plan: 24 hours on Starter, 12 on Growth and 6 on Pro. Every recache uses renders, so set long expirations for pages that rarely change. Then use the recache API when they do change.

Does prerendering make the site faster for visitors?

It depends on the type of prerendering. Build-time prerendering does, because the HTML arrives ready for everyone, and Google cites this gain. Prerender.io, on the other hand, changes nothing for visitors. It only serves bots, and people keep getting the page their browser builds.

Want to know how your brand shows up in AI answers today?

NotHuman is opening spots for agencies and brands to track how they appear in AI answers. Join the waitlist and we’ll let you know when a spot opens up for you.

Main sources

Contents

Keep reading

Get new NotHuman articles by email

One email when we publish a new article about GEO, SEO and AI. You can unsubscribe at any time.