SEO优化 prerender-spa-plugin工具使用 踩坑记录

  1. 安装prerender-spa-plugin
yarn add prerender-spa-plugin
或
npm install prerender-spa-plugin

初始配置 后面记录踩的坑

  1. 配置路由

const routes = [{path: '/',redirect: {path: '/HomeView'},},{path: '/home',redirect: {path: '/HomeView'},},{ path: '/HomeView',component: HomeView},{path: '/CompanyProfile',component: CompanyProfile},{path: '/ConsultationChannel',component: ConsultationChannel},{path: '/IndustryIntroduction',name: 'IndustryIntroduction',component: IndustryIntroduction,},{path: '/ProductIntroduction',name: 'ProductIntroduction',component: ProductIntroduction,},{path: '/ProductsServices',name: 'ProductsServices',component: ProductsServices,},{path: '/CompanyCulture',name: 'CompanyCulture',component: CompanyCulture,},{path: '/CompanyAbout',name: 'CompanyAbout',component: CompanyAbout,},{path: '/CompanyIntroduction',name: 'CompanyIntroduction',component: CompanyIntroduction,},
]const router = new VueRouter({mode: 'history',base: process.env.BASE_URL,routes,
})
  1. vue.config.js配置
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;module.exports = {// 服务器环境production  本地环境development // "../"  其他配置无法打包publicPath: process.env.NODE_ENV === "production" ? "../" : "./",// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)outputDir: 'home',configureWebpack: config => {if (process.env.NODE_ENV !== 'production') return;return {plugins: [new PrerenderSPAPlugin({// 生成文件的路径,这里使用了相对路径staticDir: path.join(__dirname, 'home'),// 需要进行预渲染的路由,这里需要根据你的实际路由配置来设置routes: [ '/', '/HomeView', '/CompanyProfile', '/ConsultationChannel', '/IndustryIntroduction', '/ProductIntroduction', '/ProductsServices', '/CompanyCulture', '/CompanyAbout', '/CompanyIntroduction'],// 渲染器配置,这里使用 Puppeteer 渲染renderer: new Renderer({inject: {foo: 'bar'},// 在渲染之前等待一定时间,以确保 SPA 中的异步操作完成renderAfterTime: 5000,headless: false,// 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。renderAfterDocumentEvent: 'render-event'})})]}}
}

遇到的问题

  1. publicPath配置为…/后, 在服务器静态资源和路由加载找不到子路径的目录,publicPath改为真实的子路径后无法build 不加publicPath静态文件访问存在问题

解决

此问题解决出处
解决方法

  publicPath: process.env.NODE_ENV === "production" ? '/home/' : "./",,outputDir: path.join(__dirname, "./home", "/home/"),configureWebpack: config => {if (process.env.NODE_ENV !== 'production') return;return {plugins: [new PrerenderSPAPlugin({// 生成文件的路径,这里使用了相对路径staticDir: path.join(__dirname, 'home/'),indexPath: path.join(__dirname, "home/home/index.html"), //重要// 需要进行预渲染的路由,这里需要根据你的实际路由配置来设置routes: [ '/', '/HomeView', '/CompanyProfile', '/ConsultationChannel', '/IndustryIntroduction', '/ProductIntroduction', '/ProductsServices', '/CompanyCulture', '/CompanyAbout', '/CompanyIntroduction'],// 渲染器配置,这里使用 Puppeteer 渲染renderer: new Renderer({inject: {foo: 'bar'},// 在渲染之前等待一定时间,以确保 SPA 中的异步操作完成renderAfterTime: 5000,headless: false,// 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。renderAfterDocumentEvent: 'render-event'})})]}}
  1. 升级到服务器后,在使用 prerender-spa-plugin 进行预渲染处理时,如果手动刷新 Vue 路由后路径末尾会出现 /,通常这是由于浏览器的默认行为导致的,特别是在使用 history 模式的 Vue 路由时比较常见。这种行为可能会影响到预期的路由匹配和渲染

解决

  • Vue Router 中设置 strict: true,这样在路由跳转时会自动去掉末尾的斜杠,避免不必要的重定向。
const router = new VueRouter({mode: 'history',base: process.env.BASE_URL,routes,
})
  • 在路由的 beforeEnter 钩子中,可以检查并处理路径末尾的斜杠,确保它符合预期的路由结构。
const routes = [{path: '/',redirect: {path: '/HomeView'},},{ path: '/HomeView',component: HomeView,beforeEnter: (to, from, next) => {if (to.path.endsWith('/')) {next({ path: to.path.slice(0, -1) });} else {next();}}},{path: '/CompanyProfile',component: CompanyProfile,beforeEnter: (to, from, next) => {if (to.path.endsWith('/')) {next({ path: to.path.slice(0, -1) });} else {next();}}},{path: '/ConsultationChannel',component: ConsultationChannel,beforeEnter: (to, from, next) => {if (to.path.endsWith('/')) {next({ path: to.path.slice(0, -1) });} else {next();}}},{path: '/IndustryIntroduction',name: 'IndustryIntroduction',component: IndustryIntroduction,beforeEnter: (to, from, next) => {if (to.path.endsWith('/')) {next({ path: to.path.slice(0, -1) });} else {next();}}},{path: '/ProductIntroduction',name: 'ProductIntroduction',component: ProductIntroduction,beforeEnter: (to, from, next) => {if (to.path.endsWith('/')) {next({ path: to.path.slice(0, -1) });} else {next();}}},{path: '/ProductsServices',name: 'ProductsServices',component: ProductsServices,beforeEnter: (to, from, next) => {if (to.path.endsWith('/')) {next({ path: to.path.slice(0, -1) });} else {next();}}},{path: '/CompanyCulture',name: 'CompanyCulture',component: CompanyCulture,beforeEnter: (to, from, next) => {if (to.path.endsWith('/')) {next({ path: to.path.slice(0, -1) });} else {next();}}},{path: '/CompanyAbout',name: 'CompanyAbout',component: CompanyAbout,beforeEnter: (to, from, next) => {if (to.path.endsWith('/')) {next({ path: to.path.slice(0, -1) });} else {next();}}},{path: '/CompanyIntroduction',name: 'CompanyIntroduction',component: CompanyIntroduction,beforeEnter: (to, from, next) => {if (to.path.endsWith('/')) {next({ path: to.path.slice(0, -1) });} else {next();}}},]
  1. 在以上问题处理完后,升级到服务器后,静态资源访问不到
资源访问不到
http://ip:port/home/static/css/app.e2f5f186.css

解决

打包生成home文件夹,在home文件夹下还有一个home文件夹,把这个里面的静态资源复制一份放在和它同级的目录下即可!

home/home下的文件夹,复制这些静态资源
home文件夹,复制后放在这个文件夹

自此目前遇到的所有问题都以解决

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 用户管理模式

目录 1. 概述 2. 管控级别 3. 用户组管理 4. 用户管理 4.1 创建用户 useradd 4.2 删除用户 userdel ​编辑4.3 查看用户所属组 id 4.4 修改用户所属组 usermod 5. 查看用户/用户组 5.1 查看系统用户 5.2 查看系统用户组 1. 概述 Linux 可以配置多个用户&#xff0c…

C# 调用Webservice接口接受数据测试

1.http://t.csdnimg.cn/96m2g 此链接提供测试代码; 2.http://t.csdnimg.cn/64iCC 此链接提供测试接口; 关于Webservice的基础部分不做赘述,下面贴上我的测试代码(属于动态调用Webservice): 1&#xff…

ros笔记04--从零体验ros2行为通信方式

ros笔记04--从零体验ros2行为通信方式 介绍创建步骤体验官方案例基于python开发行为案例创建action接口创建action sever和client 注意事项说明 介绍 行为是ros2中的一种通信方式,其多被用于一些长时间运行的任务,它包含了目标、反馈、结果三部分。 行为…

Qt Creator使用git管理代码

1.在GitHub中新建仓库,设置好仓库名后,其它的设置默认即可。 2.打开git bash,输入以下命令: git config --global user.name "xxxxx" #设置你的GitHub用户名 git config --global user.email "xxxxxxxxx.…

79.WEB渗透测试-信息收集-框架组件识别利用(3)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:78.WEB渗透测试-信息收集-框架组件识别利用(2)-CSDN博客 struts2…

GPT-4o mini- 开发者的新宠儿

在人工智能的浪潮中,一颗新星正在冉冉升起。OpenAI最新发布的GPT-4o mini模型以其惊人的性能和极具竞争力的价格,正在成为开发者们的新宠儿。作为一名大数据开发者,我深深被这个"迄今为止最具成本效益的小模型"所吸引。让我们一起探索GPT-4o mini的魅力,看看它如何改…

docker(一):Develop faster. Run anywhere.

前言 在进行微服务部署时,首先需要进行部署环境的搭建。目前,Docker 已经成为了微服务部署的主流解决方案之一。Docker 可以帮助我们更快地打包、测试以及部署应用程序,从而缩短从编写到部署运行代码的周期。 在本文中,我们将对…

ITSS:IT服务工程师

证书亮点:适中的费用、较低的难度、广泛的应用范围以及专业的运维认证。 总体评价:性价比良好! 证书名称:ITSS服务工程师 证书有效期:持续3年 培训要求:必须参加培训,否则将无法参与考试 发…

软件-vscode-plantUML-IDEA

文章目录 vscode基础命令 实操1. vscode实现springboot项目搭建 (包括spring data jpa和sqlLite连接) PlantUMLIDEA下载及安装Eval Reset插件配置修改IDEA创建项目的默认目录IDEA配置gitIDEA翻译插件translationIDEA断点调试IDEA全局搜索快捷键不能使用代…

人工智能学习笔记 - 初级篇Ⅱ - 图形可视化 - 第11节: 绘制带填充区域的图表

微信公众号:御风研墨 关注可了解更多。问题或建议,请公众号留言 文章目录 绘制带填充区域的图表应用背景准备工作操作步骤工作原理补充说明最后 绘制带填充区域的图表 应用背景 在数据可视化中,带填充区域的图表可以有效地表示数据范围、趋…

springBoot 3.X整合camunda

camunDa camunDa 是2013年从Activiti5 中分离出来的一个新的工作流引擎。Camunda 官方提供了 Camunda Platform、Camunda Modeler,其中 Camunda Platform 以 Camunda engine 为基础为用户提供可视化界面,Camunda Modeler 是流程文件建模平台&#xff0c…

FMEA在光伏电站安全生产管理中的应用

在绿色能源浪潮席卷全球的今天,光伏电站作为清洁能源的重要支柱,其安全高效运行直接关系到能源供应的稳定与环境的可持续发展。然而,光伏电站的日常运营中潜藏着诸多风险与挑战,如何有效预防事故、保障人员安全及设备稳定运行&…

Aboboo一些操作

常用快捷键⌨ 快捷键/操作方式 功能 鼠标中键/Esc 进入/退出全屏 空格/Tab 暂停/恢复播放 左/右箭头 快退/快进 Ctrl-左/右箭头 30秒快退/快进 Alt-左/右箭头 60秒快退/快进 Ctrl-Alt-左/右箭头 播放速率调节 PageUp/PageDown 上一句/下一句 上下箭头/滚轮 …

算法入门:Java实现排序、查找算法

链接:算法入门:Java实现排序、查找算法 (qq.com) 冒泡/选择/插入/希尔排序代码 (qq.com) 快排/归并/堆排/基数排序代码 (qq.com)

六西格玛管理法

六西格玛管理法是一种旨在提高业务流程效率和减少缺陷的管理策略。它最初由摩托罗拉公司在1980年代末期提出,并随后被通用电气等公司广泛应用和发展。六西格玛的核心理念是通过减少过程变异性来提高产品质量和服务水平。 六西格玛的含义: 统计学概念&am…

【HarmonyOS】鸿蒙中如何获取资源文件的指定类型 fd,string,Uint8Array,RawFileDescriptor

【HarmonyOS】鸿蒙中如何获取资源文件的指定类型 fd,string,Uint8Array,RawFileDescriptor 一、问题背景: 众所周知,在鸿蒙中的资源分为media和rawfile。两者的区别对标android工程一致,后者是其他类型文…

笑谈“八股文”,人生不成文

一、“八股文”在实际工作中是助力、阻力还是空谈? 作为现在各类大中小企业面试程序员时的必问内容,“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢?有IT人士不禁发出疑问:程序员面试…

未来社交:Facebook如何定义虚拟现实的新时代?

随着科技的飞速发展,虚拟现实(VR)逐渐从科幻小说中的幻想变成了现实生活中的前沿技术。在这一领域,Facebook(现已更名为Meta)扮演了重要角色,通过不断的创新和投资,致力于打造一个全…

python爬取某财富网

过程: 点击底部的第3页,第5页,网页刷新了,但是顶部的url地址没有变。那么就是 动态加载, 就是 XHR. 直接请求api. 实验代码如下: import requestsheaders {"User-Agent": "Mozilla/5.0 (Windows NT…

YOLOv10环境搭建、训练自己的目标检测数据集、实际验证和测试

1 环境搭建 1.1 在官方仓库的给定的使用python3.9版本,则使用conda创建对应虚拟环境。 conda create -n yolov10 python3.9 1.2 切换到对应虚拟环境 conda activate yolov10 1.3 在指定目录下克隆yolov10官方仓库代码 git clone https://github.com/THU-MIG/yo…