Hexo 部署在 Github Pages 怎么提交 Sitemap 给百度?来我教你

虽然度娘是一个垮掉的搜索引擎,但是谁叫它在强国是垄断的存在呢。谈谈 Hexo 部署在 Github Pages 怎么提交 Sitemap 给百度。

Sitemap

因为 Github Pages 禁止百度爬虫所以这里我们不做过多的说明,无疑这种方式是行不通的

自动推送

目前在用的一种推送方式

1
自动推送是百度搜索资源平台为提高站点新增网页发现速度推出的工具,安装自动推送JS代码的网页,在页面被访问时,页面URL将立即被推送给百度

安装方式也很简单,只需要在页面中加入以下 JS 即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>

主动推送 (实时)

我们重点来说说主动推送

首先我们这里需要安装一下生成 sitemap 的包

1
npm i hexo-generator-baidu-sitemap -s

新建文件 push_sitemap_to_baidu.php,这里我们通过 PHP 来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
// 解析xml
$file = "./public/baidusitemap.xml";
$xml = simplexml_load_file($file);
$urls = array();
foreach ($xml as $key => $value) {
$url = array();
$url = (array) $value->loc;
$urls[] = current($url);
}
// 调用百度API
$api = 'http://data.zz.baidu.com/urls?site=https://www.jakehu.me&token=***';
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", $urls),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
// 返回结果记录
$time = date("Y-m-d H:i:s");
$content = $time . " --- " . $result . PHP_EOL;
$file = "push_sitemap.log";
$fp = fopen($file, "a+") or die("fail to open the file");
fwrite($fp, $content);
fclose($fp);

最后会在根目录下生成 push_sitemap.log 日志文件

然后改造 package.json 如下

1
2
3
"scripts": {
"push": "hexo cl && hexo g && gulp && hexo d && php -f push_sitemap_to_baidu.php"
}

这条命令包含了清理生成压缩部署推送Sitemap,关于 gulp 压缩部分可看这里【点击查看】

最后我们可以直接运行命令进行部署和推送 npm run push,或者将 push 改为 start 直接运行 npm start 即可