VPS 需要定期续费,域名也是,万一我哪天嘎了,域名过期主机欠费,我的博客也就销声匿迹了。我希望它能活得久一点,毕竟是自己一手带大的。眼下最好的选择应该就是托管 github pages 了吧,比起被随意关停的产品,作为世界上最大的代码托管网站和开源社区,github 可以被转手,但绝不会轻易消失。除非哪天说要 archive 长期不活跃的仓库和账号,哈哈。不管怎么说,目前来看都是相当好的选择了。用户多、服务稳定还免费。
于是开始着手备份。之前听到过 Hugo 和 Hexo 这些静态网站框架,没多想,选了 Hexo,先上手搞起来再说。
迁移文章
首先到 wordpress 后台自带工具里导出所有数据,得到一个 xml 文件。
然后安装 hexo 还有导入工具 hexo-migrator-wordpress。并将 wordpress 的 xml 导入成 hexo 的文章。
npm install hexo-migrator-wordpress --save hexo migrate wordpress WordPress.xml --paragraph-fix --import-image --skipduplicate
导入完后其实还是要检查下。比如有些文章的图片链接没有识别出来,变成 markdown 后还是指向原站,就要查找替换成新站的图片目录。导入后的图片是散落在 source 目录下的,把图片归类之后又要批量替换掉 .md 里的所有链接。
代码块也要修复,还好是原生支持的,把标签替换成 {% code lang:php %} … {% endcode %} 就好了。
用 migrator 导入进来有个问题,wp 里代码块的换行全消失不生效了,应该是没处理换行符。所以副站现在的代码块还是一片狼藉。不知道是不是我导入时有什么参数没指定好,有机会再搞吧。
还有 post 的固定链接,导入后是以文章名为永久链接的,地址栏里一堆 %XX 看得我头疼。观察到导入的 .md 文件中含有 wp 的 id,比如文件开头就有文章元数据id: ‘2329’
,于是到 hexo 的配置文件 _config.yml 里找到 permalink 改掉就好 permalink: :id/
。
总之就是这样,一点点修改文章的数据和分类,让它尽量跟原来一样。
其他
主题就选用了 Next。暂时没有太多需求,就先用着了。
至于评论,现在博客里的评论其实挺少。而且只是建一个备份站,并不是完全迁移,所以评论就先不处理了。等到哪一天主站也不用 wp 时再一块转移吧。
有一两篇文章里用了数学公式,这个暂时也没搞,似乎可以用 hexo-renderer-pandoc 这个插件。
最后再处理一下 SEO,因为现在原站和副站同时运行了,搜索引擎检查到重复内容可能会降权之类乱七八槽的,所以打算把副站禁用爬虫。
一开始我是添加了 canonical 规范,把副站的页面尽可能对应到原站页面,文章自不必说,还有分类目录、tags 和分页页面,都加上了原站地址。这里还要吐槽下,hexo 添加的 canonical 地址域名似乎只能是副站的地址(即 _config.yml
里的 url:
),导致我不得不再搞个脚本替换域名和一些 url path 上的差异。
然后又担心只设置 canonical 会不会有意外状况导致副站仍然被索引,万一搜索引擎不讲武德呢。要是两个页面同时出现那也挺头疼。所以最后又打算加上 noindex 和 robots.txt 限制。
robots.txt 里设置 Disallow。然后所有 html 页面的 head 里都加上
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
到这里就算差不多搭完了,push 到 github 上看看效果。
副站的网址也已经添加到网站底部了👇