使用 prerender-spa-plugin 为 Vue Webpack 项目实现 SEO 预渲染
使用 prerender-spa-plugin 为 Vue Webpack 项目实现 SEO 预渲染【免费下载链接】webpackA full-featured Webpack vue-loader setup with hot reload, linting, testing css extraction.项目地址: https://gitcode.com/gh_mirrors/we/webpack本文基于 vue-webpack-boilerplate 模板的官方文档docs/prerender.md讲解如何为纯客户端渲染的 Vue SPA 引入预渲染Prerendering能力以解决搜索引擎无法抓取 JS 渲染内容的问题。通过阅读本文你将掌握prerender-spa-plugin的安装、在 template/build/webpack.prod.conf.js 中的插件配置、vue-routerhistory 模式的开启方式以及如何判断一个项目该用构建期预渲染还是服务端定期重渲渲染。为什么需要预渲染SPA 的 SEO 困境使用 Webpack vue-loader构建的 Vue 应用本质上是纯客户端渲染CSR的 SPA浏览器先加载空的index.html再由 JavaScript 动态创建 DOM。搜索引擎爬虫虽然大多能执行 JavaScript但其执行成本高、时效性不稳定对于内容型页面仍然存在抓取不全甚至完全抓不到内容的风险。因此对于 SEO 敏感的页面业界通常有三种缓解思路服务端渲染SSR在服务器上实时渲染出完整 HTML代价是需要引入 Node.js 服务端运行时改造成本最高预渲染Prerendering在构建阶段把每个路由渲染成静态 HTML随产物一起发布完全不需要运行时第三方预渲染服务如 Prerender.io、Netlify由外部服务定期抓取并缓存渲染后的页面。本文的主角prerender-spa-plugin属于第二种方案它是经官方验证可配合 Vue 使用的 Webpack 插件。预渲染的适用边界预渲染的适用场景很明确页面内容在发布后基本不再变化。例如营销页、产品介绍、文章、FAQ、落地页等静态内容页面一次构建、永久生效最划算。反之如果页面内容频繁变化如用户生成内容、实时数据仪表盘、评论区则不适合构建期预渲染——此时文档建议改用 Prerender.io 与 Netlify 提供的定期重渲渲染服务由它们在服务器端按计划重新渲染内容供搜索引擎抓取。方案渲染时机适用内容运行时依赖prerender-spa-plugin每次npm run build基本不变的静态页面无Prerender.io / Netlify 等服务定期重渲频繁变化的内容无外部服务SSR每次请求时实时、个性化内容需要 Node 服务端在 vue-webpack-boilerplate 中接入 prerender-spa-plugin以下四步完整覆盖从安装到生效的全过程所有配置都落在生产构建链路中即npm run build对应的 template/build/webpack.prod.conf.js。第 1 步安装开发依赖npm install --save-dev prerender-spa-plugin该插件只参与构建过程运行时并不需要因此作为devDependencies安装。模板自带的脚手架由 meta.js 定义会生成独立的项目安装前请先按模板说明完成vue init webpack my-project与npm install。第 2 步在生产 Webpack 配置中引入插件打开template/build/webpack.prod.conf.js在文件顶部与其他 import 声明放在一起加入// This line should go at the top of the file where other imports live in const PrerenderSpaPlugin require(prerender-spa-plugin)该文件当前顶部已经通过require引入了webpack、webpack-merge、HtmlWebpackPlugin、UglifyJsPlugin等模块参见 template/build/webpack.prod.conf.js新插件按同样的风格加入即可。第 3 步在 plugins 数组中注册插件找到plugins数组其中已包含HtmlWebpackPlugin、ExtractTextPlugin等生产插件加入如下配置new PrerenderSpaPlugin( // Path to compiled app path.join(__dirname, ../dist), // List of endpoints you wish to prerender [ / ] )参数说明第一个参数编译产物的路径。config.build.assetsRoot的默认值就是path.resolve(__dirname, ../dist)见 template/config/index.js因此path.join(__dirname, ../dist)与产物输出目录一致第二个参数需要预渲染的路由端点数组。若还要预渲染/about和/contact改为[ /, /about, /contact ]即可。第 4 步为 vue-router 开启 history 模式预渲染依赖真实的路由路径因此必须开启vue-router的 history 模式否则默认的 hash 模式会生成带#的地址无法被爬虫按路径抓取。在路由初始化处修改const router new VueRouter({ mode: history, routes: [...] })模板默认的 template/src/router/index.js 创建Router实例并注册/路由指向HelloWorld组件在此基础上加入mode: history即可。注意history 模式依赖服务器把所有路径回退到index.html如 Nginx 的try_files或 Netlify 的 redirects 规则否则用户直接访问/about会得到 404。结合源码理解预渲染的落点预渲染在构建流程中的位置在 template/build/webpack.prod.conf.js 中生产构建依次执行HtmlWebpackPlugin生成带资源哈希的dist/index.html第 65-80 行ExtractTextPlugin抽取并压缩 CSSUglifyJsPlugin压缩 JSCommonsChunkPlugin拆分 vendor/manifest/app 块CopyWebpackPlugin把static/目录原样复制到产物目录第 116-122 行。PrerenderSpaPlugin注册在同一个plugins数组中会在上述构建完成、产物就绪后启动一个无头浏览器加载dist/index.html并访问列表中的每个路由端点把渲染出的最终 HTML 回写为对应路径的静态文件。也就是说它发生在打包完成之后、产物发布之前属于构建期的“最后一公里”。产物路径与静态资源基路径的配合预渲染出的 HTML 仍然引用构建生成的哈希资源因此需要保证 template/config/index.js 中的assetsPublicPath默认/与你的部署域名路径一致。若部署在子路径如https://example.com/app/应同步调整assetsPublicPath与预渲染产物的引用避免静态资源 404。验证与常见问题验证预渲染是否生效执行npm run build完成生产构建查看dist/目录应出现dist/index.html以及按需的dist/about.html等用浏览器打开dist/index.html并查看页面源代码若能直接看到 Vue 组件渲染出的 DOM 结构而非空壳div idapp/div说明预渲染成功。常见问题排查问题排查方向预渲染出的 HTML 为空壳确认路由列表包含目标路径确认组件渲染不依赖浏览器 API如window、localStorage否则需在预渲染阶段做降级处理hash 模式未生效确认vue-router已设置mode: history刷新子路由 404检查服务器回退配置history 模式需要把未知路径重写回index.html构建报错确认插件已作为 devDependency 安装且 Node 版本满足模板要求node 6.0.0见 template/package.json小结预渲染适用于内容基本不变的静态页面构建期即可产出可被搜索引擎直接抓取的 HTML接入只需四步安装插件、require引入、在 template/build/webpack.prod.conf.js 的plugins数组注册并列出端点、开启 vue-router 的 history 模式对于频繁变化的内容文档推荐改用 Prerender.io、Netlify 等定期重渲服务而非构建期预渲染预渲染是构建期方案不引入运行时依赖也不改变 template/config/index.js 中的产物路径配置只需在部署时配合 history 模式的服务端回退规则。【免费下载链接】webpackA full-featured Webpack vue-loader setup with hot reload, linting, testing css extraction.项目地址: https://gitcode.com/gh_mirrors/we/webpack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

【Dify】增值税发票信息自动提取应用

【Dify】增值税发票信息自动提取应用

增值税发票信息的快速获取和自动化处理是财务数字化转型的重要需求。随着企业业务量的增加,传统手工录入与核查方式在效率和准确性上难以满足实际工作场景。 本文介绍基于Dify平台,通过多模态发票OCR模型,实现发票图片的自动上传、识别、结构化输出的完整解决方案。详细梳理…

2026/9/24 14:01:33 阅读更多 →
【Dify】网页内容智能仿写与多图自动排版应用

【Dify】网页内容智能仿写与多图自动排版应用

图文自动化处理工具在内容生产领域持续提升着创作效率和视觉表现。基于大语言模型与多模态分析,自动仿写与智能配图逐步成为高效图文创作的主流解决方案。 本文介绍一种结合网页文本仿写与图片自动匹配的完整工作流。依托多种AI模型,系统能够从网页提取文本,完成结构优化与…

2026/9/24 14:01:33 阅读更多 →
EtherCAT从站迁移实战:从ET1100到AX58100的全面替换指南

EtherCAT从站迁移实战:从ET1100到AX58100的全面替换指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 14:01:33 阅读更多 →

最新新闻

伺服系统抖动归因:电气、机械与控制三维度诊断框架

伺服系统抖动归因:电气、机械与控制三维度诊断框架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 14:47:00 阅读更多 →
Sonnet 2 开发指南:基于 TensorFlow 2 的模块化神经网络库核心用法与序列化实战

Sonnet 2 开发指南:基于 TensorFlow 2 的模块化神经网络库核心用法与序列化实战

深度学习机器学习 【免费下载链接】sonnet TensorFlow-based neural network library 项目地址: https://gitcode.com/gh_mirrors/so/sonnet 点击查看 免费下载 Sonnet 是 DeepMind 设计并构建、运行在 TensorFlow 2 之上的神经网络库,其核心目标是提供…

2026/9/24 14:47:00 阅读更多 →
easing-functions-cj API 参考大全:Skill 枚举、getMethod() 与 calculate() 每个参数逐条精讲

easing-functions-cj API 参考大全:Skill 枚举、getMethod() 与 calculate() 每个参数逐条精讲

easing-functions-cj API 参考大全:Skill 枚举、getMethod() 与 calculate() 每个参数逐条精讲 【免费下载链接】easing-functions-cj 一个基于缓动函数的动画UI组件库 项目地址: https://gitcode.com/Cangjie-TPC/easing-functions-cj easing-functions-cj …

2026/9/24 14:47:00 阅读更多 →
PDF 补丁丁:免费编辑 PDF 书签、合并文档与解除限制的完整指南

PDF 补丁丁:免费编辑 PDF 书签、合并文档与解除限制的完整指南

PDF 补丁丁:免费编辑 PDF 书签、合并文档与解除限制的完整指南 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: ht…

2026/9/24 14:47:00 阅读更多 →
EasyWeChat 3.x 用户分组(User Group)管理实战:获取、增删改查与批量移动用户完整 API 指南

EasyWeChat 3.x 用户分组(User Group)管理实战:获取、增删改查与批量移动用户完整 API 指南

后端即时通讯 【免费下载链接】easywechat 📦 一个 PHP 微信 SDK 项目地址: https://gitcode.com/gh_mirrors/ea/easywechat 点击查看 免费下载 导读 用户分组是微信公众号后台用户管理的基础能力之一,用于按自定义维度(如地区、…

2026/9/24 14:47:00 阅读更多 →
手把手教你用 tchMaterial-parser 批量下载智慧教育平台电子课本 PDF

手把手教你用 tchMaterial-parser 批量下载智慧教育平台电子课本 PDF

手把手教你用 tchMaterial-parser 批量下载智慧教育平台电子课本 PDF 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地…

2026/9/24 14:46:00 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →