hexo-submit-urls-to-search-engine 中文文档

English Documentation

hexo使用hexo-submit-urls-to-search-engine插件后,可主动推送Hexo博客新链接至谷歌、必应、百度搜索引擎站长平台以提升网站收录质量和速度。本插件允许你向各大搜索引擎发送纯天然、植物饲养的索引编制请求,一劳永逸。

比如,现在我的一篇文章有时刚发布 5 分钟,即可在必应搜索到(这是最佳情况,不保证长期稳定)。看吧,这就是 hexo-submit-urls-to-search-engine 的威力。百度与谷歌略慢一筹。

这三大搜索引擎已占据 97% 的全球搜索引擎市场份额(包括元搜索引擎 多吉、Duckduckgo 等;使用 Bing 索引的雅虎、 Ecosia 等)。后期可能会加入向 Yandex(官方现仅开通重点页面提交)、360(目前官方没开通)提交链接的功能。另外我已向 360 、Yandex 提交了关于增加 API 提交接口的建议。它们的反馈:

  • 360,2020.7.3:感谢您的支持,我们记录下您的建议,转给给相关工作人员查看评估下
  • Yandex,2020.8.15:Thank you for contacting and sharing your thoughts with us. I’ve added your suggestion to the list of ideas considered by our developers.

警告
非专业使用其他类似的推送代码可能会导致危险的副作用,包括但不限于:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、怀疑人生、抑郁、头疼,甚至死亡、魂飞魄散、湮灭。

Github地址

目录:

操作步骤

快速入门:

  1. 获取各站长平台密钥
  2. 安装并配置hexo-submit-urls-to-search-engine插件
  3. hexo clean && hexo g && hexo d,并查询推送结果
  4. 如果推送成功,前往 Github 地址点击 Star 按钮以支持
  5. 顺便 watch Github 项目获取插件升级提醒
  6. 还可以点此去打赏

获取站长平台密钥

本节所“记下”的密匙均填写至 hexo 的 _config.yml ,格式在后文给出。

关于验证网站:有的 Hexo 主题支持添加站长平台 html 验证标签,填写有关设置后hexo g && hexo d即可验证。通用详细操作步骤请自行 谷歌 / 百度 :hexo 站长平台 验证

百度

  1. 注册、登陆百度搜索资源平台( https://ziyuan.baidu.com/
  2. 用户中心,站点管理,添加网站
  3. 搜索服务,普通收录,API提交,记下下方接口调用地址的【百度站长平台中注册的域名,密匙】:http://data.zz.baidu.com/urls?site=https://cjh0613.github.io&token=密匙,这里即【 https://cjh0613.github.io ,密匙】

提示
如果网站使用 github page 发布,建议删掉百度站长平台的 sitemap ,用 API 主动提交,我从 5 月底开始百度索引掉了一半,最后发现是当时加 sitemap ,但百度对 github 托管的 sitemap 不友好,动不动抓取失败,影响网站权重。删并用 API 推送后,索引量迅速回升

我建站以来索引量变化

另外,github.io 2020.9月前就被特殊照顾了,建议自行购买顶级域名使用。

github.io 状态

必应

必应站长平台有新旧之分。

  1. 注册、登陆必应新站长平台( https://www.bing.com/webmasters
  2. 添加网站
  3. 进入网站管理页面,设置,API 访问,API 密钥 ,记下 API 密匙

从 URL 提交打开设置

API 访问界面

从必应新站长平台获取 API 密匙

(近期必应站长平台升级,服务器、版面不稳定,如果无法显示 token ,可以过段时间再试)

这是从必应旧站长平台获取的示意图:

从必应旧站长平台获取必应网站管理员 API 密匙

谷歌

提示
需要科学上网。不仅访问谷歌站长平台时需要,而且部署 hexo 的计算机也需要。实测中国内地 ssV4.1.8 科学上网的 windows 无法使用 googleapis ,也无法使用本插件向Google提交的功能。(V2.1.0及更高版本支持设置代理,向谷歌推送)
我使用境外 持续集成服务 Travis_CI,解决了这个问题
【您可以在文末将您的有关解决方案留言,以便大家参考,谢谢】

谷歌站长平台也有新旧之分,但两站关系没有必应处理得好。另外,我们使用的 Google Indexing API 不是站长平台提供的,而是隶属 google developers 谷歌开发平台。过程中,您可参考官方文档(中国内地可访问)进行配置。

使用步骤:

  1. 打开官方文档,按提示创建项目、创建服务帐号。只需要按提示在网站进行配置操作即可,不需要完成获取访问令牌等后续操作
  2. 您仅按谷歌官方文档在 Google 新的搜索控制台 中添加权限邮箱还是会提示无权限。请转到 旧的网站站长工具 ,点击您的网站,把邮箱地址添加到其中
  3. 将获取到的 json 密匙文件放于 hexo 根目录(与hexo _config.yml文件位置相同)

谷歌旧的网站站长工具:

旧的网站站长工具1

旧的网站站长工具2

另外,其官方文档中有如下提示,请根据实际情况决定是否启用向谷歌提交链接的功能:

目前,Indexing API 只能用于抓取包含 JobPostingBroadcastEvent(嵌套于 VideoObject的网页。对于包含很多短效网页(如招聘信息或直播视频)的网站,Indexing API 会通过为不同的内容分别推送更新,使搜索结果中的内容保持最新状态。

反正我提交了。谷歌不抓怎么知道您的网页不包含招聘信息或直播视频呢?既然抓了,即使没发现招聘信息或直播视频,又有什么原因浪费资源、把已抓取的信息弃之不用呢?既然用,我们的目的就达到了。实际使用过程中,谷歌好像也没有对此进行降权。也许是谷歌忘了改文档?我目前就发现这个文档中有两处多年未改的严重错误。

配置hexo

提示
推荐使用境外 CI (持续集成)服务,如 Github Action、Travis,这样可以顺利推送至谷歌。本插件支持利用 CI 的环境变量设置记录密匙

安装本插件

请在 hexo 根目录运行:

当然,在大中华地区使用cnpm下载速度更快

1
npm install --save hexo-submit-urls-to-search-engine

本插件也支持yarn安装:

1
yarn add hexo-submit-urls-to-search-engine

编辑hexo的_config.yml

hexo-submit-urls-to-search-engine

配置 hexo-submit-urls-to-search-engine 插件,将下方粘贴至 hexo 的_config.yml

提示
您当然可以利用 CI 的环境变量设置记录密匙,这样即使源码放在公开仓库,也不会泄露秘钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
hexo_submit_urls_to_search_engine:
submit_condition: count #链接被提交的条件,可选值:count | period 现仅支持count
count: 10 # 提交最新的10个链接
period: 900 # 提交修改时间在 900 秒内的链接
google: 0 # 是否向Google提交,可选值:1 | 0(0:否;1:是)
bing: 1 # 是否向bing提交,可选值:1 | 0(0:否;1:是)
baidu: 1 # 是否向baidu提交,可选值:1 | 0(0:否;1:是)
txt_path: submit_urls.txt ## 文本文档名, 需要推送的链接会保存在此文本文档里
baidu_host: https://cjh0613.github.io ## 在百度站长平台中注册的域名
baidu_token: 请按照文档说明获取 ## 请注意这是您的秘钥, 所以请不要把它直接发布在公众仓库里!
bing_host: https://cjh0613.github.io ## 在bing站长平台中注册的域名
bing_token: 请按照文档说明获取 ## 请注意这是您的秘钥, 所以请不要把它直接发布在公众仓库里!
google_host: https://cjh0613.github.io ## 在google站长平台中注册的域名
google_key_file: Project.json #存放google key的json文件,放于网站根目录(与hexo _config.yml文件位置相同),请不要把json文件内容直接发布在公众仓库里!
google_proxy: http://127.0.0.1:8080 # 向谷歌提交网址所使用的系统 http 代理,填 0 不使用
replace: 0 # 是否替换链接中的部分字符串,可选值:1 | 0(0:否;1:是)
find_what: http://cjh0613.github.io/blog
replace_with: https://cjh0613.com

将密钥公开的后果
您的“冤家”、有自我意识的人工智能、恐怖分子可能使用您的密钥向搜索引擎推送不存在的页面链接。既消耗您的配额让您无法正常推送,又因推送死链导致网站权重下降

注释

  • submit_condition:支持两种是否提交链接的判断方式,即 count | period 。分别应用下方 count | period 配置项
  • period:一段时间,单位秒,若文章更新时间与本插件运行时间之差小于这个数值,其链接会被提交。例如:有两个文件 a.html 和 b.html,分别对应 https://yoursite.com/a.htmlhttps://yoursite.com/b.html,其更新时间与本插件运行时间之差分别为 800s 和 1000s(period 字段设为 900),则 https://yoursite.com/a.html 会被提交,https://yoursite.com/b.html 不会
  • google_proxy:向谷歌提交网址所使用的系统 http 代理,格式:http://proxyhost:port,修改proxyhostport即可;Hexo 部署于境外可填 0 不使用。使用科学上网软件,proxyhost一般为127.0.0.1port可在软件中查看设置,一般为8080。Win10 可在 设置->代理 处查看
  • replace: 部分链接可能生成不正确(如中文域名,首页位于http://cjh0613.github.io/blog等情况)。这是一个简单粗暴的替换功能,将生成的全部链接中的指定字符串以替换。示例中将 http://cjh0613.github.io/blog 替换为 https://cjh0613.com。也可将中文域名替换为转码后的域名。

2020.7.12 更新本节注释,感谢 liuyib 提供建议
2021.5.12 添加 google_proxy

完成上述配置后,你在 Hexo 根目录下运行 hexo generate 指令时,会生成一个 .txt 文件来存储要推送的链接。

您可以打开此文件查看链接是否正确,如不正确,请访问 hexo 的 _config.yml 进行配置。您也可以手动修改此 .txt 文件后再推送链接。

deploy

如果您之前没有添加过 deploy: 配置项,直接将下方粘贴至 hexo 的 _config.yml ,覆盖默认的 deploy: 配置项。

1
2
3
4
deploy:
- type: cjh_google_url_submitter
- type: cjh_bing_url_submitter
- type: cjh_baidu_url_submitter

完成这一步之后,运行 hexo deploy 命令时就可以自动推送链接至搜索引擎了。

  • 您必须运行 hexo deployhexo d 命令以触发推送,无论您之前是否使用这条命令进行部署。

当然此前您需要运行 hexo generate 生成最新的 .txt 文件来存储要推送的链接。

如果可以推送成功,烦请至Github仓库 Star 支持一下,谢谢!

如果已设置过 deploy: 配置项,直接粘贴上述代码块会提示 配置冲突,直接在已有 deploy: 配置项下添加即可。如:

1
2
3
4
5
6
7
8
9
10
deploy:
- type: git
repo:
coding: git@xxx
branch: master

#添加本插件的配置项:
- type: cjh_google_url_submitter
- type: cjh_bing_url_submitter
- type: cjh_baidu_url_submitter

注意:上面每个 type: 前都有 -

持续集成支持

本节为 hexo 存放于公开仓库,且使用 CI (持续集成,如 Github action, travis, coding-ci, netlify 等)编译发布的部署方式提供参考。

百度、必应可利用环境变量记录密匙,谷歌有其他解决办法,参见下文

请注意,如果您使用 CI 自动部署,请务必在每个页面的 Front-matter (.md文件最上方以 --- 分隔的区域,用于指定个别文件的变量)中添加updated:来告知 Hexo 修正“文章最后修改时间”,举例来说:

1
2
3
4
5
---
title: Hello World
date: 2013/7/13 20:46:25
updated: 2020-08-25 9:36:00
---

这是因为,文件放在本地计算机上时,如果没有updated:,Hexo 会读取文件属性,使用“文件最后修改时间”作为“文章最后修改时间”,可以正常判断并提交最新的 10 个链接;而 CI 自动部署时,由于 Hexo 资源都是才 clone 到服务器上的,如果没有添加updated:,Hexo 同样会读取文件属性,但此时属性中最后修改时间是完全相同的 git clone 的时间,Hexo 得到错误的“文章最后修改时间”,就无法正常判断并提交最新的链接了。

  1. 请先在hexo_submit_urls_to_search_engine:的配置项baidu_token:bing_token:处填写0
  2. 设置环境变量BAIDU_TOKENBING_TOKEN,值为已获取的token
  3. 如果您使用 Github Action ,还需在 yml 文件中设置环境变量,下方有例子
  4. hexo clean && hexo generate && hexo deploy享受生活

设置环境变量

参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
hexo_submit_urls_to_search_engine:
submit_condition: count #链接被提交的条件,可选值:count | period 现仅支持count
count: 10 # 提交最新的10个链接
period: 900 # 提交修改时间在 900 秒内的链接
google: 1 # 是否向Google提交,可选值:1 | 0(0:否;1:是)
bing: 1 # 是否向bing提交,可选值:1 | 0(0:否;1:是)
baidu: 1 # 是否向baidu提交,可选值:1 | 0(0:否;1:是)
txt_path: submit_urls.txt ## 文本文档名, 需要推送的链接会保存在此文本文档里
baidu_host: https://en.cjh0613.com ## 在百度站长平台中注册的域名
baidu_token: 0 ## 请注意这是您的秘钥, 所以请不要把它直接发布在公众仓库里!
bing_host: https://en.cjh0613.com ## 在bing站长平台中注册的域名
bing_token: 0 ## 请注意这是您的秘钥, 所以请不要把它直接发布在公众仓库里!
google_host: https://en.cjh0613.com ## 在google站长平台中注册的域名
google_key_file: Project.json #存放google key的json文件,放于网站根目录(与hexo _config.yml文件位置相同),请不要把json文件内容直接发布在公众仓库里!
google_proxy: 0 # 向谷歌提交网址所使用的系统 http 代理,填 0 不使用
replace: 0 # 是否替换链接中的部分字符串,可选值:1 | 0(0:否;1:是)
find_what: http://cjh0613.github.io/blog
replace_with: https://cjh0613.com

Github Action ,还需在 yml 文件中设置环境变量:

1
2
3
4
5
6
7
8
9
- name: xxxx #随便填
env:
BAIDU_TOKEN: ${{ secrets.BAIDU_TOKEN }} # 注意这里,其他的都是浮云
BING_TOKEN: ${{ secrets.BING_TOKEN }} # 注意这里,其他的都是浮云
run: |
npm i -g hexo-cli # 安装hexo
npm i
……
hexo deploy

至于用境外 CI 推送链接至谷歌,json密钥文件里信息那么多,复制粘贴设置环境变量……咳咳。我将json密钥文件放入一个私有仓库, 再 clone ,复制到根目录下解决。

1
2
3
4
hexo generate
git clone https://cjh0613:${Token}@github.com/cjh0613/存放密钥文件的私有仓库.git tem
cp ./tem/Project.json Project.json
hexo deploy

完美!

插件升级

插件升级提醒

您安装本插件后,请从 Github watch 本项目,以获得插件升级提示选择 Releases only 仅获取升级提示,选择 Watching 还会推送 Issues ,Pull requests 等,通过电子邮件发送

选择 Releases only

升级操作

请在 hexo 根目录运行:

当然,在大中华地区使用cnpm下载速度更快

1
npm install --save hexo-submit-urls-to-search-engine@版本

我之前给出的是另一个命令:npm update --save hexo-submit-urls-to-search-engine,但我实测时出现了问题。

yarn升级:

1
yarn add hexo-submit-urls-to-search-engine@版本

不兼容升级

警告
有时,插件升级不向下兼容,可能会需要您修改 hexo 的_config.yml中与本插件有关的配置项,或作其他修改。
此情况一般伴随 版本号中第一个小数点前的数字增加 出现。如 ^1.0.0 升级至 ^2.0.0

1.x.x升级至2.x.x:

您需要给hexo_submit_urls_to_search_engine:配置项添加以下三个配置项:

1
2
3
replace: 0  # 是否替换链接中的部分字符串,可选值:1 | 0(0:否;1:是)
find_what: http://cjh0613.github.io/blog
replace_with: https://cjh0613.com

好吧,我发现这次升级是向下兼容的,即使没有这三个配置项也不会报错……

返回信息

成功推送信息

必应

1
Bing response:  { d: null }

百度

1
Baidu response:  {"remain":2999,"success":1}

谷歌

1
2
3
4
5
6
7
8
Google response:  { urlNotificationMetadata:
{ url:
'https://cjh0613.github.io',
latestUpdate:
{ url:
'https://cjh0613.github.io',
type: 'URL_UPDATED',
notifyTime: '2020-06-12T05:37:25.701779228Z' } } }

其他

其他返回可参考它们的官方文档,但一般翻译一下返回就知道原因了。

有时是因为搜索引擎每天只允许提交一定数量的链接。可登陆它们的官网查询。我站点域名cjh0613.github.io换为 cjh0613.com 后,必应配额 10 条,连续推送 10 天后,配额突然从 10 变为 10000。

若部分链接推送失败请人工处理:根据反馈来修改保存提交链接的 txt (一般把成功推送的链接去掉),然后只运行 hexo deploy 重新推送,不必重新生成网站。

如果想每天向搜索引擎推送链接,每天运行hexo d即可,也可以设置 Github Action 每天运行hexo g && hexo d,不必重造轮子。

查询结果

查询索引

以查询本站索引为例,打开任一搜索引擎,输入 site:域名 ,这里即:

1
site:cjh0613.github.io

搜索即可。

新站索引量 0→1 需要的时间可能很长,也许一个月……请耐心等待

实际收录速度还与其他因素有关,网上 SEO 资料很多,但都是以官方说明为中心的,可参考 [转]搜索引擎优化[SEO]新手官方指南,我也写了一篇 Hexo搜索引擎优化[SEO]

查询推送记录

必应

可登陆必应新站长平台查到详细的推送链接列表(实时更新):

1
https://www.bing.com/webmasters/submiturl?siteUrl=你的网站链接

也可以从必应旧站长平台进入

必应推送记录及剩余配额查询

百度

登陆百度搜索资源平台( https://ziyuan.baidu.com/ ),搜索服务,普通收录,数据反馈,仅可在给出的图中查看到过去一段时间中,每天的推送数量,且延期更新。由于百度与此相关的具体期限不确定,您实际最快在第t+1天、最慢在第t+3天才可以看到第t天的推送链接数。

谷歌

仅可在下方地址“错误”表格中查到一段时间内(最多近30天)累计推送链接数量及失败推送所占百分比(实时更新),虽然给了每天提交数据图,但相当于没给……

1
https://console.developers.google.com/apis/api/indexing.googleapis.com/metrics?project=

谷歌推送推送链接数查询

我开发的参考资料

推送至百度的代码参考自插件:hexo-baidu-url-submit。如果您之前使用该插件,现在可以停用它了。它另外提供向熊掌推送的功能,但百度熊掌已经关闭。百度将熊掌推送升级为“快速收录”,如您有需求,且您网页满足要求,可以使用此功能,请至issues/8投票,我视人数决定;或提交 Pull Request。

本站还有许多与此相关的文章,比如使用 python 从 sitemap 获取链接推送,您可至归档页点击查看,也可使用右上角搜索查找您感兴趣的内容。

下方整理不全……有些没来得及记录,还参考了我之前写的文章及它们的参考资料。

(您还可以在归档页搜索文章标题)