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.

web-frameworkhttp-networkingdevops
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.

This package is CommonJS only; does not support ESM imports. Use require().

const prerender = require('prerender-node'); app.use(prerender);

To use the Prerender.io cloud service, you must set the 'prerenderToken' via .set(). Not needed if self-hosting.

app.use(require('prerender-node').set('prerenderToken', 'YOUR_TOKEN'));

Method is 'whitelisted' not 'whitelist'. Accepts string or array of paths (regex-compatible).

app.use(require('prerender-node').whitelisted('/search'));

Method is 'blacklisted' not 'blacklist'. Accepts string or array of paths.

app.use(require('prerender-node').blacklisted('/admin'));

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 footguns
gotchaCannot use import (ESM) with prerender-node; it's CommonJS only.
gotchaWhitelist/blacklist methods are named 'whitelisted' and 'blacklisted' (with 'ed'), not 'whitelist'/'blacklist'.
gotchaLocal development requires running a local prerender server (https://github.com/prerender/prerender) because the cloud service cannot access localhost.
deprecatedThe 'set' method with 'prerenderToken' is the only supported way to configure the token; old methods like 'setPrerenderToken' are removed.
gotchaThe default user agent list may not cover all crawlers; custom crawlers can be added via .crawlerUserAgent() method.
Upgrade
Version history

Breaking-change detection hasn't run for this library yet.

Audit
Security & dependencies

CVE tracking and dependency tree are planned for a later release.

Agent activity
14 hits · last 30 days
gptbot
4
ahrefsbot
4
script
1
bingbot
1
Resources