写了个脚本调 Indexing API 推送新文章,每条都返回 403,提示调用方没有权限,用同一个服务账号推招聘页却是成功的。
一开始怀疑是「JSON 请求体里的 type 写成了 URL_UPDATED 之外的值」,查了一圈,方向不对。
真正麻烦的地方在于,几个原因的现象几乎一样。Indexing API 官方只支持招聘和直播两类结构化页面。少数情况下是服务账号在 Search Console 里被授予的是受限权限。
还有一种情况,项目没有开通 Indexing API,只是启用了普通搜索接口。
第一件事是看接口返回的错误体
curl -s -X POST -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{"url":"https://www.example.com/a/","type":"URL_UPDATED"}' https://indexing.googleapis.com/v3/urlNotifications:publish
接着确认服务账号在属性里的权限级别
gcloud iam service-accounts list
等前面都确认过,再改回 sitemap 加 IndexNow 的常规通道
curl -sI https://www.example.com/sitemap_index.xml | head -1
当时还开着另一个排查窗口,两边日志对照着看才定位到。
恢复的判定其实很直接。换成 sitemap 与 IndexNow 的组合后,新文章两三天内出现索引,脚本不再收到 403 报错。
提醒一点。普通文章没有官方加速接口,把 Indexing API 当通用推送工具用,最后只会拿到 403 和一堆无用日志。这类问题最好一次改到位,反复小改反而容易把原因搅混。
