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.
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
muslnode 18–226 runs
build_error
glibcnode 18–226 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}`));
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.