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

vue项目利用预渲染prerender-spa-plugin处理seo --vigavue 项目利用预渲染处理 seo 写在前面 什么是 SEO SEO 是英文 Search Engine Optimization 的缩写 中文意思 搜索引擎优化 SEO 是指在了解搜索引擎自然排名机制的基础上 对网站进行内部及外部的调整优化 改进网站在搜索引擎中的关键词自然排名

大家好,我是讯享网,很高兴认识大家。

vue项目利用预渲染处理seo

写在前面

什么是SEO?

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

SEO的目的?

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

爬虫是什么

以百度爬虫为例

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

Vue项目如何支持SEO?

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

<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、预渲染处理

开始代码

第一步

如果你使用 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", }), }), ], }; }, } 


讯享网

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框架啦,或者手撸原生。

小讯
上一篇 2025-01-16 21:18
下一篇 2025-04-08 22:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/72748.html