「技术干货」SEO解决方案-离线预渲染
gaoyangw 2024-11-20 14:51 25 浏览 0 评论
作者/冯雨森
概述
优化SEO将改善网站在搜索引擎结果中的排名,吸引更多的用户访问网站,提高网站的访问量,从而提升品牌效应。
搜索引擎并不会执行JavaScript文件,因此只有将数据在html文件中静态化才会被搜索引擎检索到。
主流SEO解决方案
1. SSR服务端渲染
如VUE-SSR,页面在服务端渲染完成后返回给客户端。
- 优点:SEO效果好,首屏渲染快。
- 缺点:开发成本高,SPA应用无法快速迁移为SSR。页面由服务端渲染,服务器开销大。
2. Nuxt
结合了SPA和SSR,Nuxt在服务端运行一个Nuxt服务,客户端发起请求后,会先在服务端运行页面的Nuxt的asyncData和fetch钩子,通常在这两个钩子里初始化页面数据请求,Nuxt会在钩子执行完毕并渲染完数据后返回页面。相比SSR,Nuxt的开发方式和SPA大部分都相同,并且开发会更加方便,例如路由会直接按照层级结构自动生成,不需要自己写路由,开发成本相比SSR低了很多,迁移成本也相对较低。
- 优点:开发成本和SPA相似,SPA应用迁移成本较低,SEO效果好,可以选择打包成SPA还是SSR,拥有SSR的大部分优点。
- 缺点:服务器开销大,依然是在服务端进行页面渲染,并且因为Nuxt服务可能与后端服务不在一起,有可能因为请求网络延迟导致首屏速度变慢。目前的坑也比较多,踩坑也是个不轻松的过程。
3. 静态 html
最原始的方法,对于静态数据来说,SEO不是问题。
- 优点:页面小,不会引入 vue/react/angular 等框架,大幅减少js的体积,静态数据SEO效果好,首屏渲染快。
- 缺点:开发成本高,维护成本高,并且接口数据是无法静态化的,只对无接口数据需求的纯静态站点有优势。
4. 预渲染
可直接在SPA应用基础上增加预渲染插件即可实现预渲染,例如:prerender-spa-plugin。预渲染是在本地构建时,将指定路由的页面全部渲染出一份html,在客户端请求页面时先请求这份html。
- 优点:SPA应用成本最低的优化SEO方案,只需要添加插件和配置,首屏渲染速度快,SEO效果好。
- 缺点:因为构建渲染页面时,本地环境为localhost,所有与window.location相关代码都可能会出问题,这会导致很多链接错误问题,虽然可以注入变量来解决,但是多环境构建依然可能遇到问题,并且要做很多额外的处理。prerender-spa-plugin是基于puppeteer的,支持接口拉取,但是渲染发生在构建阶段,并且是本地环境,会有很多其他问题,例如每次接口数据修改还需要重新构建,并且渲染页面时一旦有接口报错导致页面渲染失败,也将会是个麻烦的事。我个人认为预渲染还是更适合纯静态类spa站点的静态化。
离线预渲染
离线预渲染与预渲染类似,但是解决了预渲染的一些问题,离线预渲染的使用场景仍具有很大的局限性,但是在特定的场景下,却是非常合适的方案。
LStack的官网www.lstack.com就使用了离线预渲染作为SEO解决方案,我们先看一下对于官网的需求:
1. SEO优化要好
2. 数据要使用接口数据
3. 不能使用服务端渲染(页面很少变化,使用服务端渲染浪费服务器资源)
SEO的要求,首先就可以排除SPA了,数据要使用接口数据,那原生html这种无法静态化接口数据的方案也无法满足这个要求,不能使用服务端渲染,又再次排除了服务端渲染和Nuxt。而预渲染又存在诸多问题,事实上LStack官网重构前正是使用的预渲染方案,只对静态数据做了静态化,但是仍对代码有侵入性,并且遇到了一些本地环境渲染页面而导致的问题,处理这些问题,需要在写代码时考虑这种情况的处理。在这种情况下,离线预渲染就是最合适的解决方案了。
优点
- 改造简单,对源代码0侵入,不需要任何改造,spa不需要任何修改就可以仅搭建一个爬虫服务来实现SEO优化。
- 可以对接口数据静态化。
- 不占用服务器资源,渲染一次,便可以重复使用,直到下次数据变化重新渲染。
- 加速首屏渲染,首屏效果和服务端渲染一致。
- 可以部署到cdn/oss。
缺点
- 仅适用于数据改变频率低,时效性低的站点,例如官网,文案也许一个月变更一次。
- 开发成本虽然低,但是搭建维护坑比较多,需要考虑的点较多。
- 和预渲染一样,因为js拉取完毕后会以spa模式渲染页面,因此js加载完成后页面会闪动一次,替换掉静态html内的内容。
原理
离线预渲染使用爬虫爬取页面,生成静态html,从而实现动态数据的静态化。
爬虫使用puppeteer,puppeteer是nodejs的一个爬虫框架,提供了对headless chrome的高级操控api,headless chrome为无界面chrome。使用这种方式渲染页面,完全模拟了用户的真实访问环境。
- 爬虫生成的静态html,只是对spa原本没有数据的index.html填充了数据,js拉取回来后,依然会执行js,接口依然会触发,行为和spa没有区别,只是首屏从空白页面变为了填充了数据的页面。
- 涉及到登录等有状态的部分,因为爬虫渲染的环境并没有用户登录信息,所以首页面总是未登录状态,js加载完毕后,才会判断登录状态。
方案
项目构建完毕后,将构建完成的源代码上传至OSS,然后拉取源文件到容器中,Nginx代理此项目,然后Puppeteer访问Nginx,对每个路由依次访问并渲染页面,按照路由结构安排文件目录结构,然后打包上传至oss。上传完毕后拉取渲染成功的页面,覆盖到容器中。
踩坑
1. 为了在只用一个Nginx服务的情况下,保证无论页面是否经过爬虫处理都要可以正常访问,并且数据也要是最新的,可以参考这样的规则:每一级路由都有对应的文件夹,此路由页面为此文件夹下的index.html。所有页面路由默认匹配/[url]/index.html,手动拼接/index.html后缀,这样爬虫处理过的页面都可以被正常访问到,而如果此时后端数据更新,要重新渲染页面,因为爬虫会等到页面完全渲染完毕才会储存页面,因此此时最新数据已经通过接口返回了,不必担心数据依然是旧的。而当页面没有被爬虫处理过时,页面只有一个index.html,其他路由都会404,此时当找不到对应文件时,不返回404页面,而是返回index.html,前端js加载完毕后,自动判断路由来跳转对应的页面,如果路由页面不存在,也是前端跳转404,此时的行为完全是spa行为,只有首屏会拉取html,其余页面跳转都是spa行为。
location / {
root /usr/share/nginx/html/website/website;
index index.html;
gzip_static on;
try_files $uri $uri/ /$1/index.html;
}
2. linux环境下,puppeteer安装会报错,是因为chrome安装报错。可以手动安装chrome,然后puppeteer启动添加参数。
const browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-dev-shm-usage']
});
3. 内网可能会遇到dns问题,爬虫爬到了公网上,导致页面爬错,配置好dns即可。
4. SSL证书错误,只需要在启动参数里添加ignoreHTTPSErrors: true,忽略SSL错误。
5. linux下中文乱码问题,安装中文编码即可。
6. 每一套源码应该有一份配套的html页面,如果代码做了修改,webpack打包出的js文件名也会变化,如果继续使用旧的html,则会导致js拉取到错误的代码,为什么不是404而是200呢?因为Nginx配置中,404的时候,默认转发index.html,所以这种情况下js并不会404,而是js里面都是html代码。而如果这样的事情发生了,那这个页面无论是用户还是爬虫,都只能访问到静态的html了,只能重新拉取代码,并且不要把旧的html页面覆盖进去,如果是自动化部署,脚本逻辑上就需要多做一些考虑了。
7. puppeteer是node的库,但是有基于其他语言的封装,例如java版封装为jvppeteer,但用法上可能会有区别。
LStack产品简介
面向行业应用开发商(ISV/SI)提供混合云/边缘云场景下云原生应用开发测试、交付、运维一站式服务,帮助企业采用云原生敏捷开发交付方法论,从而提高软件开发人员效率、减少运维成本,加快数字化转型,并最终实现业务创新。
-End-
相关推荐
- 想学新媒体运营去哪里学?三大优质路径助你高效入门!
-
在数字化浪潮席卷的今天,新媒体运营已成为炙手可热的职业选择。无论是企业品牌推广、个人IP打造,还是副业变现,掌握新媒体运营技能都能为你打开新机遇的大门。但面对琳琅满目的学习资源,“想学新媒体运营去哪里...
- 谷歌移动端排名和电脑端差距大?做SEO优化要选哪个?
-
“你的网站在手机和电脑上的谷歌排名差距超过20位?这可能不是偶然。自从谷歌推行‘移动优先索引’规则后,许多企业发现移动端排名突然暴跌,甚至出现PC端有排名、移动端完全搜不到的情况。移动端和PC端的流量...
- 坐姿不好也扣分?莫用数字化绑住学生手脚
-
据半月谈报道,在一款覆盖3000万学生的教育类APP“班级优化大师”中,老师可以对学生在校表现实时打分,孩子和家长可看到分数。中午不午睡扣分、坐姿不正确扣分,通过加减分公开评比,给学生排名。此外,不少...
- 从心出发,润物无声
-
工作室学员林文婷老师的班主任成长记录不记得是在哪里看到过这样的一句话:“如果说人生是一场修行,那么班主任工作就是独特的修行”。自从选择了教师这一个职业,选择了当一名班主任,我就知道自己的这一场特别修...
- 「处女座:人间优化大师,爱你才给你写说明书!」
-
正文:“处女の秘密:秩序是信仰,完美是本能!”...
- TXT文档优化大师!批量处理空白重复行,自动生成行号
-
还在被TXT文档里密密麻麻的空白行和重复行困扰?手动删除不仅费时费力,还容易出错!首助编辑高手重磅来袭,一键清除所有多余空白行,智能识别并删除重复内容,自动添加规范编号,让杂乱文档瞬间焕然一新!1.导...
- 班主任的好帮手——班级优化大师
-
我所带的班级是三年级,班主任是数学老师,她管理班级用了一个希沃白版上的软件——班级优化大师,上个学期用了一个学期,这个学期依然在用,从旁观者的角度来看,效果很明显的。平时学生在校表现会在上面打分,表现...
- 安装Windows优化大师
-
Windows优化大师是款强大的系统辅助工具,接下来我们一起安装这款软件。1、双击安装文件,即可开始安装Windows优化大师。2、弹出Windows优化大师界面;3、点击下一步按钮;4、点击...
- 使用Windows优化大师清理ActiveX
-
Windows优化大师可清理ActiveX插件,保持系统清爽。1、双击快捷键,开启Windows优化大师软件。2、弹出窗口:Windows优化大师界面已开启。3、点击系统清理选项;4、点击Ac...
- Windows优化大师的使用
-
检测、优化系统信息并清理维护系统资源时,常用工具是Windows优化大师。若要达到优化目的,需熟悉该软件。以下将通过具体步骤详细介绍如何使用优化大师进行操作。1、启动Windows优化大师,打开主界...
- 卸载Windows优化大师
-
Windows优化大师是款强大的系统辅助软件,具备系统检测、优化、清理与维护四大功能,以及多个附加工具,操作简便安全。接下来,我们对Windows优化大师进行卸载。1、打开开始菜单,进入控制面板;2...
- 2025年,B2B企业在领英linkedin上的营销新策略
-
在数字化营销飞速发展的今天,领英(LinkedIn)作为全球最大的职业社交平台,已成为B2B企业不可或缺的营销阵地。2025年,随着人工智能、短视频、个性化营销等趋势的兴起,B2B企业在领英上的营销策...
- 跨境电商独立站如何玩转全渠道营销?这份指南请收好
-
在流量红利见顶的今天,跨境电商卖家面临着一个关键问题:消费者在哪里?答案其实是——...
- 领英linkedin内容营销策略制定必备指南
-
在当今数字化的商业环境中,领英LinkedIn已经成为企业展示专业形象、拓展人脉和推动业务增长的重要平台。如果你希望在领英上实现品牌推广、客户开发或行业影响力的提升,一份精心制定的内容营销策略是必不可...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 网站建设 (107)
- 网站开发 (47)
- 网络推广哪个平台好 (47)
- 百度收录 (50)
- 搜索引擎排名优化 (49)
- 关键词优化工具 (51)
- 外贸网站建设 (56)
- seo整站优化吧 (50)
- 苏州网站建设 (59)
- 百度搜索推广 (61)
- 关键词优化公司 (51)
- 广州网站建设 (48)
- 电商网站建设 (49)
- 百度站长平台 (48)
- 网站模板 (51)
- 厦门网站建设 (52)
- 百度快照推广 (51)
- 免费网页在线客服系统 (53)
- 雷神代刷网站推广 (53)
- 手机网站建设 (53)
- 网站维护 (53)
- 网页制作教程 (66)
- 百度收录批量查询工具 (48)
- 网站服务器 (53)
- 学生个人网页制作html (56)