When important pages stop appearing in Google, the fastest way to diagnose the problem is often to compare what Google Search Console reports with what your server actually delivered to Googlebot. Search Console reveals crawl trends and indexing outcomes. Access logs reveal requests for particular URLs, response codes, timestamps and sometimes response times. Used together, they can help distinguish a page Google has never fetched from one it requested but could not retrieve successfully—and from one it crawled but chose not to index.
This guide is for publishers, online stores, service businesses and developers investigating Google Search Console indexing issues. You do not need a sophisticated SEO platform to begin, but you will need appropriate access to Search Console and your web server, CDN or hosting logs. The examples below are illustrative, not findings from an audit of any specific website.
Understand the difference between crawling and indexing
Google first discovers URLs through links, sitemaps and other signals. Googlebot may then request a page, following site access rules and available crawl capacity. Crawling does not promise indexing: a successfully fetched page may still be excluded because of duplication, an indexing directive, content quality or other signals.
That difference matters when choosing the right diagnostic tool. Google's official crawling troubleshooting guide explicitly says Search Console cannot provide a crawl history filtered by every URL or path; site logs are useful for checking whether specific pages were requested. If your core problem is sitemap exclusions rather than infrastructure errors, begin with the Sitemaps and Page indexing reports; this guide concentrates on the server-level evidence.
Step 1: Start with Search Console's Crawl Stats report
Open your verified property in Google Search Console , then navigate to Settings → Crawl stats. Google makes this report available for root-level domain or URL-prefix properties, not arbitrary subdirectory properties. It is primarily an advanced diagnostic resource; smaller sites may not need continuous crawl-log monitoring.
Review five signals together:
- Host status: Look for recent robots.txt fetching problems, DNS resolution failures and server connectivity errors.
- Total crawl requests: Compare the trend over days rather than assuming more requests always means better SEO.
- Average response time: Investigate sudden increases alongside declining request volume or rising errors.
- Crawl responses: Review how often Google receives 200, 301/302, 304, 404, 429 and 5xx responses.
- Googlebot type, file type and purpose: Separate HTML crawling from images, scripts, CSS and other resources; distinguish discovery from refresh activity.
According to Google's Crawl Stats documentation , its figures are request counts, not unique pages: repeated requests to one URL each count, and redirect chains can generate multiple requests. Search Console may also count certain attempted crawls prevented by unavailable robots.txt. Therefore its total may differ from an origin server's access logs.
Practical example: If average response time rises when 503 errors appear and Googlebot requests drop, investigate an overloaded application, database or upstream service. If requests remain healthy but only duplicate URLs are excluded from indexing, server capacity may not be the underlying issue.
Step 2: Find the right server logs before analysing requests
On a conventional Linux installation, Apache access logs may be stored under /var/log/apache2/, while Nginx logs commonly live in /var/log/nginx/. Managed hosting, load balancers and containers may store them elsewhere.
Collect a defined period—for example, the past seven or 30 days—and confirm that it overlaps the Search Console report you're comparing. Record the logging timezone and convert timestamps consistently. Search Console uses its own reporting conventions, while access-log timestamps depend on server configuration.
CDN warning: If a site uses Cloudflare or another reverse proxy, origin logs may contain the proxy's IP address rather than the visitor's real client IP. A request blocked or challenged at the CDN edge may never reach the origin at all. For reliable diagnosis, examine edge request logs or a properly configured, trusted real-client-IP field alongside origin logs. Never trust arbitrary X-Forwarded-For values supplied directly by untrusted clients.
A typical combined-format access-log record resembles the following. Its IP address is reserved for documentation; the example is not evidence of real Googlebot traffic:
192.0.2.10 - - [03/Nov/2026:09:15:20 +0100] "GET /guides/seo HTTP/1.1" 503 212 "-" "Googlebot/2.1"
From this line, you can read the request time, path, HTTP method and 503 response. But the user-agent string alone does not establish the request's identity.
Step 3: Verify that apparent Googlebot requests really came from Google
Bad bots can send a Googlebot user-agent header. Treat a simple text search as a candidate list—not authenticated crawler evidence.
Google supports two verification methods: compare the source IP address against its published crawler IP ranges, or perform both a reverse DNS lookup and a forward DNS lookup. For the latter, the resolved hostname must fall under an appropriate Google-controlled domain, and resolving that hostname must return the original client IP. Google's crawler verification instructions explain the required domain patterns and published address lists.
For an IP copied from a log, the command-line checks are:
host <client-ip>
host <hostname-returned-by-the-first-check>
Substitute the actual values, validate both directions, and use the correct address field if a trusted reverse proxy is present. For a large data set, automate verification with Google's maintained IP-range files rather than repeatedly performing individual DNS lookups. Keep Google Search's common Googlebot crawlers separate from AdsBot, user-triggered fetchers and other Google agents.
Step 4: Use safe log queries to find problem patterns
On a server where you're authorised to read the logs, start with read-only commands. For a standard Nginx combined access log, the following command gives a preliminary view of entries whose user-agent text contains Googlebot:
sudo zgrep -h 'Googlebot' /var/log/nginx/access.log* | tail -n 50
Important: This is a text filter, not identity verification. Depending on how logs are rotated and compressed, inspect the filenames and retention period first.
To count HTTP responses in a standard combined-format access log, where the status code is the ninth whitespace-separated field, use:
sudo awk '{count[$9]++} END {for (code in count) print code, count[code]}' /var/log/nginx/access.log
To narrow the same log to a particular URL, use a literal path filter:
sudo grep -F 'GET /guides/seo ' /var/log/nginx/access.log
Adapt these commands to your log format. In JSON logs, custom Apache formats, HTTP/2 request logging or proxy-generated records, the status and path fields may be elsewhere. For verified Googlebot-only statistics, first parse the source IP reliably, verify it using Google's guidance, and then aggregate those verified requests. Do not infer real Googlebot errors from a user-agent grep alone.
Step 5: Interpret HTTP response codes correctly
Google's HTTP status-code guidance makes clear that different responses have different effects. Use this reference when reading your logs:
| HTTP response | What it tells you | Next investigation |
|---|---|---|
| 200 OK | The server returned content | Check HTML, noindex, canonical, rendered content and quality |
| 301/308 | Permanent redirect | Verify final destination and avoid unnecessary chains |
| 302/307 | Temporary redirect | Confirm that temporary behaviour is intended |
| 304 Not Modified | Previously fetched content has not changed | Generally normal; do not classify as a crawl failure |
| 403 Forbidden | Request denied | Review WAF, bot protection, permissions and authentication |
| 404/410 | Content missing or gone | Check whether URL was intentionally removed or linked incorrectly |
| 429 Too Many Requests | Rate-limiting signal | Check automatic bot rules and overload protection |
| 500/502/503/504 | Application, gateway or upstream failure | Inspect server health, PHP workers, database, proxy and timeouts |
A 404 is not automatically an SEO emergency: deleted pages with no replacement may legitimately return 404 or 410. Conversely, persistent 5xx errors and 429 responses can cause Google to reduce crawling and can ultimately affect indexing. Returning 503 or 429 deliberately is appropriate only for genuine temporary overload—not as a tactic to accelerate crawling.
Be especially careful with robots.txt: repeated server errors when Google tries to retrieve /robots.txt can disrupt crawling across the entire host. Google's robots.txt specification explains how it handles unsuccessful fetches and cached rules.
Step 6: Compare affected URLs with URL Inspection and Page indexing
For each important missing URL, open the URL Inspection tool and compare its indexed information with a live test. Look for the last crawl date, crawl eligibility, page-fetch result, indexing permission, user-declared canonical and Google-selected canonical. The live test shows current accessibility, not a promise that the page will enter Google's index; Google's own URL Inspection documentation states that a live test cannot predict all canonical and quality decisions.
Now correlate the URL with logs within the available retention window:
- No verified request found: The page might not have been crawled during that log window; its request may have been handled at another edge, or log coverage may be incomplete. Check discovery links, sitemaps and the Discovered – currently not indexed status.
- Verified Googlebot request returned 200: Check rendered HTML, robots meta directives, canonical signals and content usefulness. A successful request does not prove index selection.
- Verified requests returned 403 or 429: Compare security and rate-limit rules with WAF/CDN event logs. A challenge page can look accessible to humans but block a crawler.
- Verified requests returned 5xx: Match timestamps to application exceptions, upstream response time, deployment events and infrastructure alerts.
- Only redirects or duplicates were requested: Review internal links, sitemap URLs, redirect targets and canonical alignment.
This helps separate infrastructure faults from ordinary indexing decisions. FlyingEze's previously published SEO fundamentals explainer provides broader context about why crawlability and content usefulness must work together.
Step 7: Investigate common hosting and Cloudflare problems
If errors appear during particular hours, deployments or traffic spikes, investigate the infrastructure layer rather than repeatedly requesting indexing. Common causes include exhausted PHP-FPM workers, slow MySQL queries, upstream Nginx timeouts, misconfigured Apache virtual hosts, and a Web Application Firewall (WAF) incorrectly treating Googlebot as hostile automation.
For Cloudflare-proxied websites, look for bot challenges, firewall actions, cached responses and origin errors during the precise times Google attempted to fetch pages. Distinguish genuine search crawlers from other agents; FlyingEze's report on Cloudflare controls for AI bots and Search addresses why crawler rules should be specific.
Technical administrators should also monitor DNS reliability, TLS negotiation, IPv4/IPv6 reachability and the ability to serve robots.txt and essential page resources. A normal browser response from your own connection is not sufficient proof that Googlebot experienced the same response at another time or network location.
Step 8: Prioritise fixes and measure whether crawling recovers
Start with site-wide availability problems, then high-value URLs, then low-impact noise. Use this practical sequence:
- Immediately: Resolve sustained 5xx/429 responses, robots.txt availability failures and accidental WAF blocks affecting verified Googlebot traffic.
- Next: Correct repeated broken internal links, unintended redirects, canonical inconsistencies and sitemap entries pointing at missing URLs.
- Afterwards: Improve server response times, reduce excessive parameter-driven URL combinations and ensure important content is linked through crawlable HTML.
- Finally: Compare verified bot requests, error rates, response times and priority URL crawl dates over comparable periods. Follow Page indexing to measure outcomes, not just requests.
Google's crawl-budget guidance is primarily for very large or rapidly changing sites. For many smaller sites, a maintained sitemap and regular Search Console checks are enough. Improving server capacity removes a possible barrier to crawling; it does not automatically make weak or duplicate pages indexable.
For ongoing monitoring, a simple dashboard can track Googlebot requests per day, percentage of verified requests receiving 429 or 5xx, median or percentile response times if logged, and important URLs not requested within your chosen review period. These are operational indicators, not Google ranking scores.
Protect user privacy when collecting logs
Access logs can contain IP addresses, URLs with query parameters and other personal or commercially sensitive information. Restrict access, set reasonable retention rules, avoid logging credentials or secrets, and remove sensitive parameters before sharing diagnostic samples with a contractor or AI tool. A useful log audit should improve search visibility without exposing users' private information.
Frequently asked questions
Can Search Console show exactly every URL Googlebot crawled?
No. Crawl Stats provides aggregate trends and sample request details; it is not a complete URL-by-URL access log. Use verified server and CDN logs for more granular history, understanding that retention and coverage may still be incomplete.
Does a Googlebot user-agent prove Google crawled the page?
No. User-agent headers can be forged. Verify the client IP against Google's published crawler ranges or by reverse and forward DNS checks.
Does a 200 response guarantee the page will be indexed?
No. It establishes that the server returned content for that request. Indexing also depends on crawlability, content, directives, duplicates and Google's indexing systems.
Why do Crawl Stats totals differ from server logs?
The report counts requests and some attempted crawls that never reached your server. CDN edge caching, filtering, differing property scope, log retention and redirects can also produce discrepancies.
Conclusion: Combine evidence before changing SEO settings
The best Googlebot troubleshooting method is evidence-led: find the pattern in Search Console, verify the crawler identity, examine the relevant access logs, match the response to the affected URL, and then fix the specific cause. A drop in crawl requests may indicate server distress, but it may also reflect normal prioritisation or reduced demand; a 200 response proves delivery, not indexing.
Start with the highest-value missing pages and the most serious availability errors. Keep logs and Search Console observations in the same date range, record what changed and verify the outcome before moving to the next fix. That is more reliable than resubmitting sitemaps, changing random directives or trying to force Google to crawl more often.