一、概述

  近年开发模式变化,新建Web站点采用前后端分离部署已经是大势所趋。但是,搜索引擎爬虫不会执行js脚本从后端加载数据,不利于搜索引擎对站点的收录。因此,做好SEO优化可以让各大搜索引擎更好的收录Web站点。
  本文将以我的个人博客 (CentOS7.6 Nginx环境)为例来谈一下使用Prerender为前后端分离项目做SEO优化的操作流程。

个人博客站点部署架构图

  从上面的部署架构图可以看到本站点是浏览器前端渲染的,传统的搜索引擎无法抓取到页面数据,如下图:

做SEO优化前抓取首页

二、Prerender介绍与环境安装

  Prerender采用预渲染方式解决SEO问题,可以极大的提高网页访问速度。

  Prerender是一个基于Node.js的程序,所以安装Prerender之前需要有Node.js环境。同时,由于Prerender本身并不执行js,而是使用谷歌浏览器来完成页面渲染,所以需要安装google-chrome。

1、安装google-chrome

  配置yum源,/ect/yum.repos.d/目录增加google-chrome.repo文件,并写入以下内容:

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

  执行安装命令 yum -y install google-chrome-stable –nogpgcheck

  安装完后默认路径为 /opt/google/chrome

  修改/usr/bin/google-chrome文件,最后一行改为 exec -a "$0""$HERE/chrome" "$@" --user-data-dir --no-sandbox

  (注:正常情况下google是不能用root用户启动的,修改此处之后可使用root用户启动)

  检查/usr/bin目录下是否有google-chrome文件,如果没有,需要创建链接,执行命令 ln /opt/google/chrome/google-chrome/usr/bin/google-chrome

  (注:Prerender在Linux环境默认的谷歌浏览器位置/usr/bin/google-chrome)

2、安装Node.js环境

  下载nodejs地址 https://nodejs.org/en/download/

  将下载的node-v12.16.1-linux-x64.tar.xz文件上传到Linux服务器/usr/local目录

  解压命令 tar –xvf node-v12.16.1-linux-x64.tar.xz

  修改文件夹名称 mv /usr/local/node-v12.16.1-linux-x64 /usr/local/

检查nodejs是否安装成功 node –v

  安装淘宝镜像cnpm npm install-g cnpm --registry=https://registry.npm.taobao.org

  将/usr/local/nodejs/bin目录下的3个文件创建连接到/usr/local/bin/目录,如创建cnpm连接 ln -s /usr/local/nodejs/bin/cnpm /usr/local/bin/

3、安装Prerender 服务

  下载Prerender git clone https://github.com/prerender/prerender.git

  若没有安装git服务,可手动从Github下载再上传到/mnt文件夹下,再解压到当前目录下

  安装依赖包 cnpm install

  启动服务 node server.js

  (注:以守护进程方式启动服务 nohup nodeserver.js > ../logs/prerender.log 2>&1 &,避免ssh对话窗口关闭导致服务关闭)

三、SEO优化

1、Nginx配置

server {
listen 80;
server_name blog.ccyws.cn;
set$prerender_url 'http://127.0.0.1:3000';
location/ {
set $prerender 0;
if ($http_user_agent ~*"baiduspider|Googlebot|360Spider|Bingbot|Sogou Spider|Yahoo! SlurpChina|Yahoo! Slurp|twitterbot|facebookexternalhit|rogerbot|embedly|quora linkpreview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator") {
set $prerender 1;
}
if ($prerender = 1) {
proxy_pass $prerender_url;
rewrite ^(.*)$ /http://$host$1break;
}
root /mnt/blog/blog;
index index.html;
try_files $uri $uri/ /index.html;
}
}

 重启Nginx nginx –s reload

2、验证SEO优化

curl --header "User-agent:Bingbot" http://blog.ccyws.cn

做SEO优化后抓取首页

Prerender输出日志

Nginx输出日志

前后端分离项目采用Prerender的SEO优化流程的更多相关文章

  1. 前端后端分离,怎么解决SEO优化的问题呢?

    对于90%以上的互联网公司来说,前后端分离是必须要做的.目前接手的公司的一个工程,后端是PHP,用的smarty模板,开发效率和之前公司的完全分离相比,确实低不少,一方面需要前端会PHP,另一方面沟通 ...

  2. 前后端分离下的CAS跨域流程分析

    写在最前 前后端分离其实有两类: 开发阶段使用dev-server,生产阶段是打包成静态文件整个放入后端项目中. 开发阶段使用dev-server,生产阶段是打包成静态文件放入单独的静态资源服务器中, ...

  3. 分享我在前后端分离项目中Gitlab-CI的经验

    长话短说,今天分享我为前后端分离项目搭建Gitlab CI/CD流程的一些额外经验. Before Gitlab-ci是Gitlab提供的CI/CD特性,结合Gitlab简单友好的配置界面,能愉悦的在 ...

  4. 一行代码实现Vue微信支付,无需引用wexin-sdk库,前后端分离HTML微信支付,无需引用任何库

    前后端分离项目实现微信支付的流程: 1:用户点击支付 2:请求服务端获取支付参数 3:客户端通过JS调起微信支付(微信打开的网页) * 本文主要解决的是第3步,视为前两步已经完成,能正确拿到支付参数, ...

  5. (转)也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

    原文链接:http://ued.taobao.org/blog/2014/04/full-stack-development-with-nodejs/ 随着不同终端(pad/mobile/pc)的兴起 ...

  6. 也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

    前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图 ...

  7. 浅谈前后端分离与实践 之 nodejs 中间层服务(二)

    一.背景 书接上文,浅谈前后端分离与实践(一) 我们用mock服务器搭建起来了自己的前端数据模拟服务,前后端开发过程中只需定义好接口规范,便可以相互进行各自的开发任务.联调的时候,按照之前定义的开发规 ...

  8. dotnetcore vue+elementUI 前后端分离架二(后端篇)

    前言 最近几年前后端分离架构大行其道,而且各种框架也是层出不穷.本文通过dotnetcore +vue 来介绍 前后端分离架构实战. 涉及的技术栈 服务端技术 mysql 本项目使用mysql 作为持 ...

  9. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)

    缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...

随机推荐

  1. MSSS攝影大賽計劃書(第三版)

    比賽內容:對香港的城市風景以及自然風光的攝影 預期成果: 提升同學對香港的認識,鼓勵學生走出大學學園去瞭解香港,同時豐富會員的課餘活動,培養同學的興趣愛好 比賽時間:4月1-15日 最後作品提交時間: ...

  2. FPGA底层的时钟布线以及内部layout

    https://wenku.baidu.com/view/441549fef111f18582d05a70.html 全局时钟是最简单的最可预测的时钟,时钟方案:有专用的时钟输入(提供最短的始终输出延 ...

  3. JavaScript秒转换成天-小时-分钟-秒

    根据时间秒转换成天-小时-分钟-秒 // 秒转换成day.hour.minutes.seconds formatSecond(second: number) { const days = Math.f ...

  4. Mysql的分页查询语句的性能分析

    MySql分页sql语句,如果和MSSQL的TOP语法相比,那么MySQL的LIMIT语法要显得优雅了许多.使用它来分页是再自然不过的事情了. 1.1最基本的分页方式: 在中小数据量的情况下,这样的S ...

  5. FastJson的学习之JSON互相转Map集合,List集合,JavaBean

    https://blog.csdn.net/weixin_36910300/article/details/79182120 创建两个实体类 一个是部门类,一个是部门员工类 部门员工类 public ...

  6. 分布式文件系统与HDFS

    HDFS,它是一个虚拟文件系统,用于存储文件,通过目录树来定位文件:其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色. HDFS 的设计适合一次写入,多次读出的场景,且不 ...

  7. Ionic3学习笔记(十)实现夜间模式功能

    本文为原创文章,转载请标明出处 目录 创建主题样式 导入 variables.scss 创建 provider 创建 page 在 App 入口处应用主题 效果图 1. 创建主题样式 在 ./src/ ...

  8. Apache JMeter--1基础介绍

    一.JMeter 介绍 近期公司要做jmeter调研,将性能测试推广到全部测试组,便一边学习一边做记录. Apache JMeter是100%纯JAVA桌面应用程序,是一款优秀的开源性能测试工具,被设 ...

  9. Design Patterns in Android

    对日常在 Android 中实用设计模式进行一下梳理和总结,文中参考了一些网站和大佬的博客,如 MichaelX(xiong_it) .菜鸟教程.四月葡萄.IAM四十二等,在这里注明下~另外强烈推荐图 ...

  10. Java2变量和运算符

    课后作业:[必做题] 1√AB互换 已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序.(知识点:变量和运算符综合应用) [必做题] package com.two; public clas ...