Hexo 博客配置 GitHub Actions 推送 indexnow

Hexo 博客配置 GitHub Actions 推送 indexnow
4rozeN什么是 IndexNow?
IndexNow 是一种开源协议,可以让网站所有者在网站内容出现变化(添加、更新或删除)后通知搜索引擎,让搜索引擎立即索引这些页面和内容。这使搜索引擎能够在其搜索结果中快速反映这种变化,从而提高整体抓取效率。
API Key
找到 Indexnow 官网生成 API Key(每点击一次 Generate 都会生成一个新的 Key):

验证网站所有权
你需要点击上图中 API Key 右边的下载按钮,将该 5617c6a058f84405b90e2a0c6e99519a.txt 文件保存好。
然后把它放到你的网站根目录下,让它可以通过网址链接 https://www.example.com/5617c6a058f84405b90e2a0c6e99519a.txt 的形式访问,并得到明文 API Key:5617c6a058f84405b90e2a0c6e99519a
比如,将 5617c6a058f84405b90e2a0c6e99519a.txt 放在 source 目录下,并在_config.yml 中配置 skip_render 如下:
1 | skip_render: |
这样可以确保 Hexo 不会尝试渲染这些文件,而只是将它们直接复制到 public 目录。
这样就做好了第一和第二步。
GitHub Actions 配置
GitHub 的 Actions 允许你运行一些小文件,我们可以采用 Python 脚本的方式来提交 URLs
编写提交 URLs 的 Python 脚本
我的 Python 文件如下(index_now.py):
1 | import requests |
脚本值得注意的点在于:
HOST = "userName.github.io"KEY = "5617c6a058f84405b90e2a0c6e99519a"sitemap_path = "sitemap.xml"
前面两个主要是配置成你自己的就行。
主要是第三个 sitemap 路径问题,我建议安装 hexo-generator-sitemap 插件,该插件在每次 hexo g 生成文件时重新生成新的 sitemap.xml 文件并放置在 public 目录下,这会使得它被推送时放置在仓库根目录下,符合我脚本的要求。
脚本编写好后,同样需要将其推送到仓库,我的是根目录。我将脚本同样放在 source 目录下,这样它会和 key.txt 一同被推送至仓库根目录。
本地创建 workflows
Hexo 配置
创建 GitHub workflow 一般是.github/workflows/xxx.yml
但是 Hexo 默认忽略以点(.example)开头的文件和文件夹,所以我的做法是修改_config.yml 中的 include 项,将其添加进去:
1 | include: |
此时还需要修改下 skip_render 这个配置,否则 hexo 会自动把 yaml 文件给转成 json 格式的,到时候 GitHub 是不识别的(_config.yml):
1 | skip_render: |
最后需要配置下 hexo 的 deploy 配置,不要忽略隐藏文件。否则在最后部署到 GitHub 时,隐藏文件会被忽略掉(_config.yml):
1 | deploy: |
.github隐藏目录相关配置项参考链接为:Hexo 博客使用 GitHub Actions 来自动提交 Sitemap
这样,Hexo 会将 source/.github 文件夹中的内容也复制到 public 目录中,一旦执行 hexo d 命令便会部署到 GitHub。
不过你得确保你的 .github 目录直接放在 source 目录下,即结构如下:
1 | your-hexo-site/ |
这样一来,当你推送代码至仓库时,GitHub 会自动触发 Actions 运行你的 your-action.yml 文件,所以需要在这个 yml 文件中调用我们写的 Python 脚本。
编写 action 触发文件
我的 indexnow.yml 文件(名字可以随意,但请具有语义性)如下:
1 | name: Submit IndexNow Request To Bing |
该文件值得注意的点在于:
branches: ["master"]python index_now.py
注意修改成你的配置项就行。
至此准备工作已经完毕,你只需要推送新代码到仓库就会自动触发 actions 发请求给必应的 indexnow,最终你可以在必应网站管理员工具查看效果。
- 注:实际上你也可以单独在本地运行该 python 文件,效果是一致的。