百度

验证方式是往 <head> 里塞一个 meta:

<meta name="baidu-site-verification" content="codeva-xxxxxxx" />

Butterfly 有现成的位置,_config.butterfly.yml 的 inject.head 里加一行:

inject:
head:
- <meta name="baidu-site-verification" content="codeva-xxxxxxx" />

验证过了之后提交 sitemap,会看到一个意料之外的东西:配额 0。

sitemap 提交页 0,API 提交页也是 0。

新站就是这样。配额按站点信用动态给,要等收录几十篇之后才会涨上去。

但它限制的只是「你主动推」这一条路。robots.txt 里写好了 Sitemap: 声明,蜘蛛正式抓取之前一定会先读 robots.txt,读到就会来找——这条路不占配额。

顺带还遇到一次抓取诊断报 DNS无法解析IP,0.001 秒就返回了。同一时间四个公共 DNS 加权威 NS 全是正常的,是它工具自己抽风。隔了半小时再点,过了:

220.181.108.145  GET /  200  15048

220.181.108.x 是百度蜘蛛的官方段。

Google

文件验证。下载回来那个 googleXXXXXXXX.html,丢到 source/ 根目录。

有个地方要处理一下——hexo 有可能把它当普通文件复制,也可能套上主题模板,那就废了。加进 skip_render 保险:

skip_render:
- googleXXXXXXXX.html

文件内容就一行:

google-site-verification: googleXXXXXXXX.html

上线之后 curl 一下,确认返回的是这行纯文本,不是一堆 HTML。

Bing

后台点了几次都是 Unexpected error occurred。从 Google Search Console 导入也不行,提示找不到站点。

meta 验证码它倒是给了,但后台本身挂了,验证码也用不上。

绕过去:IndexNow

IndexNow 这套协议不需要在后台验证站点。规则就一条:在站点根目录放一个以 key 命名的文本文件,文件内容就是 key 本身。

https://cyk.pink/a984ba7b3eb04e828fea37c652a9ef09.txt
内容:a984ba7b3eb04e828fea37c652a9ef09

然后 POST 一批 URL 过去:

curl -X POST https://api.indexnow.org/indexnow \
-H "Content-Type: application/json" \
--data-binary @urls.json
{
"host": "cyk.pink",
"key": "a984ba7b3eb04e828fea37c652a9ef09",
"keyLocation": "https://cyk.pink/a984ba7b3eb04e828fea37c652a9ef09.txt",
"urlList": ["https://cyk.pink/", "..."]
}

第一次在本机发的,一直 403。同一个 key 换成 GET 方式、把参数拼到 URL 上,返回 200。

区别只在参数放 body 还是放 URL。本地有个代理会改写 POST 的 body,到服务端的时候已经是空的了。

改到服务器上直接 curl,200,217 条一次推完。

一小时后 Bingbot 就来了:

157.55.39.60  GET /sitemap.xml  200  ×2

现在三家什么状态

平台 验证 抓取
百度 meta 通过 首次抓取成功
Google 文件通过 47 次
Bing 后台仍报错,用 IndexNow 绕过 已抓 sitemap

平台后台不是必须的。sitemap 和 robots 做对,蜘蛛自己会来;IndexNow 是另一条不需要账号的路。