The reliable way to check if a page is indexed is the URL Inspection tool in Google Search Console: paste the URL, and "URL is on Google" means it is indexed. For pages you do not own, search site: followed by the exact URL, and treat a missing result as a hint, not proof. For hundreds or thousands of your own URLs, use the URL Inspection API, which returns the same data at up to 2,000 URLs per property per day.
Here are the four methods, what each one is good for, and where each one misleads.
Comparison at a glance
| Method | Accuracy | Works for any site | Scale | Tells you why |
|---|---|---|---|---|
site: operator |
Rough | Yes | One at a time | No |
| URL Inspection tool | Authoritative | Own sites only | One at a time | Yes |
| URL Inspection API | Authoritative | Own sites only | 2,000 per property per day | Yes |
| Page indexing report and Performance data | Authoritative but delayed and sampled | Own sites only | Whole site | Partly |
Method 1: the site: operator
Type this into Google:
site:https://www.example.com/blog/my-post
or, for a whole site or folder:
site:example.com
site:example.com/blog/
site:example.com "exact phrase from the page"
If the page appears, it is indexed. That part is reliable.
The limits are on the negative side:
- Google states that the
site:operator does not necessarily return all the URLs that are indexed. A missing result does not prove the page is absent. - The "About 1,240 results" count is an estimate that can swing widely between searches. Never report it as "pages indexed".
- The result may show the canonical URL, not the one you typed. If
?ref=navwas folded into the clean URL, you will see the clean URL. - It says nothing about why a page is missing.
- Running
site:queries automatically at volume gets you CAPTCHAs, and automated querying is against Google's terms.
A second operator trick for pages you cannot inspect: search for a distinctive sentence from the page in double quotes. If another site shows up with your sentence and you do not, you have also learned something about duplication.
The cache: operator used to be a third option. Google retired cached pages in 2024, so ignore any guide that still recommends it.
Use it for: quick spot checks, competitor pages, a sanity check that a site is in Google at all.
Method 2: the URL Inspection tool
This is the reference method for your own pages.
- Open Search Console and choose the property that contains the URL.
- Paste the complete URL in the bar at the top ("Inspect any URL in...") and press Enter.
- Read the verdict.
| Headline | Meaning |
|---|---|
| URL is on Google | Indexed and eligible to appear in results |
| URL is on Google, but has issues | Indexed, with problems in an enhancement such as structured data |
| URL is not on Google | Not indexed. The reason is on the next line |
| URL is an alternate version | An alternate (for example AMP or a canonicalised duplicate) of another indexed page |
Then expand Page indexing. The fields worth reading every time:
- Status line, for example "Crawled - currently not indexed" or "Page with redirect".
- Discovery: sitemaps and referring pages through which Google found the URL.
- Last crawl: date and time, and whether Googlebot smartphone or desktop did it.
- Crawl allowed? / Page fetch / Indexing allowed?
- User-declared canonical and Google-selected canonical. If these differ, the content may well be indexed, under the other URL.
Things that confuse people:
- Indexed result vs live test. The default view shows what Google has stored from its last crawl. Test live URL fetches the page now and tells you whether it can be indexed. A live test that passes does not mean the page is indexed.
- "URL is on Google" is not a ranking promise. Google notes that the page can still be absent from results because of a manual action, a removal request or a legal removal. And it can rank on page nine.
- Exact URL matters. Trailing slash, protocol,
wwwand letter case all create distinct URLs.
Use it for: any individual page on a verified site, and always when you need the reason.
Method 3: the URL Inspection API
The API exposes the same indexed-version data as the tool. One request per URL:
POST https://searchconsole.googleapis.com/v1/urlInspection/index:inspect
Authorization: Bearer <access token>
Content-Type: application/json
{
"inspectionUrl": "https://www.example.com/blog/my-post",
"siteUrl": "sc-domain:example.com",
"languageCode": "en-US"
}
The useful part of the response:
{
"inspectionResult": {
"indexStatusResult": {
"verdict": "PASS",
"coverageState": "Submitted and indexed",
"robotsTxtState": "ALLOWED",
"indexingState": "INDEXING_ALLOWED",
"pageFetchState": "SUCCESSFUL",
"lastCrawlTime": "2026-09-01T08:12:33Z",
"googleCanonical": "https://www.example.com/blog/my-post",
"userCanonical": "https://www.example.com/blog/my-post"
}
}
}
How to read it:
verdict: PASSmeans indexed.NEUTRALmeans not indexed (excluded).FAILmeans an error prevented indexing.coverageStateis the same text you see in the tool, for example "Discovered - currently not indexed". It is a localised string, so sendlanguageCode: "en-US"if you match on it in code.lastCrawlTimeis absent for URLs that were never crawled.
Practical constraints:
- Quota: 2,000 queries per day and 600 per minute per property, shared across all users and apps.
- Access: you need the
webmasters.readonlyscope and a verified permission on the property.siteUrlmust be exactly as it appears in Search Console (https://www.example.com/with the trailing slash, orsc-domain:example.com). - No live test. The API only returns the indexed-version data.
- Separate properties have separate quotas. If you have verified URL-prefix properties for sub-folders alongside the main property, each has its own 2,000 per day.
Use it for: monitoring every sitemap URL, tracking status changes over time, catching pages that drop out.
Method 4: bulk checks without writing code
You have three options when you have a list of URLs and no wish to build an API client.
Page indexing report. Indexing > Pages shows totals for indexed and not indexed URLs and the reasons. Filter by a specific sitemap to check exactly the set you submitted. The limits: each reason shows at most 1,000 example URLs, the data lags behind reality by some days, and there is no way to paste in your own list.
Performance report as proof of indexing. Any page with at least one impression in Performance > Search results > Pages is indexed, because a page cannot be shown without being in the index. Export the page list and compare it with your sitemap. The pages with impressions are confirmed. The rest are "unknown", not "unindexed", since an indexed page with no impressions will not appear in the export. This trick costs no inspection quota, which is why good monitoring tools use it first.
A tool on top of the API. TurboIndex, free for one site, does this: it imports your Search Console properties, reads the sitemaps, runs URL Inspection on every URL within the daily quota and keeps the history, so you see which pages are indexed, which dropped out and when. For a quick pass over a short list, the Google index checker runs URL Inspection for each URL after a Google sign-in and shows Google's verdict, with the reason when a page is left out.
Keep in mind what any checker that works on any domain does: it runs site: style searches, so it inherits the false negatives of method 1. Treat its "not indexed" as a lead to confirm in URL Inspection, not as a verdict.
Which should you trust when they disagree?
Order of authority: URL Inspection (tool or API), then a Performance impression, then the Page indexing report, then site:.
Typical disagreements and what they mean:
| You see | Explanation |
|---|---|
Inspection says indexed, site: shows nothing |
Normal. site: is incomplete. |
site: shows the page, the Page indexing report lists it as not indexed |
The report is lagging. Inspect the URL for the current state. |
| Inspection says "Alternate page with proper canonical tag", but the content shows in search | The content is indexed under the canonical URL. Inspect that one. |
| Live test passes, indexed result says not on Google | The page is indexable but not indexed yet, or was declined. |
| Inspection says indexed, the page never shows for any query | Ranking issue. See indexed but not ranking. |
Before you check index status, check indexability
If a page is not indexed, the next question is whether it can be. A 60 second check of status code, robots.txt, meta robots, X-Robots-Tag and canonical answers that. The indexability checker runs all of them on any URL, including sites you do not own.
If the page is indexable and still not indexed, the status line from URL Inspection tells you which path to follow. The full flow is in why is my page not indexed, and the field-by-field reference for the tool is in the URL Inspection tool guide.
Frequently asked questions
- What is the most accurate way to check if a page is indexed?
- The URL Inspection tool in Google Search Console, or the URL Inspection API which returns the same data. Both read directly from Google's index and tell you the exact status, the last crawl date and the canonical Google selected. They only work for sites you have verified in Search Console.
- Why does site: show no result when Search Console says the page is indexed?
- Google says the site: operator does not necessarily return all indexed URLs for a query. It is a search feature, not a diagnostic tool. When site: and URL Inspection disagree, trust URL Inspection.
- Can I check whether a competitor's page is indexed?
- Only with search operators, since URL Inspection requires verified access to the property. Search for site: followed by the exact URL, or search for a distinctive sentence from the page in quotes. A positive result is reliable. A negative result is only a hint.
- How many URLs can I check per day with the URL Inspection API?
- Google's published quota is 2,000 inspections per day and 600 per minute for each Search Console property. The quota is shared by every user and application inspecting that property.
- Is the cache: operator still a way to check indexing?
- No. Google retired the cached page feature and the cache: operator in 2024, so it no longer returns anything useful. Use URL Inspection for your own pages.