背景介绍

Github Pages + Hugo 搭建静态博客一文中,介绍了如何使用Github pages搭建个人博客。搭建博客后发现Google已经收录了,但是百度却迟迟没有收录,使用百度的“搜索资源平台-抓取诊断”功能对网站进行抓取测试发现抓取失败了,结果为403 Forbidden。

403 Forbidden

出现这个错误的原因是Github屏蔽了百度爬虫的抓取。这个该怎么解决呢

可选的解决方案

  1. 当百度不存在:这个方案最方便,实现起来也最简单,但是作为中文网站,大部分的人可能还是通过百度来发现网站内容的,抛弃百度等于是和相当一部分的读者Say goodbye了。Pass
  2. 抛弃Gihub pages,使用其他产品(VPS,Gitlab等):VPS需要花钱、花精力去维护,Gitlab响应速度要比Github慢接近一倍。Pass
  3. 使用CDN:这个方案需要网站有一定的访问量,并且需要花钱买服务(短期免费的CDN也只能维持一段时间,不可持续),Pass
  4. 双仓库+多路解析:使用Coding pages 和 Github pages双站点,结合多路解析实现让百度爬虫访问Coding pages,其他用户直接访问Github pages。这个需要有自己的自定义域名。本文采用该方案。

具体实现方式的选择

为什么用Coding pages

目前国内免费的pages服务主要是Coding pages 或者 码云,Coding pages可以免费支持自定义域名,码云需要开通VIP才能只用自定义域名。

为什么只让百度爬虫访问Coding pages,而不是让国内用户都访问Coding pages站点

实际测试发现Coding pages的响应速度不太稳定(好的时候甩Github几条街,差的时候都吸不到Github的尾气),而国内访问Github pages的速度比较稳定,速度也可以接受,所以让正常访客直接访问Github Pages。

部署过程

双站点部署

访问腾讯云开发者平台(Coding Pages和腾讯达成合作,现在个人用户全部使用腾讯云开发平台了,从coding.net进入也一样会让你登陆腾讯云开发平台)。然后进入控制台,新建项目(这个项目等价于Github的Repository),和Gihub类似,输入项目相关信息,勾选公开源代码。项目创建完成后将从本地将Github Pages仓库push到Coding Pages仓库中。项目的名称和链接名称可以随意制定,不需要为用户名,下面假设项目名称和链接均为blog

#将本地仓库Push到Coding上
git remote add blog https://git.dev.tencent.com/huliujia/blog.git  #这里可以改为git协议,需要配置SSH公钥
git push blog master

然后在项目主界面,点击”代码” -> “Pages 服务”,开启Coding Pages服务。正常的话,就会看到部署成功的信息,也可以看到Coding Pages访问链接,访问即可看到和Github Pages一样的博客内容。本示例中的访问链接为 http://huliujia.coding.me/blog/。此时双站点部署完成。

配置多路解析

前往自定义域名提供商的网站修改域名解析,我使用的是腾讯云的域名服务,但是在腾讯云的域名解析路径选项中没有”百度“,腾讯云的域名解析是由dnspod.com提供的,前往dnspos.com可以配置更为精细化的域名解析策略(需要使用和腾讯云相同的登陆方式和账号,比如我是使用微信登陆腾讯云的,那么直接使用微信登陆dnspod就可以看到自己的域名了)。

在域名解析中分别创建指向Github Pages域名和Coding Pages域名的解析规则,其中指向Github Pages的线路类型设置为”默认“,指向Coding Pages的线路类型设置为”百度”。详细配置如下图:

dns解析

在Coding Pages中绑定自定义域名

Coding Pages不支持直接读取CNAME,所以需要手动设置,在 Pages服务界面点击设置图标,根据官方提示进行设置,这里不再赘述了。

如何解决Coding Pages强制使用HTTPS后,绑定域名出现SSL证书申请错误。

Coding Pages的服务器是在香港的,申请证书是认证方需要解析自定义域名,确认自定义域名是跳转到Coding Pages的,前面说了只有百度会跳转到Coding Pages,所以这里为了完成认证,需要先手动将指向Coding Pages的解析路径设置为默认(暂停Github的解析),完成SSL认证后再将域名解析恢复到原来的多路解析。不过这个认证的有效期只有3个月,过了3个月又要再次操作一遍。嫌麻烦的话,可以将Coding Pages的HTTPS选项关闭,就不需要SSL证书了,但是这个会让网站变成http的,搜索引擎给HTTP的评分低于HTTPS,也就是说网站排名和搜索结果展示会因此受到一定程度的影响。