自建 prerender 服务来对 SPA 项目做 SEO 优化

Step 1: 更新系统

sudo yum update -y

Step 2: 安装node和npm

安装node

curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs

验证node和npm是否安装成功

node -v
npm -v

Step 3: 安装prerender

创建prerender服务的目录,并进入目录

mkdir prerender
cd prerender

初始化node项目并安装prerender

npm init -y
npm install prerender

Step 4: 配置prerender

在prerender目录下 创建 server.js 文件,并写入一下文本

const prerender = require('prerender');

const server = prerender({
    chromeLocation: '/usr/bin/chromium-browser',
    chromeFlags: [
        '--headless',
        '--disable-gpu',
        '--remote-debugging-port=9222',
        '--no-sandbox',
        '--disable-dev-shm-usage'
    ]
});

server.use(prerender.sendPrerenderHeader());
server.use(prerender.blockResources());
server.use(prerender.removeScriptTags());
server.use(prerender.httpHeaders());

server.start();


Step 5: 安装 Chromium

安装Chromium

sudo yum install -y epel-release
sudo yum install -y chromium

Step 6: 运行 Prerender

node server.js

Step 7: 配置 Nginx

server {
    listen 80;
    server_name your-domain.com;

    location / {
        set $prerender 0;

        if ($http_user_agent ~* "Googlebot|Bingbot|Slurp|DuckDuckBot|Baiduspider|YandexBot|Facebot|facebookexternalhit|Twitterbot|LinkedInBot|embedly|quora link preview|showyoubot|outbrain|pinterest|developers.google.com/+/web/snippet|Google Page Speed Insights|Pingdom|Chrome-Lighthouse|Qwantify") {
            set $prerender 1;
        }

        if ($args ~ "_escaped_fragment_") {
            set $prerender 1;
        }

        if ($http_user_agent ~ "Prerender") {
            set $prerender 0;
        }

        if ($prerender = 1) {
            rewrite .* /prerender break;
            proxy_pass http://127.0.0.1:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_redirect off;
        } else {
            proxy_pass http://127.0.0.1:8080; # Your backend server
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_redirect off;
        }
    }
}

Step 8: 使用 pm2 管理 Prerender 服务

安装 pm2 管理 Prerender 进程:

npm install -g pm2

在pm2中 启动 Prerender

pm2 start server.js --name prerender

设置pm2 为系统自动启动

pm2 startup systemd
pm2 save

Step 9: 验证prerender是否启动

pm2 logs prerender