Registry / web-framework / prerender-node

prerender-node

JSON →
library3.8.3jsnpmunverified

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.

npm install prerender-node
INSTALL
IMPORT
SIG · PRERENDER-NODE
P
prerender-node
web-frameworkjavascriptv3.8.3
Install
Import
Disk
Pass rate
0/ 6
Env Coverage0 / 6
glibc
1822
musl
1822
Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
node 18226 runs
build_error
glibc
node 18226 runs
build_error
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

default
const prerender = require('prerender-node'); app.use(prerender);
import prerender from 'prerender-node';
This package is CommonJS only; does not support ESM imports. Use require().
default with token
app.use(require('prerender-node').set('prerenderToken', 'YOUR_TOKEN'));
To use the Prerender.io cloud service, you must set the 'prerenderToken' via .set(). Not needed if self-hosting.
whitelisted
app.use(require('prerender-node').whitelisted('/search'));
app.use(require('prerender-node').whitelist('/search'));
Method is 'whitelisted' not 'whitelist'. Accepts string or array of paths (regex-compatible).
blacklisted
app.use(require('prerender-node').blacklisted('/admin'));
app.use(require('prerender-node').blacklist('/admin'));
Method is 'blacklisted' not 'blacklist'. Accepts string or array of paths.

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}`));
Debug
Known issues
gotchaCannot use import (ESM) with prerender-node; it's CommonJS only.
fix
Use const prerender = require('prerender-node');
affects: >=3.0.0
gotchaWhitelist/blacklist methods are named 'whitelisted' and 'blacklisted' (with 'ed'), not 'whitelist'/'blacklist'.
fix
Use .whitelisted('/path') and .blacklisted('/path') correctly.
affects: >=3.0.0
gotchaLocal 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.
affects: >=3.0.0
deprecatedThe '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')
affects: >=3.0.0 <4.0.0
gotchaThe 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.
affects: >=3.0.0
Errors
Common errors & fixes
Cannot find module 'prerender-node'
Package not installed or missing from package.json.
fix
Run 'npm install prerender-node --save' to install the package.
prerender-node: no token set, using default (free) service
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.
prerender-node: beforeRender must return a string or a promise that resolves to a string
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.
Upgrade
Version history
3.8.3latest on npm
Audit
Dependencies
prerenderoptionalThe middleware makes requests to the Prerender service (self-hosted or cloud) to fetch prerendered HTML.
Agent activity
4 hits · last 30 days
node
4
Resources
prerender-node — npm install prerender-node · libregistry