The last time Google crawled a page is shown in Search Console's URL Inspection tool, under Crawl, as Last crawl with a date and time. The same value is the lastCrawlTime field of the URL Inspection API, which lets you read it for 2,000 URLs a day. Your server logs record every single Googlebot request, including the ones URL Inspection does not show, and the Crawl stats report gives the site-wide totals for the last 90 days. Which one you need depends on whether you are asking about one page, a list of pages or the whole site.
1. URL Inspection: one page, no setup
- Open Search Console and choose the property.
- Paste the full URL into the inspection bar at the top and press Enter.
- Expand the Page indexing section (older interfaces call it Coverage).
The Crawl block shows:
| Field | What it tells you |
|---|---|
| Last crawl | Date and time, in your local time zone, of the crawl behind the version Google has on record |
| Crawled as | The user agent used, usually Googlebot smartphone |
| Crawl allowed? | Whether robots.txt permitted the fetch |
| Page fetch | Successful, or the error Google got |
| Indexing allowed? | Whether a noindex rule was found |
Above it, the verdict ("URL is on Google", "URL is not on Google") and the coverage state put the date in context. "Crawled - currently not indexed" with a date from last week means Google looked recently and declined. "Discovered - currently not indexed" shows no date at all, because Google knows the URL but has not fetched it. The nuances of each state are in the URL Inspection tool guide.
Test live URL fetches the page now and shows what Google would get, but it does not count as a crawl and does not change the Last crawl date. People often run the live test, see "URL is available to Google", and think the page was just crawled. It was not.
2. The URL Inspection API: the same date for a list
The URL Inspection API returns the data behind the tool, including lastCrawlTime as an ISO timestamp, for 2,000 URLs per day per property and at most 600 per minute. A response looks like this, trimmed:
{
"inspectionResult": {
"indexStatusResult": {
"verdict": "PASS",
"coverageState": "Submitted and indexed",
"robotsTxtState": "ALLOWED",
"indexingState": "INDEXING_ALLOWED",
"lastCrawlTime": "2026-10-03T14:21:07Z",
"pageFetchState": "SUCCESSFUL",
"googleCanonical": "https://www.example.com/guide/",
"userCanonical": "https://www.example.com/guide/",
"crawledAs": "MOBILE"
}
}
}
For a page Google has never fetched, lastCrawlTime is missing and coverageState says why. This is the practical way to answer "which of my 3,000 product pages have not been crawled since the price change in September": inspect them all over two days, sort by lastCrawlTime, and look at the oldest. A script that does exactly this, plus the alternatives for building a complete per-URL list, is in how to find all pages indexed by Google.
TurboIndex records the lastCrawlTime Google reports for every sitemap URL it inspects, next to the coverage state and the date of its own last check, so for a connected site the answer is already there without writing a script.
3. Server logs: every crawl, every URL, in real time
URL Inspection shows one date per page. Your access log shows every request Googlebot made, including fetches of pages that never got indexed, repeated fetches of the same page, fetches of images and scripts, and the status code you answered with. If the question is "did Googlebot come at all this week", this is the source.
Pull the Googlebot lines for one page from an nginx or Apache access log:
grep "Googlebot" /var/log/nginx/access.log | grep " /guide/ " | awk '{print $4, $9}'
That prints the timestamp and the status code for each visit. Then verify that the requests came from Google and not from someone sending a Googlebot user agent, because anyone can send that string:
host 66.249.66.1
# 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
host crawl-66-249-66-1.googlebot.com
# crawl-66-249-66-1.googlebot.com has address 66.249.66.1
The reverse lookup must end in googlebot.com or google.com, and the forward lookup of that name must return the same IP. Google also publishes JSON files with the IP ranges of Googlebot and its other fetchers, which is faster for checking thousands of lines. Both methods, and ready-made commands for finding crawl waste and uncrawled sections, are in log file analysis for Googlebot.
Things only the log can tell you:
- Crawl frequency per page. Daily visits to your homepage and one visit in four months to a category page say a lot about how Google weighs them.
- What you answered. A string of 503s or slow responses during a deploy explains a sudden crawl drop better than any report.
- Crawls of pages that are not in the index. URL Inspection on a "Crawled - currently not indexed" page shows the last crawl, but the log shows how many times Google came back before giving up.
- Wasted crawls. Parameter URLs, calendar pages and internal search results that Googlebot keeps fetching. On a large site those compete with the pages you care about; on a small site they rarely matter.
If you are on a managed host or a CDN and have no log access, the CDN's analytics usually include a bot or crawler breakdown, with less detail.
4. The Crawl stats report: the whole site, 90 days
In Search Console open Settings, then under Crawling click Open report next to Crawl stats. The report is only available for root-level properties (a Domain property or a URL-prefix property at the root of the host) and covers the last 90 days. It shows:
- Total crawl requests, total download size and average response time per day.
- Breakdown by response (200, 301, 404, 5xx and so on), by file type, by purpose (Discovery for URLs Google had not seen, Refresh for known ones) and by Googlebot type (smartphone, desktop, image, and others).
- Host status: whether robots.txt fetches, DNS and server connectivity had problems.
- For Domain properties, a per-host table, so you can see that
www.gets crawled andshop.barely does. - Example URLs for each bucket, with their crawl times, which is a quick way to find the last fetch of a page type without logs.
The report does not list every URL and cannot answer "when was this page crawled". It answers "is Google crawling this site normally", and the day-by-day chart is where you spot a drop that coincides with a server problem, a robots.txt change or a migration.
What a crawl date tells you
| What you see | What it usually means | What to do |
|---|---|---|
| No last crawl, "URL is unknown to Google" | Google has never seen the URL | Get it into a sitemap and linked from crawled pages |
| No last crawl, "Discovered - currently not indexed" | Google knows the URL and has not got to it | Internal links, server health, fewer low-value URLs competing for crawls |
| Crawled months ago, indexed, page unchanged | Normal for static pages | Nothing |
| Crawled months ago, page changed since | Google still has the old version | Update lastmod, link to it from fresh pages, request indexing once |
| Crawled months ago, not indexed | Google looked and moved on | Change the page, then ask again; a repeat crawl of the same content gives the same result |
| Crawled daily, not indexed | Google keeps checking and keeps declining | Content or duplication problem, not a crawl problem |
| Crawled regularly, 5xx or timeouts in the log | Googlebot is being turned away | Fix the server first; Google slows down on hosts that error |
The date on its own is rarely the problem. The combination of date and state is what tells you whether to work on discovery, on the server or on the page.
When a page was never crawled
A page Google has never fetched is a discovery problem, and the fixes are the ones that make Googlebot come:
- Put it in the sitemap with an accurate
lastmod, and make sure the sitemap is submitted in Search Console with a Success status. - Link to it from pages that are crawled often, such as the homepage, a hub page or a recent post. Orphan pages wait the longest.
- Check that nothing blocks the fetch: robots.txt, a firewall rule, a geo block or a login wall. The HTTP status checker shows what a plain fetch returns, and the indexability checker adds the robots and meta checks.
- Request indexing in URL Inspection for a handful of important URLs. It queues a crawl, usually within days, and the daily allowance per property is small.
- Look at the server. Slow responses and errors make Google crawl less of everything.
Nothing forces a crawl. The complete list of what makes Googlebot visit, and what does not, is in how to get Google to crawl your site.
Frequently asked questions
- What is the fastest way to see when Google last crawled a page?
- Paste the URL into the search bar at the top of Search Console. The URL Inspection result has a Crawl section with Last crawl, showing the date and time of the crawl that produced the version Google has on record, and Crawled as, which is almost always Googlebot smartphone.
- Why does URL Inspection show no last crawl date?
- Google has not fetched the page yet. The verdict is usually 'URL is unknown to Google' or 'Discovered - currently not indexed'. The page may be new, poorly linked, in no sitemap, or on a host Google is crawling slowly. Running a live test does not change this; it only shows what Google would get today.
- Does the Last crawl date update every time Googlebot visits?
- Not necessarily. Server logs often show visits that are not reflected in URL Inspection, because the date there belongs to the crawl Google used for the indexed version of the page. For the full picture of every request, the log file is the only source.
- How often should Google crawl my pages?
- There is no correct frequency. Google crawls pages that change often, that are linked a lot or that it considers important more often, and it may revisit a static page only every few months. A page that has not been crawled in months is only a problem if it has changed since, or if it is not indexed.