URL Inspection is the single most useful screen in Search Console, and the most misread. The “URL is not on Google” banner is not always bad, and the green “URL is on Google” check does not actually guarantee the page is ranking. Below is what each field means, the difference between the stored snapshot and the live test, and the API call you can script to inspect hundreds of URLs at once.
TL;DR
- Paste one URL, read Coverage first, then run Test live URL, then compare the two.
- The indexed (stored) version is a snapshot from Google’s last crawl, sometimes weeks old. The live test is what Google sees right now. When they disagree, the disagreement is your answer.
- “URL is on Google” means indexed, not necessarily ranking. For a true ranking check, search Google directly. (Google’s own docs say so.)
- Use Request indexing sparingly: roughly 10-12 URLs/day per property as of June 2026, and it only re-queues a URL, it does not force indexing.
- For more than ~20 URLs, switch to the URL Inspection API: 2,000 queries/day and 600/minute per property as of June 2026.
What URL Inspection actually returns
URL Inspection runs two checks for any URL on your verified property:
- The indexed version: what Google has stored from its last crawl (coverage state, the canonical Google picked, last crawl time).
- The live test: what Google sees if it crawls the URL right now (crawl allowed, fetch status, indexing allowed, current canonical).
They can disagree, and that gap is usually the answer to your question. If the stored version says “Duplicate” but the live test now shows the right canonical, you fixed the bug and just need Google to re-crawl.
When to reach for it
- You want to confirm a specific page is indexed without running a
site:search (which can lag and miss pages). - A page dropped out of search results and you do not know why.
- You changed a canonical,
robots.txtrule, ornoindextag and want to confirm Google saw the change. - You just published an article and want to nudge it into the crawl queue.
Before you start
- Property verified in Search Console (Domain or URL-prefix).
- Full URL ready (with
https://and trailing slash matching your site’s convention). - For bulk: an OAuth token for the URL Inspection API.
Step by step
-
Paste the full URL into the search bar at the top of Search Console. Use the exact form your site serves — trailing slash matters.
-
Read the Coverage section first. Plain-English outcomes:
"URL is on Google" → indexed ✓
"URL is on Google, but has issues" → indexed with warnings (still showable)
"URL is not on Google" → not indexed; reason on next line
├─ "Discovered – currently not indexed" → queued; sometimes "thin/duplicate" reality
├─ "Crawled – currently not indexed" → fetched but rejected; usually quality
├─ "Page with redirect" → 301/302 in place; index lives elsewhere
├─ "Duplicate without user-selected canonical" → fix canonical
└─ "Excluded by 'noindex' tag" → meta robots is blocking
-
Click View crawled page to see Google’s stored HTML. Check the canonical, the rendered HTML, and More info → console errors.
-
Click Test live URL (top right). This fetches now. The rows you scan first:
Crawl allowed? Yes / No ← robots.txt
Page fetch Successful ← 200 from your origin
Indexing allowed? Yes / No ← meta robots / X-Robots-Tag
User-declared canonical <your URL>
Google-selected canonical <your URL or different> ← if different, the bug is canonical
- For bulk inspection use the URL Inspection API. It exposes the same
indexStatusResultyou read in the UI, plus a few fields the UI buries:robotsTxtState(ALLOWED/DISALLOWED),crawledAs(DESKTOP/MOBILE), andreferringUrls(internal links Google followed to the page). Authenticated 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
}'
Sample response:
{
"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"
}
- Loop over a list of URLs to triage at scale:
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 # respect rate limits
done < urls.txt > inspection-report.csv
-
Request indexing only when both the stored version and the live test look correct. Use it sparingly, once per important URL.
-
For pages you just edited, run the live test first to confirm Google sees your change, then request indexing.
Before you close the tab: a 5-point check
- The URL you inspected matches your canonical form (trailing slash, language prefix, no
utm_params). - The coverage state and Google-selected canonical match what you expect.
- The live test passes both Crawl allowed and Indexing allowed.
- You switched to the API for any batch over ~20 URLs.
- You logged each Request-indexing click (date + reason) so you do not waste the daily ~10-12 budget.
What to recheck a few days later
- New URLs: 1-3 days after Request indexing, re-run the inspection. It should flip from “URL is not on Google” to “URL is on Google” unless a quality issue remains.
- Canonical fixes: Google-selected canonical now matches your user-declared canonical.
- Unblock fixes (robots, noindex): the live test shows Indexing allowed = Yes.
Common pitfalls
- Trusting “URL is on Google” without reading the next line. A page can be indexed under a different canonical than yours.
- Confusing the indexed version with the live test. The indexed version is a snapshot, sometimes weeks old.
- Requesting indexing for the same URL multiple times in a day. Google ignores duplicates and may temporarily rate-limit you.
- Inspecting URLs with tracking parameters. Strip
?utm_*before pasting; the parameter version is a different URL to Google. - Ignoring the “Crawl allowed?” / “Indexing allowed?” rows in the live test. Those tell you instantly if
robots.txtor anoindextag is blocking you. - Hammering the API without watching the quota. As of June 2026 the per-property cap is 2,000 queries/day and 600/minute; once you hit it the API returns HTTP 429 and you are locked out until the window resets. Keep a counter and sleep between calls.
FAQ
- Why does “URL is not on Google” sometimes have no reason listed?: It usually means Google has never crawled the URL at all. Confirm the URL is in your sitemap and is linked from somewhere on your site, then request indexing.
- How often can I use “Request indexing”?: In the UI, roughly 10-12 URLs per day per property as of June 2026. Google does not publish the exact number, and it varies with site history and crawl activity. For more volume, push an updated sitemap and improve internal linking instead.
- Does “URL is on Google” mean my page is ranking?: No. It only means the URL is indexed and eligible. Google’s own help page notes the tool does not check every ranking requirement; for a definitive answer, search Google for the page.
- Does requesting indexing guarantee my page will be indexed?: No. It moves the URL into Google’s queue for re-evaluation. If the page is thin, duplicate, or blocked, it still will not be indexed.
- Why does the live test show a different canonical than the indexed version?: Because Google’s last crawl was before you changed it. Once the live test looks correct, request indexing and the stored version catches up within days.
- Can the API request indexing?: No. The URL Inspection API is read-only. The separate Indexing API only supports two content types, pages with
JobPostingandBroadcastEventstructured data; Google’s John Mueller has repeatedly warned against using it for ordinary blog or product pages.
Related
- Submit a new site to Google in 2026
- Reading the Pages report
- Crawled — currently not indexed — how to fix
- Canonical in Search Console explained
- Submit sitemap Search Console
Tags: #Indie dev #SEO #Google #Search Console #Indexing #Troubleshooting