webpack项目SEO优化——预渲染

  • 本篇文章使用场景:对于已经成型的 React SPA,使用 webpack打包 项目的 SEO 优化

1. 服务端渲染&预渲染

现在对于单页面应用的 SEO 优化分为两种,服务端渲染和预渲染。
  1. 服务端渲染
  • 将完整的 html 输出到客户端,又被认为是‘同构’或‘通用’

    优点:首次渲染快(无需等待所有js都完成下载);利于SEO,节能

    缺点:开发受限,需要处于Node.js server运行环境;更多的服务器负载(占用更大的CPU资源)

  1. 预渲染
  • 获得服务端渲染的优点

  • 对特定路由生成静态HTML文件,前端作为一个完全静态的站点

  • 无需使用web服务器实时动态编译HTML

  • 改善少数页面的SEO,可采用预渲染

  • 若网站有成百上千条路线,预编译会非常缓慢(此情况慎用

因为本篇文章的使用场景为已经成型的项目,所以采用对代码没有侵入性的预渲染方案。

2. 使用插件prerender-spa-plugin进行预渲染

安装阿里的 cnpm 工具

  1. 由于 node安装插件是从国外服务器下载,受网络影响大,速度慢且容易出现异常。而且本次使用的插件,需要安装一个大小为 144M无界面的 Chrome 浏览器。所以我们首先安装 cnpm工具。这里并不建议直接替换 npm的仓库地址改为淘宝镜像的仓库地址。因为这毕竟只是一个镜像站点,万一以后我们需要的的插件在镜像站里面没有就麻烦了。
  2. 使用阿里定制的 cnpm 命令行工具代替默认的 npm,输入下面代码进行安装:
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
  1. 检测 npm 版本,以后安装插件只需要输入cnpm install即可
cnpm -v

安装插件

# 会把X包安装到node_modules目录中 会在package.json的dependencies属性下添加X 
cnpm install prerender-spa-plugin --save
# 记得在安装完成后再次执行  
cnpm  install
  • 这里简单提一下install的参数
npm install xxx
# 会把X包安装到node_modules目录中
# 不会修改package.json
# 之后运行npm install命令时,不会自动安装X
-g
# 全局安装

-S, --save
# 会把X包安装到node_modules目录中
# 会在package.json的dependencies属性下添加X
# 之后运行npm install命令时,会自动安装X到node_modules目录中
-P, --save-prod: Package will appear in yourdependencies
#  包将出现在依赖项中。这是默认值,除非出现-D或-O

# 安装包信息将加到devDependencies(开发阶段的依赖),所以开发阶段一般使用它

-D, --save-dev: Package will appear in your devDependencies
# 包将出现在您的devDependencies中

-O, --save-optional: Package will appear in your optionalDependencies.
# 包将出现在optionalDependencies中

–no-save: Prevents saving to dependencies
# 防止保存到依赖项

-E, –save-exact 精确安装指定模块版本
# 安装包,默认会安装最新的版本

npm install jquery --save-exact 或
npm install jquery -E

使用插件

  1. webpack.prod.config.js文件中修改:
const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
  1. 在文件中的 plugins 节点添加以下内容:
plugins: [
    new PrerenderSPAPlugin({
        //代码打包目录和以前配置的目录保持一致
        staticDir: path.join(__dirname, '../dist'), 
        indexPath: path.join(__dirname, '../dist', 'index.html'), 
        //routes:要预渲染的页面访问路由
        routes: ['/', '/home', '/freeIp', '/buyMeal', '/getIp', '/getLongIp', '/recharge', '/help/check', '/company/check', '/login'],
        renderer: new Renderer({
            inject: {
            foo: 'bar'
            },
            // headless:渲染时显示浏览器窗口。对调试很有用。
            headless: false
        })
    })
]
  1. 最后按照正常流程执行打包npm run build就可以在 dist文件夹下面看见打包好的各个路由的预渲染界面

3. prerender-spa-plugin插件原理

在这里稍微提一下插件的原理吧,其实也很容易想到,百度的搜索引擎是不会像谷歌一样,爬虫在访问网站的时候会执行一下脚本,完成单页面的渲染,之后完成网站的收录。百度是不会去执行的,所以百度爬虫得到的内容就是项目里面那个空的 html 文件,所以才不会收录。

那么prerender-spa-plugin的插件呢,就会比较简单粗暴了,会在打包的时候就使用一个无头的浏览器,根据你的配置,去挨个访问你的文件,然后抓取渲染完成之后静态页面内容替换打包后的文件。这种方法对于代码没有侵入性。只是一种打包方法而已。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352