URL Inspection 是 Search Console 里最有用、也最容易被误读的一个面板。「URL is not on Google」不一定是坏事;那个绿色的「URL is on Google」对勾,也并不等于页面真的在排名。下面讲清楚每个字段是什么意思、「已存快照」和「实时测试」差在哪,再给出一套能一次性检查几百个 URL 的 API 脚本。
一句话总结
- 粘一个 URL,先读 Coverage,再点 Test live URL,然后把两者对比。
- 已收录(已存)版本是 Google 上次爬留下的快照,可能是几周前的;实时测试是 Google 现在再爬一次会看到的样子。两者不一致的地方,就是你问题的答案。
- 「URL is on Google」只代表已收录,不代表在排名。要真正确认排名,直接去 Google 搜这个页面(Google 官方文档也是这么说的)。
- Request indexing 要省着用:截至 2026 年 6 月,每个 property 大约每天 10-12 个 URL,而且它只是把 URL 重新排队,并不会强制收录。
- 超过约 20 个 URL,就改用 URL Inspection API:截至 2026 年 6 月,每个 property 每天 2,000 次、每分钟 600 次。
URL Inspection 到底返回什么
对你已验证站点的任意 URL,URL Inspection 会跑两份检查:
- 已收录版本:Google 上次爬留下的内容(coverage 状态、Google 选的 canonical、上次爬的时间)。
- 实时测试:Google 现在再爬一次会看到什么(是否允许抓取、抓取状态、是否允许收录、当前 canonical)。
两者不一致的地方,往往就是你问题的答案。如果已存版本写着「Duplicate」、但实时测试已经显示了正确的 canonical,那就说明 bug 已经修好,只差 Google 重新爬一遍。
什么时候用它
- 想确认某一页是否被收录,又不想去 Google 搜
site:(site:有延迟,还会漏页)。 - 某页从搜索结果里消失了,不知道为什么。
- 改了 canonical、
robots.txt规则或noindex标签,想确认 Google 看到了改动。 - 刚发完一篇文章,想把它推进爬取队列。
开始前准备
- Search Console 已验证 property(Domain 或 URL-prefix)。
- URL 准备好完整版(
https://+ 与站点一致的尾斜杠)。 - 批量用:URL Inspection API 的 OAuth token。
实操步骤
-
完整 URL 粘到 Search Console 顶部搜索框。 用站点真实提供的形态——尾斜杠很重要。
-
先读 Coverage。 含义:
"URL is on Google" → 已收录 ✓
"URL is on Google, but has issues" → 已收录但有警告(仍可展示)
"URL is not on Google" → 未收录;原因看下一行
├─ "Discovered – currently not indexed" → 排队;常隐含"薄/重复"
├─ "Crawled – currently not indexed" → 已爬但被弃;通常是质量问题
├─ "Page with redirect" → 301/302 生效;索引在别处
├─ "Duplicate without user-selected canonical" → 修 canonical
└─ "Excluded by 'noindex' tag" → meta robots 在挡
-
点 View crawled page 看 Google 存的 HTML。看 canonical、渲染后 HTML、More info 里的 console 错误。
-
右上角 Test live URL,立刻抓一次。首先扫这几行:
Crawl allowed? Yes / No ← robots.txt
Page fetch Successful ← 源站返回 200
Indexing allowed? Yes / No ← meta robots / X-Robots-Tag
User-declared canonical <你的 URL>
Google-selected canonical <你的 URL 或别的> ← 不一致就是 canonical 的 bug
- 批量检查用 URL Inspection API。 它返回的就是你在 UI 里读到的同一个
indexStatusResult,外加几个 UI 藏起来的字段:robotsTxtState(ALLOWED/DISALLOWED)、crawledAs(DESKTOP/MOBILE)、referringUrls(Google 顺着爬到这一页的站内链接)。鉴权 curl:
curl -X POST "https://searchconsole.googleapis.com/v1/urlInspection/index:inspect" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
--data '{
"inspectionUrl": "https://yourdomain.com/articles/foo/",
"siteUrl": "sc-domain:yourdomain.com",
"languageCode": "en-US"
}' \
| jq '.inspectionResult | {
verdict: .indexStatusResult.verdict,
coverageState: .indexStatusResult.coverageState,
userCanonical: .indexStatusResult.userCanonical,
googleCanonical: .indexStatusResult.googleCanonical,
lastCrawl: .indexStatusResult.lastCrawlTime
}'
返回样例:
{
"verdict": "PASS",
"coverageState": "Indexed, not submitted in sitemap",
"userCanonical": "https://yourdomain.com/articles/foo/",
"googleCanonical": "https://yourdomain.com/articles/foo/",
"lastCrawl": "2026-05-20T14:02:00Z"
}
- 对一批 URL 循环 triage:
while read url; do
curl -sX POST "https://searchconsole.googleapis.com/v1/urlInspection/index:inspect" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
--data "$(jq -nc --arg u "$url" --arg s "sc-domain:yourdomain.com" \
'{inspectionUrl:$u, siteUrl:$s, languageCode:"en-US"}')" \
| jq -r --arg u "$url" '[$u, .inspectionResult.indexStatusResult.verdict, .inspectionResult.indexStatusResult.coverageState] | @csv'
sleep 1 # 注意限流
done < urls.txt > inspection-report.csv
-
已存版本和实时测试都正确,才申请收录。 慎用,每个重要 URL 申请一次就够。
-
改过的页面:先跑实时测试确认 Google 看到了改动,再申请收录。
关掉标签页前:5 项快速核对
- 检查的 URL 是你的 canonical 形态(尾斜杠、语言前缀、没有
utm_参数)。 - Coverage 状态和 Google 选的 canonical 跟你预期一致。
- 实时测试里 Crawl allowed 和 Indexing allowed 都通过。
- 一批超过约 20 个 URL,已经改走 API。
- 每次点 Request indexing 都记一笔(日期 + 原因),别浪费每天约 10-12 个的额度。
几天后要复查什么
- 新 URL:申请收录 1-3 天后重跑 inspect,应从「URL is not on Google」翻成「URL is on Google」(除非质量问题还在)。
- canonical 修复:Google-selected canonical 现在和你声明的 user-declared canonical 一致。
- 解屏(robots / noindex):实时测试显示 Indexing allowed = Yes。
容易踩的坑
- 看到「URL is on Google」就走了,没看下一行。页面可能被收录在另一个 canonical 下面。
- 把「已收录版本」和「实时测试」搞混。已收录版本是一个快照,可能几周前的。
- 同一个 URL 一天点好几次 Request indexing。Google 会忽略,还可能临时限流。
- 带着 tracking 参数去 inspect。粘进去之前先把
?utm_*删掉,参数版对 Google 是另一个 URL。 - 忽略实时测试里「Crawl allowed?」「Indexing allowed?」这两行。
robots.txt或noindex在挡你,这两行马上能看出来。 - 猛刷 API 却不看额度。截至 2026 年 6 月,每个 property 的上限是每天 2,000 次、每分钟 600 次;超了 API 会返回 HTTP 429,直到窗口重置才解锁。记个计数器,调用之间 sleep 一下。
FAQ
- 为什么「URL is not on Google」有时候没写原因?: 通常意味着 Google 根本没爬过这个 URL。先确认它在 sitemap 里、站内有链接指过去,然后申请收录。
- Request indexing 一天能点几次?: 截至 2026 年 6 月,UI 里每个 property 大约每天 10-12 个 URL。Google 不公布确切数字,会随站点历史和爬取活跃度浮动。量大就改用更新 sitemap + 加强站内链接。
- 「URL is on Google」是不是代表在排名了?: 不是。它只代表 URL 已收录、有资格出现。Google 官方帮助页明确说这个工具不会检查所有排名条件;要确认,直接去 Google 搜这个页面。
- 申请收录后一定会被收录吗?: 不一定。它只是把 URL 推进 Google 的复查队列。如果页面薄、重复、或被屏蔽,照样不会被收录。
- 为什么实时测试的 canonical 和已存版本不一样?: 因为 Google 上次爬是在你改之前。确认实时测试的内容正确后再申请收录,已存版本几天内会跟上。
- API 能 Request indexing 吗?: 不能。URL Inspection API 是只读的。另一个 Indexing API 只支持两类内容:带
JobPosting和BroadcastEvent结构化数据的页面;Google 的 John Mueller 多次警告,别拿它去推普通博客或商品页。