背景观察基于create-react-doc构建的文档站点,发现网页代码裸露(见下图)。这显然是单页应用程序(SPA)站点的一个常见问题-这对文档的可搜索性(SEO)不利。SPA网站是不是做不了SEO了?那为什么Gatsby、nuxt等框架会成为很多博主搭建博客的首选呢?启用S??EO的此类框架的技术原理是什么?在好奇心的驱使下,作者尝试在creat-react-doc上进行一次SEO赋能之旅。在练习搜索引擎优化之前,先从理论上分析为什么单页应用无法被搜索引擎搜索到。核心是爬虫蜘蛛在爬取过程中不会执行网页中的JS逻辑,所以隐藏在JS中的跳转逻辑不会被执行。看现在SPA站点的打包代码,除了一个根目录index.html,其他都是注入JS逻辑,浏览器自然不会对其进行SEO。此外,详细的搜索引擎优化是一门比较复杂的科学。如果您对SEO优化比较陌生,建议阅读《搜索引擎优化(SEO)新手指南》一文。Google搜索中心提供了17种最佳做法和33种应避免的做法的完整列表。这也是笔者近期实践的一部分。.SPA站点SEO实战案例在轻文档站点的背景下,我们暂时不考虑SSR方案。笔者调研了市面上文档站点的SEO方案后,归纳为以下四类:静态模板渲染方案404重定向方案SSG方案预渲染方案静态模板渲染方案Hexo是最典型的静态模板渲染方案,以及这类框架需要指定一种特定的模板语言(如pug)来开发主题,从而达到直接输出网页内容的目的。404重定向方案404重定向方案的原理主要是利用GitHubPages的404机制进行重定向。典型案例包括spa-github-pages和sghpa。但不幸的是,谷歌在2019年调整了其爬虫算法,因此这种重定向方案目前不利于SEO。spa-github-pages的作者也说过,如果你需要SEO,使用SSG计划或付费计划Netlify。SSG方案SSG方案的全称是staticsitegenerator,中文可以翻译为静态路由方案。社区中的nuxt、Gatsby等框架的SEO赋能技术,无一例外都可以归为此类SSG解决方案。以nuxt框架为例,它在常规路由的基础上,通过执行nuxtgenerate命令将vue文件转化为静态网页。示例:-|页数/---|关于.vue/---|index.vue/变为静态:-|距离/---|关于/-----|index.html---|index.html静态路由后,此时的文档目录结构可以被任何静态站点服务商托管。预渲染方案经过上面SSG方案的分析,SPA站点优化的关键已经跃然纸上——静态路由。与nuxt、Gatsby等框架对常规路由有限制相比,create-react-doc在目录结构的组织上灵活自由。它的建站理念是文件就是网站,迁移已有的markdown文档也很方便。以博客项目结构为例,其文档结构如下:-|基本技能/---|基本/-----|DOM.md-----|HTML5.md应该变成:-|基本技能/---|基本/-----|DOM------|index.html-----|HTML5--------|index.html经过研究,思路和prerender-spa-plugin预渲染方案一拍即合。预渲染方案的原理如下图所示:至此,技术选型确定为使用预渲染方案实现SSG。预渲染方案实践create-react-doc预渲染方案实践中的步骤简单总结如下(完整改动见mr):将hash路由转化为history路由。因为历史路由结构自然匹配文档静态目录结构。exportdefaultfunctionRouterRoot(){return(-
