无需改动代码让 SPA 项目支持 SEO

简介⌗
rendora 是基于 Go 开发的一个类似代理服务器一样的 SSR 解决方案,可以在无需修改现有项目代码的情况下,实现对 Vue、React、Angular 等 SPA 项目的服务端渲染。
主要功能:
- 配置简单
- 无需修改原有项目
- 支持 Redis 缓存
- 提供 REST ful API
- 支持 Prometheus 监控
- 支持任意路由页面的渲染
- 不受限于前端框架与所使用到的技术
- 不渲染无效资源(如图片、字体和 CSS),以加快 DOM 渲染
- 搜索引擎爬虫和普通用户获取到的数据一致(得益于 Chrome API)
其实 rendora 在架构中的位置是可以自行定义的,它既可以放在最前端,也可以放在 Nginx 的后面,等于是在 Nginx 层做决策,来判断请求是来自用户还是爬虫。
开始部署⌗
运行无头浏览器⌗
必要配置⌗
注意: target.url 是当请求被允许通过 Chrome headless 渲染时,所转发的地址,backend.url 用来定义当请求未被允许通过 Chrome headless 渲染时,将请求转发到该地址。
配置说明⌗
安装⌗
Docker⌗
注意:目前通过 Docker 搭建的 Rendora 服务无法连接,在 Github 上已经有人提了 Issue
源码⌗
场景分析⌗
对于很多人来说,因为没有形成概念,理解 target 和 backend 的区别有点困难,我当初也是非常困惑,通过多次测试明白了两个设置的作用。下面模拟一个场景,通过场景来解释配置的作用。
例如上面的配置中,target.url 指向的是内部的 SPA 项目地址,也就是上图中的 SPA 模块,backend.url 指向的就是通过 Nginx 访问的。
思考⌗
通过架构图可以发现,其实原理非常简单,就是通过一层类似中间件的服务,让他来调用 Chrome 的 API,让 Chrome 渲染页面然后返回给爬虫。那么我们也可以通过 Nginx 来搭配 Lua 来实现同样的功能。
I hope this is helpful, Happy hacking…