IF
IndexFlowing
/ Docs
🌐 English Docs GitHub ↗

3. 搜索索引雷达

搜索索引雷达直接调用 Google Search Console (GSC) 与 Bing Webmaster Tools (BWT) 官方 API,双引擎验证真实索引状态。


Google Search Console(GSC)集成

Google 每个 Cloud 项目每天限制 2,000 次 URL Inspection 请求。IndexFlow 采用双策略提高配额效率。

策略 A:通过 Search Analytics 零配额批量同步

在消耗检查配额前,IndexFlow 查询 Search Analytics API(/webmasters/v3/sites/{siteUrl}/searchAnalytics/query),获取过去 30 天有展示的 URL(dimensions: ["page"]、rowLimit: 25000),对 sitemap URL 做 SHA-256 精确匹配和尾斜杠容错匹配,并标记 gsc_index_status = 'INDEXED'。

策略 B:细粒度 URL Inspection API

对 Search Analytics 未观察到的 URL,GscInspectWorker 查询 https://searchconsole.googleapis.com/v1/urlInspection/index:inspect。

GSC 原始 coverageState 映射的 gsc_index_status 描述
Submitted and indexed / Indexed INDEXED 页面已确认在 Google 索引中。
Crawled - currently not indexed CRAWLED_NOT_INDEXED Google 已抓取但未选择索引。
Discovered - currently not indexed DISCOVERED_NOT_INDEXED Google 已知 URL 但尚未抓取。
URL is unknown to Google / other NOT_INDEXED URL 在 Google 中没有抓取或索引记录。
(Uninspected) UNKNOWN 页面尚未评估。

GSC 检查 Worker 架构

  • 并发:3 个并发任务(tokio::sync::Semaphore::new(3))。
  • 节奏:请求之间休眠 250ms。
  • 配额熔断器:Google 返回 HTTP 429 时立即停止并通知流水线管理器。

Bing Webmaster Tools 集成

IndexFlow 调用官方 Bing Webmaster Tools JSON API(https://ssl.bing.com/webmaster/api.svc/json)。

1. 动态站点 URL 解析(GetUserSites)

Bing 要求 API 使用精确的注册站点 URL 格式。BingProvider::resolve_site_url 使用配置的 API key 查询 GetUserSites,匹配干净域名并将资源 URL 缓存于内存。

2. 实时 URL 检查(GetUrlInfo)

IndexFlow 使用 siteUrl、url 和 apikey 调用 GetUrlInfo,提取 HttpStatus、转换为 UTC 的 LastCrawledDate 和 IsPage。有效抓取时间戳标记为 bing_index_status = 'INDEXED',HTTP 404 或空 d 对象标记为 NOT_INDEXED。

速率限制(1.5 QPS 安全区)

两个并发 worker 之间延迟 500ms。遇到 ThrottleHost、ErrorCode: 5 或 HTTP 429 时暂停 2 秒并保持 UNKNOWN,以便后续安全重试。


URL 监控与 Watchlist 时间线

站点操作员可将关键 URL 加入高优先级 Watchlist,跟踪索引状态变化。is_watched = 1 时,状态变化记录到 index_status_history,仅插入不同于上次检查的状态。

可视化时间线

/monitoring/:id 将单个 URL 的 sitemap 同步、SEO 审计、提交响应和索引状态历史组合为完整生命周期时间线。


执行检查操作

触发 Search Analytics 池同步(0 配额)

curl -X POST "https://www.indexflowing.com/docs/api/v1/pipeline/gsc-inspect/sync?site_id=1" \
  -H "Cookie: if_token=<YOUR_JWT_TOKEN>"

检查 Google 或 Bing 上的单个 URL

# Query Google Search Console
curl -X POST "https://www.indexflowing.com/docs/api/v1/urls/101/inspect?engine=google" \
  -H "Cookie: if_token=<YOUR_JWT_TOKEN>"

# Query Bing Webmaster Tools
curl -X POST "https://www.indexflowing.com/docs/api/v1/urls/101/inspect?engine=bing" \
  -H "Cookie: if_token=<YOUR_JWT_TOKEN>"

切换 Watchlist 状态

curl -X POST "https://www.indexflowing.com/docs/api/v1/monitoring/101/watch" \
  -H "Content-Type: application/json" \
  -H "Cookie: if_token=<YOUR_JWT_TOKEN>" \
  -d '{"watched": true}'