prebaked.
Prerendering

Switch from another prerender service in 5 minutes

Last reviewed

If your site already sends crawlers to a prerender service, you keep your middleware and change two values: the service URL and the token. Prebaked speaks the same protocol as the open-source prerender middlewares (prerender-node, prerender_rails and the common nginx config), so there is no new code to write.

Find your plan

What changes and what stays

Before After
Middleware prerender-node, prerender_rails, nginx config or an edge script The same
Service URL Your current service https://service.prebaked.io/
Token header X-Prerender-Token Your current token Your Prebaked token
Request format GET <service URL>/<full page URL> The same
Status codes, prerender-status-code and prerender-header meta tags Supported The same
What your visitors see Your site Your site

Before you start

  1. Sign up for Prebaked.
  2. Add and verify your domain (for example www.<your-domain>), with a DNS TXT record or a file. Prebaked renders only verified domains. Until the domain is verified, it answers 403.
  3. Copy your token. It is shown once. You can rotate it later in the dashboard.

Step 1: change the service URL and token

Use these values everywhere:

Setting New value
Service URL https://service.prebaked.io/
Token header X-Prerender-Token your Prebaked token

Use https://. Prebaked refuses plain http:// calls with 403, because the token would travel in clear text, and it never redirects them.

prerender-node (Express, Connect)

Change the two settings wherever you set them now:

prerender
  .set('prerenderServiceUrl', 'https://service.prebaked.io/')
  .set('prerenderToken', process.env.PREBAKED_TOKEN);

Or set the environment variables the middleware reads:

PRERENDER_SERVICE_URL=https://service.prebaked.io/
PRERENDER_TOKEN=<your token>

Recommended while you are there:

  • Add the afterRender hook, so crawlers get your normal page instead of an error if the prerender service fails.
  • Add the AI crawlers that prerender-node 3.8.3 does not recognise:
prerender.addUserAgents(['OAI-SearchBot', 'ClaudeBot', 'Claude-User', 'meta-externalagent']);

Full steps: Express install guide.

prerender_rails (Rails, Rack)

Change the prerender_service_url: and prerender_token: options of Rack::Prerender, or the environment variables:

PRERENDER_SERVICE_URL=https://service.prebaked.io/
PRERENDER_TOKEN=<your token>

prerender_rails defaults to http://, so set the https:// URL explicitly.

nginx

In your current config, change the prerender host in proxy_pass (or the variable that holds it) to service.prebaked.io, use https://, and put your Prebaked token in proxy_set_header X-Prerender-Token.

The usual nginx prerender config passes every service error on to the crawler. Prebaked's config falls back to your site on errors and timeouts and includes Prebaked's crawler list, so consider replacing your block with it: nginx install guide.

Cloudflare Worker, Netlify, Vercel or another edge script

If your current service gave you a worker or edge script, change its service URL and token the same way. Or replace it with Prebaked's version, which falls back to your site on errors and after 5 seconds:

Step 2: deploy and check

curl -A "Googlebot" https://www.<your-domain>/        # rendered HTML from Prebaked
curl https://www.<your-domain>/                      # your normal page

The first crawler request appears in the request log in the Prebaked dashboard. The first request for each page renders it, and later requests are served from the cache. Cache hits are free: you pay only for fresh renders.

You can also run the free checker to compare what crawlers without JavaScript get with what people see.

See what ChatGPT sees on your site

What is different with Prebaked

  • HTTPS only. Plain http:// service calls get 403.
  • No _escaped_fragment_ URLs.
  • Error codes. Wrong token: 401. Domain not verified: 403. With the recommended fallback setups, crawlers get your normal page instead of these errors.
  • Never worse than today. Prebaked answers within its own time limit. If a page is not ready, it returns your origin page (fetched without JavaScript, with its own status code) and finishes rendering in the background for the next crawler. With the edge integrations, crawlers also get your site if Prebaked is unreachable or slower than 5 seconds.
  • AI crawlers included. Prebaked's crawler list includes ClaudeBot and OAI-SearchBot.
  • Pricing: you pay for fresh renders, and cache hits are free. Plans: pricing.

30-day free trial, no card.

Starter

$9 / month

or $90 / year

  • 25,000 fresh renders / month
  • 3 domains

Growth

$29 / month

or $290 / year

  • 150,000 fresh renders / month
  • 10 domains

Pro

$79 / month

or $790 / year

  • 500,000 fresh renders / month
  • 50 domains

Prices in USD, excluding taxes.

Switching from Rendertron

Rendertron is an open-source headless Chrome rendering service, published in Google's GoogleChrome organisation on GitHub. Its repository says the project is deprecated and will not be actively maintained, and it was archived on 6 October 2022.

Rendertron uses its own middleware (rendertron-middleware), which is configured with a proxyUrl pointing to your Rendertron instance and has no token setting. So the switch is not only a URL change. Replace the Rendertron middleware with one of the Prebaked setups:

  1. Express: replace rendertron-middleware with prerender-node set to Prebaked's service URL and token. See the Express install guide.
  2. Any other stack: put the Cloudflare Worker, Netlify, Vercel or nginx setup in front of your site.
  3. Shut down your Rendertron instance after the check in step 2 passes.

You no longer run and update a headless Chrome server yourself.

When you may not need a prerender service

Google describes dynamic rendering (serving crawlers a rendered version of the page) as a workaround and not a recommended solution. If you can move your app to server-side rendering or static generation, crawlers get the content without any service in between. A prerender service fits when changing the app is not practical. Background on why AI crawlers need the content in the HTML: Can ChatGPT read JavaScript? and AI crawlers and JavaScript sites.

FAQ

Do I need to change my code to switch?

No, if you already use prerender-node, prerender_rails, the common nginx config or an edge script that calls a prerender service. You change the service URL and the token. Adding the afterRender fallback and the extra AI crawler user agents is recommended but optional.

Will my pages need to be rendered again?

Yes. Prebaked starts with an empty cache, so the first crawler request for each page is a fresh render. Later requests are served from the cache. You can warm the cache from your sitemap in the dashboard settings.

What happens if Prebaked is down or slow?

Crawlers get your original page. The edge integrations fall back after 5 seconds or on any Prebaked error, and the nginx and Express setups fall back on errors when configured as in the install guides.

Is prerendering cloaking?

Not when the content is the same. Google's guidance says that dynamic rendering which produces similar content is not treated as cloaking. Prebaked renders the page your visitors see and does not change it for bots.

Do the prerender status code meta tags still work?

Yes. <meta name="prerender-status-code" content="404"> and <meta name="prerender-header" content="Location: ..."> work as before and stay in the returned HTML.

Can I switch back?

Yes. Your middleware stays the same, so switching back means changing the service URL and token again.

Does Prebaked work with Rendertron's middleware?

No. Rendertron's middleware is built to call a Rendertron server and has no token setting. Replace it with prerender-node or one of the Prebaked integrations, as described above.