vue预渲染

实现SEO优化有四种方法:

1.SSR服务器渲染;
2.静态化;
3.预渲染prerender-spa-plugin;
4.使用Phantomjs针对爬虫做处理

此处只介绍第三种预渲染的方法,各种方法的利弊也不过多描述

如果只是用来改善少数营销页面(例如 /, /about, /contact 等)的 SEO,那么你可能需要预渲染。无需使用 web
服务器实时动态编译 HTML,而是使用预渲染方式,在构建时 (build time) 简单地生成针对特定路由的静态 HTML
文件。优点是设置预渲染更简单,并可以将你的前端作为一个完全静态的站点。打包出来可以看见文件,打包出文件夹/index.html,例如:about
=> about/index.html,里面有html内容。

优势:

改动小,引入个插件就完事;

不足:

无法使用动态路由;只适用少量页面的项目,页面多达几百个的情况下,打包会很很很慢;

1.下载prerender-spa-plugin

npm install --save prerender-spa-plugin

因为比较大,使用国内镜像下载比较慢,所以我试用了淘宝镜像cnpm

cnpm install --save prerender-spa-plugin

在vue.config.js里配置

const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
configureWebpack: {
	 plugins: [
  		new PrerenderSPAPlugin({
	 	// 生成文件的路径,也可以与webpakc打包的一致。
	 	// 下面这句话非常重要!!!
	 	// 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
			staticDir: path.join(__dirname,'dist'),
	  		// 对应自己的路由文件,比如a有参数,就需要写成 /a/param1。
	 		routes: ['/', '/team', '/analyst','/voter','/sponsor',],
	 		// 这个很重要,如果没有配置这段,也不会进行预编译
			renderer: new Renderer({
		         inject: {
					foo: 'bar'
		 		},
	   			headless: false,
			// 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
	 			renderAfterDocumentEvent: 'render-event',
				renderAfterTime: 10000,//超时时间
				timeout: 0,
				maxConcurrentRoutes: 20,//打包页面的最大数
				navigationParams: {
					timeout: 0
 				}
			})
		}),
 	]
}

在main.js里配置

new Vue({
  router,
  render: h => h(App),
  mounted () {
  	document.dispatchEvent(new Event('render-event'))
  }
}).$mount("#app");

打包过程中如果要生成的静态页面过多,就会报下面的错

Unable to prerender all routes!

项目上线后又遇到了新的问题(就因为是预渲染)
直接通过路由跳转的话,会先闪屏到首页一下再跳到路由页,用户体验很不好。
部分路由是没有做预渲染的,这部分路由在nginx配置的时候往往默认指向index.html比如类似下面的配置

	location / {
        try_files $uri $uri/index.html /index.html;
        #root   /static/front; #站点目录 已经配置了全局root
    }

由于对首页做了预渲染,所以index.html默认有很多内容的。
解决方案有两种:

默认根节点隐藏,合适时机再显式出来:https://blog.csdn.net/Christiano_Lee/article/details/94569119。(感觉思路可行,但是本人没有实践,后面实践后再加上评论)
新增一个空页面,路由为’/empty’,并为这个路由做预渲染,nginx配置中没有匹配的路由默认指向加载此页面。nginx配置改为

 location / {
       try_files $uri $uri/index.html /empty/index.html; # /index.html;
       #root   /static/front; #站点目录 已经配置了全局root
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值