Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Day230:说一下 Vue 开发如何针对搜索引擎做 SEO 优化 #1049

Open
Genzhen opened this issue Jan 28, 2021 · 0 comments
Open

Day230:说一下 Vue 开发如何针对搜索引擎做 SEO 优化 #1049

Genzhen opened this issue Jan 28, 2021 · 0 comments
Labels
Vue teach_tag

Comments

@Genzhen
Copy link
Collaborator

Genzhen commented Jan 28, 2021

每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案
欢迎大家在下方发表自己的优质见解
二维码加载失败可点击 小程序二维码

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。

---

Vue SEO 几种方案

众所周知,Vue SPA 单页面应用对 SEO 不友好,当然也有相应的解决方案

1.1 SSR 服务器渲染

Vue.js 是构建客户端应用程序的框架。默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM。然而,也可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序。

服务器渲染的 Vue.js 应用程序也可以被认为是"同构"或"通用",因为应用程序的大部分代码都可以在服务器和客户端上运行。

权衡之处:

  • 开发条件所限,浏览器特定的代码,只能在某些生命周期钩子函数 (lifecycle hook) 中使用;一些外部扩展库 (external library) 可能需要特殊处理,才能在服务器渲染应用程序中运行;
  • 环境和部署要求更高,需要 Node.js server 运行环境;
  • 高流量的情况下,需要准备相应的服务器负载,并明智地采用缓存策略。

优势:

  • 更好的 SEO,因为搜索引擎爬虫抓取工具可以直接查看完全渲染的页面;
  • 更快的内容到达时间 (time-to-content),特别是对于缓慢的网络情况或运行缓慢的设备。

不足:

  • 一套代码两套执行环境,会引起各种问题,比如服务端没有 window、document 对象,处理方式是增加判断,如果是客户端才执行:
  • 涉及构建设置和部署的更多要求,需要处于 node server 的运行环境
  • 更多的服务端负载

1.2 Nuxt 静态化

Nuxt.js 框架,官方是这样介绍的。从头搭建一个服务端渲染的应用是相当复杂的。幸运的是,我们有一个优秀的社区项目 Nuxt.js 让这一切变得非常简单。Nuxt 是一个基于 Vue 生态的更高层的框架,为开发服务端渲染的 Vue 应用提供了极其便利的开发体验。更酷的是,你甚至可以用它来做为静态站生成器。

静态化是 Nuxt.js 打包的另一种方式,算是 Nuxt.js 的一个创新点,页面加载速度很快。

注意:在 Nuxt.js 执行 generate 静态化打包时,动态路由会被忽略。

优势:

  • 纯静态文件,访问速度超快;
  • 对比 SSR,不涉及到服务器负载方面问题;
  • 静态网页不宜遭到黑客攻击,安全性更高。

不足:

  • 如果动态路由参数多的话不适用。

1.3 预渲染 prerender-spa-plugin

如果你只是用来改善少数营销页面(例如 /, /about, /contact 等)的 SEO,那么你可能需要预渲染。无需使用 web 服务器实时动态编译 HTML,而是使用预渲染方式,在构建时 (build time) 简单地生成针对特定路由的静态 HTML 文件。优点是设置预渲染更简单,并可以将你的前端作为一个完全静态的站点。

优势:

  • 改动小,引入插件配置即可

不足:

  • 无法使用动态路由
  • 只适用少量页面的项目,页面多达几百个的情况下,打包会非常慢

1.4 使用 Phantomjs 针对爬虫做处理

Phantomjs 是一个基于 webkit 内核的无头浏览器,即没有 UI 界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。

虽然“PhantomJS 宣布终止开发”,但是已经满足对 Vue 的 SEO 处理。

这种解决方案其实是一种旁路机制,原理就是通过 Nginx 配置,判断访问的来源 UA 是否是爬虫访问,如果是则将搜索引擎的爬虫请求转发到一个 node server,再通过 PhantomJS 来解析完整的 HTML,返回给爬虫。

优势:

  • 完全不用改动项目代码,按原本的 SPA 开发即可,对比开发 SSR 成本小不要太多;
  • 对已用 SPA 开发完成的项目,这是不二之选。

不足:

  • 部署需要 node 服务器支持;
  • 爬虫访问比网页访问要慢一些,因为定时要定时资源加载完成才返回给爬虫;
  • 如果被恶意模拟百度爬虫大量循环爬取,会造成服务器负载方面问题,解决方法是判断访问的 IP,是否是百度官方爬虫的 IP。

1.5 总结

如果构建大型网站,如商城类,别犹豫,直接上 SSR 服务器渲染,当然也有相应的坑等你,社区较成熟,英文好点,一切问题都迎刃而解。

如果只是个人博客、公司官网这类,其余三种都可以。

如果对已用 SPA 开发完成的项目进行 SEO 优化,而且支持 node 服务器,请使用 Phantomjs。

@Genzhen Genzhen added the Vue teach_tag label Jan 28, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Vue teach_tag
Projects
None yet
Development

No branches or pull requests

1 participant