vue SEO的解决方案

news/2024/5/8 21:16:44/文章来源:https://blog.csdn.net/chy555chy/article/details/113814023

介绍

什么是 SEO

SEO(Search Engine Optimization)搜索引擎优化,是指通过对网站进行站内优化和修复(网站Web结构调整、网站内容建设、网站代码优化和编码等)和站外优化,从而提高网站的关键词排名以及公司产品的曝光度。

搜索引擎的原理

搜索引擎,又称爬虫或者蜘蛛,它在爬取和分析页面内容时,主要进行如下操作:

  1. 从 meta 标签中读取 keywords、description 的内容
  2. 根据语义化的html标签爬取和分析内容(h1-h6、strong、em等标签具有不同程度的强调意义;与整篇都是div构成的网页,SEO结果就相差甚远了)
  3. 读取a标签里的链接,通过a标签的链接再跳转到别的网站(深度优先:先跳转回头再爬取;广度优先:先爬取然后再依次跳转)

SEO 为啥对单页面应用不友好

  1. 爬虫在爬取过程中,不会去执行js,因此所有隐藏在js中的跳转或者数据都获取不到(vue通过js控制路由,然后渲染出对应页面,而搜索引擎是不会去执行页面的js的,导致搜索引擎只能收录index.html,而无法搜到其相关的子页面的内容)
  2. 浏览器加载页面时,首先会对页面进行渲染(包括 html的解析、dom树的构建、css的构建、javascript解析、布局、绘制),当解析到javascript的时候,才会去触发vue的渲染,将元素挂载到id为app的div上,这时候我们才能看到页面的内容。因此被搜索引擎收录的index页面,可能也毫无价值(因为没有任何数据)

导致的问题

  1. 单页面应用无法被SEO,会导致被搜索引擎收录的页面减少,从而导致点击量减少,影响产品曝光度
  2. 不能对不同页面设置不同的TDK(title, keywords, description),每个页面的title和meta标签都是一样的,不利于网络爬虫的爬取

解决方案

由于爬虫不会去执行js,因此如果需要对单页面应用做SEO,就需要预渲染。vue提供了两种方案解决该问题

  1. 使用 Nuxt.js 实现服务端预渲染(SSR) https://cn.vuejs.org/v2/guide/ssr.html
  2. 使用 prerender-spa-plugin插件实现 https://www.npmjs.com/package/prerender-spa-plugin

prerender-spa-plugin 较简单,但打包需要的时间长,适用于少量页面;而SSR虽然复杂,但更适用于大型应用的SEO

方案一:prerender-spa-plugin

这里用的是 vue-cli 4.5 + Vue2

使用 vue ui 进入图形界面,搜索并安装插件 vue-cli-plugin-prerender-spa

插件的作用

  1. 安装 prerender-spa-plugin,并记录到 package.json 的 devDependencies
  2. 修改 src/main.js 添加 mounted: () => document.dispatchEvent(new Event("x-app-rendered"))
  3. 自动配置 vue.config.js

在这里插入图片描述package.json
在这里插入图片描述

src/main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'Vue.config.productionTip = falsenew Vue({router,store,render: h => h(App),mounted: () => document.dispatchEvent(new Event("x-app-rendered")),
}).$mount('#app')

vue.config.js

module.exports = {lintOnSave: false,pluginOptions: {prerenderSpa: {registry: undefined,renderRoutes: [ // 需要预渲染的路由地址'/','/about'],useRenderEvent: true, // 在 mounted 时,传递渲染事件通知 prerenderheadless: true, // 无界面浏览器onlyProduction: true // 仅在生产模式才进行spa处理}}
}

至于 src/router/index.js 不用做任何改动,也不用把 mode 设置为 history

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',// route level code-splitting// this generates a separate chunk (about.[hash].js) for this route// which is lazy-loaded when the route is visited.component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')}
]const router = new VueRouter({routes
})export default router

编译报错 Chromium revision is not downloaded

仅仅做了上述配置后,执行 npm run build 还是会报错 Chromium revision is not downloaded,这是因为 prerender-spa-plugin 这个插件依赖于爬虫来抽取页面,而 puppeteer 正是这个用来实现爬虫的无界浏览器
在这里插入图片描述Puppeteer 是一个控制 headless Chrome 的 Node.js API 。它是一个 Node.js 库,通过 DevTools 协议提供了一个高级的 API 来控制 headless Chrome。它还可以配置为使用完整的(非 headless)Chrome。

在浏览器中手动完成的大多数事情都可以通过使用 Puppeteer 完成,下面是一些入门的例子:

  • 生成屏幕截图和 PDF 页面
  • 检索 SPA 并生成预渲染内容(即“SSR”)
  • 从网站上爬取内容
  • 自动提交表单,UI测试,键盘输入等
  • 创建一个最新的自动测试环境。使用最新的 JavaScript 和浏览器功能,在最新版本的 Chrome 中直接运行测试
  • 捕获网站的时间线跟踪,以帮助诊断性能问题

要安装该插件,一定要使用 cnpm 命令,从国内镜像地址下载 chrome 内核(npm从外国的地址是无法正常下载的,这会导致后面也无法正常 build )

解决办法有三种:
1.使用Chromium 国内源

npm config set puppeteer_download_host=https://npm.taobao.org/mirrors
npm i -g puppeteer

2.使用淘宝的cnpm 安装

npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm i -g puppeteer
  1. 手动下载Chromium文件,解压后放在本地
    https://npm.taobao.org/mirrors/chromium-browser-snapshots/
    放在模块的默认读取目录下
  • node_modules\puppeteer\.local-chromium\win64-848005(系统类型-版本号)\chrome-win32(下载的文件名)\
  • node_modules\puppeteer\.local-chromium\linux-848005(系统类型-版本号)\chrome-linux(下载的文件名)\
    在这里插入图片描述在这里插入图片描述

在这里插入图片描述

如果安装后依旧报上述错误,试试 cnpm uninstall puppeteer 命令。虽然字面意思上是卸载,但实际测试发现还是重装
在这里插入图片描述

在这里插入图描述

最后执行 npm run build,就会发现每个路由都在 dist 文件夹被编译成一个单独的 html 文件,这样就可以正常SEO了
在这里插入图片描述
在这里插入图片描述

vue-meta-info

使用该组件可以解决之前说的 —— SEO 的 TDK问题(不同页面设置不同的 title, keywords, description)或为某些页面设置允许缩放,而其他页面不允许等操作。

首先引入 vue-meta-info 依赖,npm install -D vue-meta-info,该插件的官方地址为 https://www.npmjs.com/package/vue-meta-info
在这里插入图片描述
之后在 src/main.js 中全局绑定

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

最后在组件内使用即可

<template>...
</template><script>export default {metaInfo: {title: 'My Example App', // set a titlemeta: [{                 // set metaname: 'keyWords',content: 'My Example App'}]link: [{                 // set linkrel: 'asstes',href: 'https://assets-cdn.github.com/'}]}}
</script> 

npm run build 打包结果可看出

  1. 不同路由有不同的 title
  2. 不同路由也有自己的 meta-name 和 meta-content
    在这里插入图片描述在这里插入图片描述

方案二:Nuxt.js

优点

  1. 纯静态文件,访问速度更快
  2. 对比SSR,不涉及到服务器负载方面的问题
  3. 静态网页不易遭受黑客攻击,安全性更高

不足:

  1. 如果动态路由参数多的话不适用
  2. Nuxt.js 执行generate静态化打包时,动态路由会被忽略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_777694.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#各种获取IP以及网站MAC什么的

客户端ip:Request.ServerVariables.Get("Remote_Addr").ToString();客户端主机名:Request.ServerVariables.Get("Remote_Host").ToString();客户端浏览器IE&#xff1a;Request.Browser.Browser;客户端浏览器 版本号&#xff1a;Request.Browser.MajorVers…

什么是网站CDN服务,CDN加速原理?

转载&#xff1a;http://server.zzidc.com/fwqcjwt/728.html 摘要&#xff1a;在为您的网站打开速度发愁吗&#xff1f;您有没有发现有些大网站每天拥有几十万或者上百万&#xff0c;甚至几亿用户的访问&#xff0c;而且不同用户分布在全国各地的各个运营商的网络里面&#xff…

个人网站音乐服务器,自己的私人音乐流媒体服务,这才是多少音乐者的梦寐以求的...

自己的私人音乐流媒体服务&#xff0c;这才是多少音乐者的梦寐以求的今天音乐的一个棘手问题是——它分散了。除了音乐流媒体服务之外&#xff0c;您可能还有CD&#xff0c;MP3文件甚至其他数字下载。如果你想把你所有的音乐放在一个地方&#xff0c;你必须支付流媒体服务的费用…

织梦同步静态文件到服务器,静态网站添加到织梦

静态网站添加到织梦 内容精选换一换表1列出了虚拟私有云VPC的常用功能。在使用虚拟私有云VPC之前&#xff0c;建议您先通过基本概念介绍了解子网、路由表、安全组、弹性公网IP等基本概念&#xff0c;以便更好地理解虚拟私有云VPC提供的功能。当AppCube平台提供的全局高级组件无…

网站部署笔记

今天部署asp.net网站的时候遇到了两个问题 &#xff1a; 一、网站部署完毕后出现了404的问题 查资料发现还是少配置 在web.config中的configuration配置节点下加入如下配置节点即可 <system.webServer>   <defaultDocument>     <files>       &…

分享织梦DedeCMS设置全站Html网站地图教程

全站Html网站地图的作用就是方便搜索蜘蛛爬行&#xff0c;收录网站&#xff0c;增加用户体验。 详细的功能说明请看《什么是网站地图》一文。 下面织梦设置全站地图的步骤&#xff1a; 第一步&#xff0c;登陆DedeCMS后台&#xff1a;核心 - 频道模型- 自由列表管理&#xff0c…

使用ThinkPHP框架快速开发网站(多图)

使用ThinkPHP框架快速搭建网站这一周一直忙于做实验室的网站&#xff0c;基本功能算是完成了。比较有收获的是大概了解了ThinkPHP框架。写一些东西留作纪念吧。如果对于同样是Web方面新手的你有一丝丝帮助&#xff0c;那就更好了挖。 以前用PHP做过一个很蹩脚的网站&#xff0c…

网站盈利模式其实只有三种

在做网站大家都会考虑关于盈利模式的问题&#xff0c;如果没有清楚的盈利模式&#xff0c;很多人都不会大力去投资做这个网站&#xff0c;而盈利模式往往是目前来讲一直没有创新的地方&#xff0c;因为盈利模式只有以下三种。 为了不让大家认为我在说这三种盈利模式是吹牛逼的&…

如何一步一步用DDD设计一个电商网站(十一)—— 最后的准备

本系列所有文章 如何一步一步用DDD设计一个电商网站&#xff08;一&#xff09;—— 先理解核心概念 如何一步一步用DDD设计一个电商网站&#xff08;二&#xff09;—— 项目架构 如何一步一步用DDD设计一个电商网站&#xff08;三&#xff09;—— 初涉核心域 如何一步一步用…

新网站如何做SEO优化

&ldquo;百度快照变慢了、百度收录问题、关键词掉了&rdquo;&#xff0c;这是在卢松松留言本被经常问及的问题&#xff0c;新手站长往往会因此吃不下饭、睡不着觉&#xff0c;网站的推广是一个漫长的过程&#xff0c;&ldquo;心急吃不了热豆腐&rdquo;&#xff0c;…

《大型网站技术架构:核心原理与案例分析》-- 读书笔记 (1):大型网站发展历程...

网站架构发展 1 初始阶段 -- 只有一台服务器 2 应用服务和数据服务分离 3 使用缓存改善网站性能 4 使用应用服务器集群改善网站并发处理能力 5 数据库读写分离 6 使用反向代理和CDN加速网站响应 反向代理和CDN的基本原理都是缓存&#xff0c;区别在于CDN部署在网络提供商的机房…

如何给WordPress网站更换域名

网站更换域名是站长们经常遇到的网站处理问题&#xff0c;wordpress程序网站换域名主要包括如下几步&#xff0c;希望大家能够认真参考实践。 第一步&#xff1a;将自己的新域名DNS解析到自己的服务器或是空间ip上&#xff0c;ip绑定新域名。 第二步&#xff1a;进入你的网站数…

mouseover和mouseenter的区别

_谦龙 发布在谦龙的小天地2017年6月5日view&#xff1a;111HTML5BrettBat性能优化正则表达式前端工程师面试闭包高阶函数DOMES6在文章任何区域双击击即可给文章添加【评注】&#xff01;浮到评注点上可以查看详情。 隐藏标注前言 原文地址 项目地址 不知道大家在面试或者工作过…

百度云主机使用WordPress建站ideashare.club过程总结与那些坑

目录 为什么建站&#xff1f; 购买主机 配置主机 购买域名 ICP备案 解析域名 WordPress安装 申请SSL证书 踩过的那些坑&#xff1a; 1&#xff0c;域名解析的设置 2&#xff0c;隐私保护开关操作失败 3&#xff0c;开启了SSL证书以及wordpress的HTTPS插件&#xff…

居然有网站抄袭我的博客内容,但我很高兴!

今天唠叨点家常&#xff0c;说点高兴的事&#xff01; 也许有人会因为文章被抄袭了而烦恼&#xff0c;或者觉得自身利益受损&#xff0c;感到非常失望。 不过我前几天被网友告知文章出现在了其它地方&#xff0c;浏览量比较高&#xff0c;这点却甚是欣慰&#xff0c;毕竟开博客…

记一次更换网站SSL证书--打包在traefik里面使用docker部署

突然发现网站访问时提示&#xff1a;您的连接不是私密连接 攻击者可能会试图从 www.xxxxx.com 窃取您的信息&#xff08;例如&#xff1a;密码、通讯内容或信用卡信息&#xff09;。了解详情 NET::ERR_CERT_DATE_INVALID&#xff0c;这就很尴尬了&#xff0c;第一次遇到这种情况…

记一次使用nginx部署静态网站

nginx部署静态网站:1.查找nginx安装目录&#xff1a;2.测试配置文件是否能正确加载由于拿到的服务器已经安装好nginx了&#xff0c;访问服务器ip可以看到nginx的欢迎页。 那么直接配置映射静态网站就好了。 1.查找nginx安装目录&#xff1a; 使用命令&#xff1a;whereis ng…

全世界最著名的 icon 网站都在这了

<link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f76675cdea.css"><div class"htmledit_views" id"content_views">作为一个多年的独立开发者&#xff0c;收藏了非常多免…

Tomcat 自定义默认网站目录

上面访问的网址为http://192.168.0.108:8080/memtest/meminfo.jsp 需求&#xff1a; 现在我想访问格式为http://192.168.0.108:8080/meminfo.jsp 方法一 将meminfo.jsp或其他程序放在tomcat/webapps/ROOT目录下即可。因为默认网站根目录为tomcat/webapps/ROOT [rootmysql webap…

资源 | 11个免费矢量免抠素材网站

PNGAll&#xff08;推荐指数&#xff1a;❤❤❤❤&#xff09; PNGAll.com是一个信息网络博客&#xff0c;免费为用户提供最优质的PNG透明图像 国外网站&#xff0c;比较简洁&#xff0c;仅支持英文搜索&#xff0c;建议使用浏览器翻译插件 网站&#xff1a;www.pngall.com …