使用 hexo-robots 来生成 robots.txt 文件

前言

使用 hexo-robots 来生成 robots.txt 文件

正文

对于一个静态网站来说,在被搜索引擎收录的过程中,会有很多的来自爬虫程序请求,但某些文件没有被爬取的必要,比如 js 文件、 css 文件、图片文件等等。 robots.txt 可以通过声明来让爬虫程序忽略某些文件。

相关的定义可以查看 Google 关于 robots.txt 的解释:robots.txt 简介

对于 hexo 来讲,在不使用其他任何辅助工具的情况下,可以直接在 _posts 中创建一个 robots.txt 文件,向里面编写内容即可。

这里要注意,如果未将 robots.txt 文件写入配置中的 skip_render 情况下,需要在头部声明 layout: false ,不然会生成 html 标签,造成 robots.txt 无效

1
2
3
4
5
6
---
layout: false
---

# 主体代码
# ...

这样配置之后,生成的 robots.txt 就是单纯的从 source/_posts 拷贝到输出目录中,但还有一个问题就是 layout: false 这一段并不会被删掉

这可能会导致搜索引擎在解析 robots.txt 的时候会报错,比如 Google Search Console 中:

所以我们可以去掉这个 layout: false ,然后把 robots.txt 加到 skip_render 配置中:

1
2
3
# _config.yml

skip_render: _posts/robots.txt

其实这样基本就可以了。

但是作为一个喜欢没事找事干的老孩,这不得用一个插件来实现实在是说不过去。

hexo-robots

综上所属,我编写了一个 hexo-robots 的插件,只需要在 _config.yml 添加相应的配置即可生成相应的 robots.txt 文件。

先安装 hexo-robots 这个包

1
npm install hexo-robots

接着在 _config.yml 添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
robots:
user_agent: "*" # 如果要写通配符,请务必要加上双引号,不然解析会报错
allow:
- /
disallow:
- /js/
- /css/
- /images/
- /archives/
- /page/
- /schedule/
- /tags/
sitemaps:
- https://prohibitorum.top/sitemap.xml
- https://prohibitorum.top/baidusitemap.xml

上面的就是目前该网站所使用 robots.txt 。

后记

该插件的核心是为 hexo 注册一个 generator 。它的形式看起来如下:

1
2
3
4
5
6
7
8
9
hexo.extend.generator.register(name, function (locals) {

// 如何生成 data 的逻辑

return {
path: "robots.txt",
data: "{{文件内容}}"
}
});