vue项目利用预渲染处理seo

写在前面

什么是SEO?

SEO是英文 Search Engine Optimization 的缩写,中文意思“搜索引擎优化”。SEO是指在了解搜索引擎自然排名机制的基础上,对网站进行内部及外部的调整优化,改进网站在搜索引擎中的关键词自然排名,从而获得更多流量,最终达成品牌建设或者产品销售的目的。

SEO的目的?

提升搜索引擎爬虫覆盖率
提升平台知名度

爬虫是什么

以百度爬虫为例

1、发现网站:百度爬虫每天都会在各个网站上爬,抓取无数的网站与页面,进行评估与审核,优质的内容就会被收录。一个新网站一般都需要一周左右才会被爬虫发现,只要坚持不断更新网站,内容优质,一定会被发现的。
2、抓取网站:百度爬虫一般是先根据预先设定的初始网页的URL开始,然后按照一定的规则爬取网页。爬虫顺着网页中的各种链接,从一个页面爬到另一个页面,通过链接分析连续爬行访问,抓取更多的页面。被抓取的网页就是百度快照。
3、保存网站:百度爬虫的喜好跟我们人类的喜好是一样的,喜欢新鲜的、独一无二的东西。如果网站经常更新,内容质量非常高,那么爬虫就喜欢待在这里,顺着链接来回爬,欣赏这独一无二的风景,并且会保存下来。如果网站的内容都是抄袭来的,或其他网站上早就有了,爬虫就认为是垃圾内容,便会离开网站。
4、分析网站:百度爬虫抓取到网站之后,要提取关键词,建立索引库和索引,同时还要分析内容是否重复,判断网页的类型,分析超链接,计算网站的重要程度等大量的工作,分析完毕之后,就能提供检索服务。
5、参与网站:当爬虫认为网站的内容符合它的喜好了,通过一系列的计算工作之后,就被收录起来,当用户输入关键词并进行搜索的时候,就能从搜索引擎中找到该关键词相关的网站,从而被用户查看到。
如上所说,爬虫会在访问url时对其资源进行一个收集操作,url或者域名指向资源也就是能被爬虫爬到的内容。

Vue项目如何支持SEO?

在探索如何支持SEO之前,我们先了解一下为什么VUE项目不支持或很难支持SEO

我们在使用vue框架时,默认构建的是SPA项目(单页面应用项目),单页面应用项目指的是在最终构建的资源包中,只存在一个html文件(也就是dist中的index.html)文件。
SPA项目对于SEO不友好的理由也是在此,因为只有一个html资源,并且body内容只有

<div id="app"></div>

一个标签。

<!DOCTYPE html>
<html lang=""><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width,initial-scale=1.0" /><link rel="icon" href="<%= BASE_URL %>favicon.ico" /><title></title></head><body><div id="app"></div></body>
</html>

当你通过浏览器的【查看源代码】时(不是检查),不管你在任何页面,内容也只会有上面的几句代码,所以爬虫也不会从你的源代码资源中获取到你通过框架动态生成的dom信息。
了解了为什么,就能有对应的解决方案,恰巧官方都有提供。
在官方提供的方案如下:

1、SSR服务端渲染

什么是服务端渲染?

2、预渲染处理

如果你调研服务器端渲染 (SSR) 只是用来改善少数营销页面(例如 /, /about, /contact 等)的 SEO,那么你可能需要预渲染。无需使用 web 服务器实时动态编译 HTML,而是使用预渲染方式,在构建时 (build time) 简单地生成针对特定路由的静态 HTML 文件。优点是设置预渲染更简单,并可以将你的前端作为一个完全静态的站点。
如官方文档所描述,当你的项目只需要少许的页面来支持SEO,那么完全不许用SSR来构建动态html项目,官方建议可以通过预渲染来对特定路由生成一个静态html文件以支持爬虫SEO,这种做法更简单,并且在已经构建好的一个项目上可以上手即用完成需求。

开始代码

第一步

如果你使用 webpack,你可以使用 prerender-spa-plugin 轻松地添加预渲染。它已经被 Vue 应用程序广泛测试 - 事实上,作者是 Vue 核心团队的成员

使用官方推荐的预渲染插件prerender-spa-plugin

npm install prerender-spa-plugin --save

在vue.config.js中

const PrerenderSPAPlugin = require("prerender-spa-plugin");
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
const prerenderRoute = [  // 这里是需要生成独立html文件的路由地址'/',"/setting","/account"
];
module.exports={configureWebpack: (config) => {config.entry.app = ["./src/main.js"];if (process.env.NODE_ENV !== "production") return; // 这里是判断是否为生产环境,此操作只需要在打包时配置,本地开发时不建议开启,因为会进入浏览器预渲染生成影响正常项目开发。return {plugins: [new PrerenderSPAPlugin({staticDir: path.join(__dirname, "dist"),routes: [...prerenderRoute],renderer: new Renderer({inject: {foo: "bar",},headless: false,renderAfterDocumentEvent: "render-event",}),}),],};},
}

第二步
在main.js入口文件中加入mouted事件。这里的render-event与上方的同名

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

第三步

调整路由模式为history

const router = new VueRouter({mode: 'history',routes,base:'/',
})

因为使用了history路由模式,也需要在服务器配置对应的路由重写,保证其他页面刷新后不丢失提示404。

最后

build打包

$ npm run build

查看dist目录,会发现打包后的dist中多了2个我们路由对应的文件夹。

进去后是一个单独的html文件

我们打开这个文件可以看到

页面内容已经跟dist/index.html不同,并且是该页面的元素代码。

完成

特别注意

prerender-spa-plugin并不支持对 about/:userId这样的动态路由预渲染

更多SEO

我们还可以引入

vue-meta-info

库来动态修改对应页面的头部meta标签

$ npm run build

npm install vue-meta-info --save

在main.js中全局引入

import MetaInfo from 'vue-meta-info';
Vue.use(MetaInfo);

在需要自定义的页面组件中使用

<template>...
</template><script>export default {metaInfo: {title: '官网首页',meta: [{ name:'viewport', content:'balbalabalabalaba'}]},}
</script>

最后

通过vue-meta-info搭配prerender-spa-plugin可以让一个SPA项目也能简单支持seo,不过局限性还是存在,所以如果需要有良好的seo效果,最好还是使用服务端渲染,现在市面上已经有很成熟的SSR框架啦,或者手撸原生。

vue项目利用预渲染prerender-spa-plugin处理seo --viga相关推荐

  1. vue项目使用预渲染 进行seo优化

    vue项目使用预渲染 进行seo优化 vue进行seo优化的两个方法 1.预渲染*** 针对项目其中几个页面的seo,标题不能通过接口数据动态渲染 情况使用 使用以下两个插件进行预渲染seo优化: n ...

  2. vue项目中预览pdf文件

    一.利用浏览器自带的预览pdf // [pdfUrl] 获取pdf地址 eg:http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pl ...

  3. 修改vue项目到服务器端渲染,现有vue-cli3搭建的vue项目改ssr服务器渲染

    项目简介 vue+node+koa2 安装ssr依赖 npm install vue-server-renderer webpack-node-externals cross-env --save-d ...

  4. vue项目转换服务器端渲染,vue-server-renderer实现vue项目改造服务端渲染

    这是一篇教程,从创建项目到改造项目 vue-cli创建一个项目 在放你做demo的地方,创建一个项目 vue create vue-ssr // 如果你安装了vue-cli4,选择vue2的版本,以下 ...

  5. Vue项目利用 i8n 实现国际化

    Vue项目实现国际化 一:自己配置 i18n 完成国际化 1.创建项目,在项目中安装 vue-i18n vue cerate vue_i18nyarn add vue-i18n 2.在main.js中 ...

  6. vue项目利用uuid生成唯一随机字符串判定临时游客

    我们的项目上线后,除了给用户提供登录注册后,使用该网页功能外,还需要提供临时游客身份,除了进行独立数据的存储,还有给用户拥有临时用该网页一些功能的体验,打游戏的童鞋应该知道,有些游戏会提供临时游客身份 ...

  7. vue项目利用Hbuilder打包成APP流程,以及遇到的坑

    目录 1.打包项目 1.1打包的app出现白屏. 1.2点击页面跳转不了,报 Loading chunk 2 failed. 等错误. 1.3.点手机物理按钮,直接退出程序. 2.Hbuilder发布 ...

  8. vue项目利用cesium框架加载倾斜摄影OSGB三维数据(详细)

    前言:OSGB格式无法直接使用cesium渲染,需要使用工具转换成3DTile格式才能使用 个人使用:osg2cesiumApp工具转换 工具下载地址:osg2cesiumApp.zip-Web开发文 ...

  9. vue项目 使用svg渲染地图 并添加点击事件,动态改变背景颜色

    需求: ui给了一张地图的svg,需要前端渲染出来并添加对应的点击事件,选中区域,背景颜色需要改变 实现思路: 1.拿到需要渲染的 svg图片,把其中path的值赋值过来,所有数据一起组成一个新的js ...

最新文章

  1. 您遵循过这些Jenkins优秀实践吗?
  2. 为什么Intel Realsense D435深度摄像头在基于深度的水平方向障碍物检测(避障)方案中,摄像头不宜安装太高?
  3. java 继承多态的一些理解和不理解
  4. 遗传算法 差分进化算法 粒子群优化算法区别
  5. python中index方法详解_Python中的index()方法使用教程
  6. 125 Valid Palindrome
  7. oracle显示更新条数的函数,ORACLE学习笔记-添加更新数据函数篇
  8. c语言不用switch做计算器,求助这个题目~不用switch语句用多重if 或者嵌套if的做法...
  9. MathType公式编辑器的下载安装及导入Word
  10. 第一次安装和接触RubyonRails
  11. 尚学堂马士兵SSH笔记下载
  12. 使用 RuPengGame游戏引擎包 建立游戏窗体 如鹏游戏引擎包下载地址 Thread Runnable 卖票实例...
  13. 上市商业银行手机银行App月活增长及应用对标分析
  14. web页面:浏览器操作
  15. linux环境下查看进程,Linux下查看进程(程序)启动时的环境变量
  16. Bilibili的元宇宙布局
  17. 液晶屏背光板的分类及知识点
  18. 使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云
  19. 在QQ聊天中可以发的代码和说说代码(仅支持手机)
  20. 品质部新进人员培训资料

热门文章

  1. 共享打印机出现0x00000569代码解决方案(亲测有效)
  2. 从手机到平板,华为凭啥总能超越苹果?
  3. 学习韩顺平老师java io 笔记整理
  4. 做销售的100个《绝招》
  5. iconfont通过font class引入显示小方块bug
  6. 台达触摸屏与多台变频器485通信 温控器通信 不用通过PLC,直接由触摸屏的com口进行通信控制
  7. LeetCode !! 69 plusOne
  8. 系统计划任务服务器,计划任务
  9. 致远项目管理SPM系统之质量检查
  10. 2022N1叉车司机考试题库模拟考试平台操作