文章目录

  • 前言
  • 目标
  • 运行流程图
  • 安装中间件
  • 安装Prerender服务
  • 安装Chrome
  • 启动Prerender.io服务
  • 测试
    • If you use html5 push state (recommended):
    • If you use the hashbang (#!):
    • 通过curl命令测试

前言

使用Angular,Vue,React进行单页网站开发,用户浏览时浏览器动态解析JS,呈现出最终的页面,用户体验比较好,网站性能也提高不少。

但网络爬虫并不会动态解析Js,访问所有URL得到的只会是项目入口文件中的代码,不能得到具体的内容,也就无法做网站SEO。

使用Prerender.io做网站预渲染,可以将网站页面渲染之后再返回给网络爬虫,间接完成网页的解析。
Prerender相较于其他的解决方案,配置相对要简单一些,不用修改项目源码,代码零侵入,是一个不错的解决方案。

目标

搭建基于Centos 7 和 Nginx 环境的Prerender渲染服务,完成Angular项目中网页的预渲染

运行流程图

安装中间件

  1. 首先注册登录 Prerender.io,并且获得个人token
  2. 根据开发文档,配置对应的中间件,如Nginx,Apache等。
  3. 配置Nginx中间件,参考配置如下:
server {listen 80;server_name example.com;root   /path/to/your/root;index  index.html;location / {try_files $uri @prerender;}location @prerender {# 将 YOUR_TOKEN替换为你的个人tokenproxy_set_header X-Prerender-Token YOUR_TOKEN;set $prerender 0;if ($http_user_agent ~* "googlebot|bingbot|yandex|baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator") {set $prerender 1;}if ($args ~ "_escaped_fragment_") {set $prerender 1;}if ($http_user_agent ~ "Prerender") {set $prerender 0;}if ($uri ~* "\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent|ttf|woff|svg|eot)") {set $prerender 0;}#resolve using Google's DNS server to force DNS resolution and prevent caching of IPsresolver 8.8.8.8;if ($prerender = 1) {# 后续将service.prerender.io替换为自己的prerender服务,如127.0.0.1:3000set $prerender "service.prerender.io";rewrite .* /$scheme://$host$request_uri? break;proxy_pass http://$prerender;}if ($prerender = 0) {rewrite .* /index.html break;}}
}

参考配置:https://gist.github.com/thoop/8165802
5. 检测nginx配置,并重启nginx

nginx -t
service nginx restart
  1. 中间件安装完成

安装Prerender服务

  1. 在服务器上安装Node环境
  2. 下载Prerender服务
git clone https://github.com/prerender/prerender.git

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

cd /usr/prerender# Phantomjs 官方的下载地址会超时,此处重新指定其下载地址为淘宝镜像
export PHANTOMJS_CDNURL=https://npm.taobao.org/mirrors/phantomjsnpm install

文件结构如下:

4. 运行server.js

# 启动Server.js, 默认监听3000端口
node server.js

此时,如果预先没有安装过Chrome,则会启动失败

提示启动Chrome失败,未检测到Chrome,此时安装Chrome就好了

为什么要安装Chrome呢,因为Prerender并不负责真正的网页解析,Prerender只负责解析前后的处理,实际是由Chrome负责网页的解析。

安装Chrome

  1. 配置yum源
    因为国内无法访问Google,所以需要自己配置yum源,在目录 /etc/yum.repos.d/ 下新建google-chrome.repo文件
cd /ect/yum.repos.d/touch google-chrome.repo
  1. 写入内容
vi 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
  1. 安装运行
# 国内推荐
yum -y install google-chrome-stable --nogpgcheck
  1. 安装路径
    安装成功后,Chrome的安装路径应该是
    /opt/google/chrome

默认情况下,root用户不能直接运行chrome,所以可以新建另一个用户如other来运行

cd /opt/google/chromesu other./chrome
  1. Chrome安装完成

启动Prerender.io服务

  1. 已other用户再次运行server.js
su othercd /usr/prerendernode ./server.js

此时应该是可以成功启动的,并且可以看到该服务监听3000端口

启动结果:

2. 修改nginx配置

if ($prerender = 1) {# 修改如下:# set $prerender "service.prerender.io";set $prerender "127.0.0.1:3000";rewrite .* /$scheme://$host$request_uri? break;proxy_pass http://$prerender;}
  1. 保存重启Nginx
  2. 再次启动Prerender服务
nohup node ./server.js &

其中nohup命令是将该服务加入守护进程,避免ssh对话窗口关闭导致服务关闭,参考Linux设置Jar后台运行

  1. 如果开启了防火墙,需要将3000端口加入防火墙
firewall-cmd —zone=public —add-port=3000/tcp —permanent# 重启防火墙
firewall-cmd —reload
  1. 至此,Prerender服务已经安装并启动成功
  2. 查看端口

    Node,Google-Chrome,Nginx服务都应在后台运行

测试

If you use html5 push state (recommended):
Just add this meta tag to the <head> of your pages<meta name="fragment" content="!">
If your URLs look like this:
http://www.example.com/user/1 Then access your URLs like this:
http://www.example.com/user/1?_escaped_fragment_=
If you use the hashbang (#!):
If your URLs look like this:
http://www.example.com/#!/user/1 Then access your URLs like this:
http://www.example.com/?_escaped_fragment_=/user/1
通过curl命令测试
curl http://www.example.com/user/1?_escaped_fragment_=

在配置prerender服务前,以上返回的只是index.html的内容, 如果配置成功则会返回解析后的内容。

使用Prerender.io进行网站预渲染相关推荐

  1. 使用Prerender.io进行网站预加载

    我在自己的项目中是采用的前后端分离的技术,前端用的VUE开发,后端是JAVA开发,tomcat部署,nginx转发,但是VUE开发的项目缺点就是不利于SEO,所以针对SEO做了预加载的操作. 决定采用 ...

  2. prerender ajax,Vue Prerender.io 预渲染seo优化

    前言 目前 Vue单页面应用在前端界混的风生水起,它的开发思想使得我们能真正做到前后端分离.解耦.单页面应用使用浏览器动态解析JS,呈现出最终的页面,用户体验比较好,网站性能也提高不少.但网络爬虫并不 ...

  3. Prerender.io 配置过程 给你的VUE单页面网站增加一点seo吧~

    prerenderio 的使用和配置 作为一个网站,要想给别人搜索到,那么就要依靠搜索引擎的爬虫.那么我们如何让搜索引擎爬虫收录网站的信息呢?那就需要网站确实有信息: meta标签的关键词 meta的 ...

  4. Prerender预渲染优化SEO

    单页面应用的主要内容都依赖于JS的执行,当其首页面下载下来的时候,其实不是完整的页面,而是HTML + JS文件,浏览器提供执行环境于是页面被渲染了出来.用户在访问的时候体验会很好,但是对于搜索引擎的 ...

  5. 预渲染的方式---prerender(解决SEO,首屏问题)

    由于页面较少,且预渲染相对于SSR比较简单,预渲染可以极大的提高网页访问速度.而且配合一些meat插件,完全可以满足SEO需求.     Prerender服务需要有NodeJs环境支持,如果之前服务 ...

  6. prerender html5,HTML5 VUE单页应用 SEO 优化之 预渲染(prerender-spa-plugin)

    前言:当前 SPA 架构流行的趋势如日中天,前后端分离的业务模式已经成为互联网开发的主流方式,但是 单页面 应用始终存在一个痛点,那就是 SEO, 对于那些需要推广,希望能在百度搜索时排名靠前的网站而 ...

  7. vue使用prerender预渲染配合vue-meta实现单页面实现SEO优化

    公司项目在已在开发完成的情况下通知需要做SEO优化.因为项目使用的是vue做的单页面应用,顿时人都不好了,只好网上搜罗出来一些配置(其实是另一个带我的老大哥他做的,但是他要走了,工作交接给我, 我需要 ...

  8. pcie预取 不预取_浏览器资源提示预取,预连接和预渲染

    pcie预取 不预取 It used to be that if we wanted to optimize our frontend assets, we would concatenate, mi ...

  9. 如何使用prerender-spa-plugin插件对页面进行预渲染

    本文主要是介绍使用prerender-spa-plugin插件在针对前端代码进行预渲染. 预渲染(SSG)和服务端(SSR)渲染有一定的区别,大家想要了解的话可以看:https://segmentfa ...

最新文章

  1. 在Intellij上面导入项目 AOP示例项目 AspectJ学习 Spring AoP学习
  2. error_reporting()
  3. 区块链BaaS云服务(21)腾讯CCGP“跨链服务”
  4. 系统开发小结【未完待续】
  5. C#中GDI绘制高质量平滑图形实例
  6. 程序员面试金典 - 面试题 16.11. 跳水板(数学)
  7. java 课后习题 键入日期输入星期几
  8. PHP基础语法的学习
  9. python用函数判断一个数是否为素数,python分享是否为素数 python输入并判断一个数是否为素数...
  10. 搭建开源物联网平台教程
  11. cpp头文件方法大全
  12. altium 交叉线_关于各个设备,用直通线还是交叉线连接的详解
  13. java求两个非零正整数的最大公约数和最小公倍数
  14. 前端框架VUE学习纪要
  15. 推荐 :这里有一份价值 7680 元的学习资料,要免费送给你
  16. PV016R1K1T1NMMC派克变量柱塞泵
  17. matlab dlnode,Matlab 绘制三维立体图(以地质异常体为例)
  18. Python文件的打开和关闭
  19. 任何物体都在以光速运动,你能理解这一认识吗?
  20. 如何构建全球实时音视频云及其海外网络传输优化

热门文章

  1. 远程小工具PuTTY(阿里云镜像站地址分享)
  2. Hive复杂数据类型使用
  3. 最强大脑!这 7 款开源思维导图工具真的很神奇
  4. Android 屏幕录屏,然后转为GIF图
  5. unix-shell-4
  6. WI-FIWI-FI Direct 简介及实现
  7. JavaScript Practices
  8. 万元华为新旗舰P40 Pro+发布:后置5摄100倍变焦,AI拍照自动消除路人,饭圈可以告别单反了...
  9. 蓝桥杯系统:蓝桥杯练习A组省赛/决赛【PREV275-241】
  10. Python英文单词排序