前言
随着 Web 应用程序的不断发展和成熟,单页面应用程序(SPA)被越来越广泛地运用于 Web 开发领域。SPA 采用异步加载和前端路由等技术,实现了在不刷新整个页面的情况下,实现快速的页面切换和用户交互等功能。但是,SPA 路由自动刷新对搜索引擎优化(SEO)会产生怎样的影响呢?本文将围绕这一话题展开探讨。
SPA 路由自动刷新的实现
SPA 路由自动刷新的实现方式有很多,其中比较常见的两种方式分别是:hash 模式和 history 模式。
hash 模式
hash 模式是指将路由信息加在 URL 地址的 # 后面,在浏览器中访问该 URL,Web 服务接收到请求后,仅根据 # 后面的路由信息,返回对应的视图渲染结果,而不需要发起新的 HTTP 请求,也不需要刷新整个页面,从而实现了快速切换视图和增强用户体验的目的。
示例代码:
-- -------------------- ---- ------- -- ---- ----- ------ - - - ----- ---- ---------- ---- -- - ----- --------- ---------- ----- -- - ----- ----------- ---------- ------- -- -- -- ---- ----- ------ - --- ----------- ------- ----- ------- -- -- ---- -- --- -- ---- --- ----- ------- ------- --- -- ------- ------------------
history 模式
history 模式是指将路由信息加在 URL 地址的路径中,如 /about
,在浏览器中访问该 URL,Web 服务接收到请求后,根据 URL 路径,为客户端返回对应的视图渲染结果,但是它需要通过 Ajax 或者其他技术手段对 Web 服务发起新的 HTTP 请求,从而取回新的视图数据,最终实现了快速切换视图和增强用户体验的目的。
示例代码:
-- -------------------- ---- ------- -- ---- ----- ------ - - - ----- ---- ---------- ---- -- - ----- --------- ---------- ----- -- - ----- ----------- ---------- ------- -- -- -- ---- ----- ------ - --- ----------- ------- ----- ---------- -- -- ------- -- --- -- ---- --- ----- ------- ------- --- -- ------- ------------------
路由自动刷新对 SEO 的影响
从用户体验的角度来看,SPA 路由自动刷新能够带来非常好的切换体验,但是对于搜索引擎的爬虫来说,它对页面的行为进行分析时,可能会受到影响,进而导致搜索结果的排名不如期望的那样好。
在 hash 模式下,由于路由信息都是以 # 进行标识,浏览器和搜索引擎都会忽略这部分信息,所以一般不会造成 SEO 的问题。
但是在 history 模式下,由于路由信息存在于 URL 路径中,如果使用默认的路由模式,浏览器和搜索引擎就无法识别路由,因为这些 URL 无法唯一标识一个资源。因为在 history 模式下,任何路由切换都需要向 Web 服务发送 HTTP 请求,并且由于路由切换仅局限于 SPA 中,所以搜索引擎难以获取到某个特定页面的路由信息。换句话说,搜索引擎无法从当前页面获取到对该页面的合适描述和关键字,对于搜索引擎优化来说是个不利的因素。
有些开发者通过在路由切换时,使用 document.title
函数修改文档的标题,来达到 SEO 优化的效果,但是这种方式并不能完全解决历史记录问题,因为文字描述和 SEO 关键词的效果是有限的。
解决路由自动刷新问题的方法
使用预渲染
为了解决 SPA 路由自动刷新对 SEO 的影响,前端开发者可以考虑使用预渲染方案。
预渲染是在应用程序构建期间,将跟路由相关的页面预先渲染成静态 HTML 文件,然后将这些 HTML 文件发布到 Web 服务器,Web 服务器会根据请求的 URL 路径直接返回对应的静态 HTML 文件,这样搜索引擎爬虫就无需发起 Ajax 请求或解析 JavaScript 脚本,就能获取到完整的页面。
预渲染方案的实现需要借助 prerender-spa-plugin 这个 webpack 插件,在进行构建时使用该插件即可将所有路由渲染成静态 HTML 文件。
-- -------------------- ---- ------- -- ------------- ----- ------------------ - -------------------------------- -------------- - - ----------------- -- -- - -- --------------------- --- ------------- ------- ------ - -------- - --- -------------------- ---------- -------------------- -------- ------- ----- --------- ------------ --- -- -- -- --
使用服务器端渲染(SSR)
除了预渲染以外,还可以使用服务器端渲染(SSR)方案,将路由信息在服务端进行渲染,这样 Web 服务就能将完整的 HTML 文件返回给浏览器,包括路由信息和页面数据等。
通过使用 SSR 方案,我们可以根据路由信息在服务端渲染出完整的 HTML 文件,将其返回给浏览器,从而解决 SPA 路由自动刷新对 SEO 的影响。Vue.js 也提供了 SSR 解决方案,我们可以借助 Nuxt.js 进行服务器端渲染。
使用 Nuxt.js 进行 SSR 也非常简单,只需要安装 nuxt.js,然后创建一个 pages
目录,按照 Vue.js 的组件规则,在该目录下创建对应的路由组件,Nuxt.js 会自动生成路由信息,并在服务端进行渲染。
-- -------------------- ---- ------- -- -------------- ---------- ------- --- -------- ----------- -------- ------ ------- - ------ - ------ - ---- ------- ------- -- -- -- ---------
// nuxt.config.js export default { head: { title: 'My awesome webiste', }, };
总结
前端 SPA 路由自动刷新虽然带来了很好的用户体验,但是对搜索引擎优化的影响不能忽视。我们可以使用预渲染或者服务器端渲染(SSR)方案来解决这个问题。预渲染适合对 SEO 的要求较低的应用场景,而 SSR 则适合对 SEO 要求较高的场景。在实际开发中,我们应该根据自身的业务需求和实际情况,选择最适合的方案来实现路由自动刷新。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e2b185f6b2d6eab3df5892