prerender-node

raw JSON →
3.8.3 verified Sat Apr 25 auth: no javascript

Express middleware for serving prerendered JavaScript-rendered pages to crawlers (Google, Facebook, Twitter, Bing) to improve SEO for Angular, React, Vue, and other JS frameworks. Current stable version: 3.8.3. Released as needed, maintained actively. Key differentiator: integrates with Prerender.io cloud service or self-hosted prerender server, supports whitelist/blacklist, beforeRender/afterRender hooks. Compared to alternatives like puppeteer-based solutions, it offloads rendering to an external service, reducing server load.

error Cannot find module 'prerender-node'
cause Package not installed or missing from package.json.
fix
Run 'npm install prerender-node --save' to install the package.
error prerender-node: no token set, using default (free) service
cause You did not set a prerenderToken, so the middleware falls back to the free public service (limited).
fix
Set your token via .set('prerenderToken', 'YOUR_TOKEN') or set the PRERENDER_TOKEN environment variable.
error prerender-node: beforeRender must return a string or a promise that resolves to a string
cause The beforeRender callback returned something other than a string or Promise<string>.
fix
Ensure beforeRender returns a string (e.g., cache key) or a Promise resolving to a string.
gotcha Cannot use import (ESM) with prerender-node; it's CommonJS only.
fix Use const prerender = require('prerender-node');
gotcha Whitelist/blacklist methods are named 'whitelisted' and 'blacklisted' (with 'ed'), not 'whitelist'/'blacklist'.
fix Use .whitelisted('/path') and .blacklisted('/path') correctly.
gotcha Local development requires running a local prerender server (https://github.com/prerender/prerender) because the cloud service cannot access localhost.
fix Clone and run the prerender server locally, then set PRERENDER_SERVICE_URL environment variable to point to it.
deprecated The 'set' method with 'prerenderToken' is the only supported way to configure the token; old methods like 'setPrerenderToken' are removed.
fix Use .set('prerenderToken', 'YOUR_TOKEN')
gotcha The default user agent list may not cover all crawlers; custom crawlers can be added via .crawlerUserAgent() method.
fix Use prerender.crawlerUserAgent('MyCrawler') to add custom user agents.
npm install prerender-node
yarn add prerender-node
pnpm add prerender-node

Sets up Express middleware for prerendering: uses token from env or runs without, then serves a simple HTML page.

const express = require('express');
const prerender = require('prerender-node');

const app = express();
const PORT = process.env.PORT || 3000;
const PRERENDER_TOKEN = process.env.PRERENDER_TOKEN ?? '';

if (PRERENDER_TOKEN) {
  app.use(prerender.set('prerenderToken', PRERENDER_TOKEN));
} else {
  app.use(prerender);
}

app.get('/', (req, res) => {
  res.send(`
    <html>
      <head><title>Test</title></head>
      <body>
        <div id="root">Hello World</div>
        <script>document.getElementById('root').innerHTML = 'Prerendered';</script>
      </body>
    </html>
  `);
});

app.listen(PORT, () => console.log(`Server running on port ${PORT}`));