博客本来用的是 github pages,但貌似由于百度爬虫太疯狂,被 github 给 ban 掉了。根据 marketmechian 的数据,在中国大陆搜索引擎界,百度还是占了半壁江山:
- Baidu: 67.09%
- Sogou: 18.75%
- Shenma: 6.84%
- Google: 2.64%
- bing: 2.6%
- Other: 2.08%
而作为一个中文博客,还是希望能够被更多的国内用户看到,因此一直在寻求一个使得百度爬虫自动爬取博客的方法。偶然间在浏览博客时,看到了有人在推荐 zeit.co 这个托管平台,使用了下,发现真是个非常棒的静态代码托管+CI Serverless Function 平台,在这里推荐给大家。
作者:木鸟杂记 https://www.qtmuniao.com/2020/03/15/hexo-to-zeit-co/, 转载请注明出处
几种方法
网上有很多方法可以使百度爬虫爬取博客页面,总结起来主要有:
- CDN,利用云服务提供商将 blog 多做几个镜像。
- 换托管平台,比如说国内的代码托管平台。
- 自行使用 VPS 托管。
CDN 比较贵,又不想换托管平台,VPS 大陆访问速度不快。因此这件事一直搁置。
zeit.co(vercel)
这天在搜索资料时,注意到有博主 [1] 提到 zeit.co,一个静态网页和无状态函数托管的云平台。试用了之后,感觉非常强大,它能够以 Github App 的形式与 GitHub 集成,接管 repo 的 CI,进行深度定制,并且能够快速部署、自动伸缩。
关键是,现在基本功能是免费的,这对于我们托管博客来说,已经很够用了。更惊喜的是,它还提供智能 CDN 和智能 DNS。
改造
了解到 zeit 的优势后,就开始着手改造博客的托管方式。主要有以下几个步骤:
- 静态代码生成修改
- 代码库导入 zeit
- 修改 dns 指向
静态代码生成
并不是所有人都需要这一步,我需要只是因为之前不太懂 hexo 的工作机制,自己坑了自己。
之前我只使用了一个 repo 来管理所有博客代码:用 master 分支作为 hexo 开发分支,使用 gh-pages 分支作为静态代码分支,然后将 repo 的 github pages 指向 gh-pages 分支,以发布博客。
由于 zeit 只能给 repo 的默认分支(即 master)做 CI,因此使用 zeit 托管 hexo 博客至少有两种方式:
- 托管 Hexo 开发代码。使用 zeit 接管 hexo 仓库代码,并为其配置 CI:每次往 master push 代码时,触发 CI,编译生成静态网页代码到 public 文件夹,然后将 public 文件夹发布。
- 托管静态网页代码。让 hexo 每次将静态网页代码生成到一个新的 repo 的 master 分支,然后将该 repo 导入到 zeit 进行托管。
我使用第一种的时候,发现 hexo build
老是失败,后面发现是我由于深度定制 NexT,修改了 NexT 主题的一些代码,但是并没有将其提交到仓库中。因为我本地的 NexT 主题代码仍然通过 git 关联着官方 NexT repo,以便及时 pull 最新特性,所以没有将其纳入 hexo 的仓库中。这一块深究一下应该也有解决方案,但是我懒,就选择了更简单的第二种托管方式:
将 hexo 代码库中配置文件 hexo/_config.yml
中部署方式修改如下:
1 | 78 # Deployment |
每次执行命令 hexo d -g
时,就会将生成的静态网页代码 push 到 repo blog-publish
下:
这样还有额外的好处,就是以前我很蠢的将各种配置(包括我的一些网站的秘钥)暴露在了 git 的公共仓库中(因为 private 仓库不能用 github pages),使用第二种部署方式,我将我的开发 repo 和静态代码 repo 都设置为了 private。此外,zeit 会获取导入 repo 的所有读写权限,还是有点小颤抖,因此,搞一个额外的静态代码 repo 在这里很合适。
代码 repo 导入 zeit
Zeit 网页界面很简洁,还算比较好用。
注册。打开登陆页面:https://zeit.co/login,使用 GitHub 账号登陆即可。
导入。在主页面点击 “Import Project”,然后 “Import Project From Git Repo”,选择 GitHub。进行一下授权,注意只需导入静态代码仓库 blog-publish
。
部署。导入过程中,选择 other 模板即可,默认 ci 命令不用改,Root Directory 也不用改,导入完成后就会自动帮你 deploy。
最后在部署卡片中就可以看到 zeit 生成的 URL:
修改 DNS 指向
如果你有自己的域名,需要在域名服务提供商(阿里云、GoDaddy等)的 DNS 解析中增加一条 CNAME 记录(将你的域名指向另一个域名):
1 | www CNAME 默认 blog-publish.now.sh. 0 600 |
百度爬取
最后在百度站长工具页面,在 数据监控 > 抓取诊断,进行测试。
坑爹的是,我之前在域名解析时为百度爬虫配置了专门的线路,让其去我的 vps 抓取(当然最后没有成功,不然也就不会有本文了)。现在将那条记录去除后,百度爬虫这边时时不更新我的域名所对应 IP,点击报错后,提示几分钟后更新,然而几个小时过去了,依然未更新,当然这就是后话了。
参考
[1] 解决百度爬虫无法爬取 Github Pages 个人博客的问题:https://zpjiang.me/2020/01/15/let-baidu-index-github-page/
[2] zeit.co 帮助文档:https://zeit.co/docs