- The log file of your server or CDN shows every request, including those from Googlebot and AI bots. It gives you the complete picture of what bots really fetch.
- A bot is only genuine if its IP matches. Google, OpenAI, Anthropic and others publish lists for this or support reverse DNS.
- According to Google, crawl budget is mainly an issue for large websites, for example from 10,000 pages with daily changes.
What is in a log file?
An access log records every request to the server in one line. Most web servers use the Combined Log Format or a variant of it. This is what a line for a Googlebot request looks like. We have shortened the user agent.
| Field | Example | What you need it for |
|---|---|---|
| IP address | 66.249.66.1 | Checking whether the bot is genuine |
| Timestamp | 14/Oct/2026:08:15:32 +0200 | Crawl history over days and weeks |
| Request | GET /gartenmoebel/lounge/ | Which URL and which page type was fetched |
| Status code | 200 | What the bot received, such as 200, 301, 404 or 503 |
| Bytes | 48211 | Size of the response |
| User agent | <Googlebot user agent> | Which bot it claims to be |
Many servers and CDNs also log the response time and the host. The response time shows how fast the server serves bots. You need the host if several domains or subdomains run on the same server.
Identifying and verifying bots
Anyone can set the user agent. If you analyze Googlebot in your logs without checking the IP, you count scrapers too. Google recommends two methods.
- Reverse DNS. You look up the host name for the IP. It must end in googlebot.com, google.com or googleusercontent.com. Then you use forward DNS to check that the host name points back to the same IP.
- IP lists. Google publishes the ranges as JSON, for Googlebot in the file common-crawlers.json. There are separate lists for user-triggered fetches.
This is what the check looks like in the terminal.
| Operator | Verification |
|---|---|
| Reverse DNS and JSON lists, such as common-crawlers.json | |
| OpenAI | JSON lists per bot, such as gptbot.json and searchbot.json |
| Anthropic | JSON list claude.com/crawling/bots.json |
| Perplexity | JSON lists perplexitybot.json and perplexity-user.json |
| Apple | Reverse DNS to applebot.apple.com and applebot.json |
| Common Crawl | Reverse DNS to crawl.commoncrawl.org and ccbot.json |
Which AI bots exist and what they crawl for is explained in the guide AI crawlers.
What does log file analysis show?
| Question | Analysis |
|---|---|
| Where does the crawl go? | Googlebot requests per directory or page type, such as products, categories and filter URLs |
| What do bots get back? | Status codes per bot. Many 301s, 404s or 5xx errors waste crawls. |
| Which pages does Google not know? | URLs from the sitemap or crawl that Googlebot never fetched in the period |
| What does Google crawl that you do not link to? | URLs in the log that do not appear in any crawl, such as old parameters or orphaned pages |
| How fast does the server respond? | Response times for bots over time |
| Is an AI asking for your pages? | Fetches by ChatGPT-User, Claude-User or Perplexity-User. They happen when a user asks something in an assistant and the system reads your page. |
The analysis is most useful when you combine it with a crawl and the clicks from Search Console. You then see whether the pages with clicks are crawled often and where the rest of the crawl goes.
Crawl budget
Google describes crawl budget as the set of URLs that Googlebot can and wants to crawl. It has two parts. The crawl capacity limit determines how much load Google puts on your server. If the server responds with 5xx errors or status 429, the limit drops and Google crawls less. Crawl demand depends on the size of the website, the popularity of the URLs and how often content changes.
- Websites with more than a million pages that change about once a week.
- Websites with more than 10,000 pages that change daily.
- Websites with many URLs in the status “Discovered – currently not indexed”.
Google itself calls these figures a rough estimate. According to Google, for smaller websites an up-to-date sitemap and a look at the page indexing report are enough.
| Helps according to Google | Wastes crawls or does not help |
|---|---|
| Consolidating duplicates | noindex, because Google still fetches the page |
| Blocking unimportant URLs via robots.txt, such as endless filters | robots.txt to shift budget to other pages in the short term |
| 404 or 410 for removed pages, fixing soft 404s | Long redirect chains |
| Keeping sitemaps up to date, with lastmod | Slow responses, 5xx errors and status 429 |
| HTTP caching with status 304 |
Filter URLs: what actually saves crawls?
Filters and sort options in a shop quickly create more URLs than there are products. According to Google, faceted navigation based on URL parameters can generate infinite URL spaces. What matters is whether a method saves crawls or only controls indexing. Your logs show you directly. If Googlebot keeps requesting the filter URLs after the change, the method still costs crawls.
| Method | Does Google keep crawling the filter URLs? | Do they end up in the index? |
|---|---|---|
| rel="canonical" to the unfiltered page | Yes. According to Google, crawling of the non-canonical URLs may decrease over time. | Google treats the canonical as a hint for the preferred URL. |
| noindex | Yes. Google fetches the page and drops it once it sees the noindex. | No |
| rel="nofollow" on the filter links | Less, but only if every link to the URL carries nofollow. | Not controlled by this. |
| Disallow in robots.txt | No | The URL can still appear in search results, then without a description. |
| Filters in the URL fragment (#) | No. According to Google, fragments have no impact on crawling. | No separate URLs are created. |
| Filters as a form without a link (PRG pattern) | No, as long as no <a href> points to the filter URL. | Only if the result URL is linked elsewhere. |
Google calls canonical and nofollow less effective in the long term than robots.txt or fragments. noindex helps with indexing but does not save crawls.
The PRG pattern
Post/Redirect/Get comes from form handling and prevents a form from being submitted twice. For filters, it means the filter options are buttons in a form instead of links. When someone picks a filter, a POST request goes to the server. The server responds with a redirect to the page with the filtered results.
Google can generally only crawl a link if it is an <a> element with an href attribute. A filter button therefore gives Googlebot no URL to follow, while the filter works as usual for users. Google does not describe PRG as a method for filters itself. The effect follows from the rule for crawlable links, and you can check it in your logs. If the filter URLs no longer show up there after the switch, the pattern is working.
Two things go with it. Filters that should rank as landing pages of their own, such as “red sneakers”, still need a normal, linked URL. The result URL after the redirect stays reachable. If it is in the sitemap or linked from elsewhere, Google will still find it.
Search Console crawl stats or log files?
The Crawl Stats report in Search Console is available without any effort and a good place to start. It shows Google's requests, the response time, the host status and a breakdown by status code, file type, purpose and Googlebot type. If the curve drops, that is often the reason to look at the logs.
| Crawl Stats | Log files | |
|---|---|---|
| Bots | Only Google crawlers | All bots, including AI bots and fake ones |
| URLs | Example URLs as a sample | Every single request |
| Period | Host status for the last 90 days | As long as you keep the logs |
| Scope | Only for root-level properties (domain or URL prefix without a path) | Every host that writes logs |
| Accuracy | Google mentions a known issue where individual requests are missing | Complete if all servers and the CDN log |
| Effort | Available without setup | Requires access, storage and analysis |
Getting the logs
- Find out from IT or your hosting provider where the access logs are. That is the web server, the load balancer or the CDN.
- If you use a CDN such as Cloudflare, its logs are part of it. Requests that the CDN answers from the cache never reach the server and are missing from its logs.
- Decide how long the logs are kept. For a comparison before and after a release or relaunch, you need the weeks before.
- Filter for bots early. For SEO, the lines from search engines and AI bots are enough.
- Clarify data protection. IP addresses can be personal data (CJEU, judgment of 19 October 2016, C-582/14, Breyer). No legal advice.
Common mistakes
- Identifying Googlebot only by its user agent.
- Only analyzing the origin server's logs, even though a CDN sits in front of it.
- Looking at a single day only. Crawl patterns only show up over several weeks.
- Setting pages to noindex to save crawl budget.
- Only looking for the logs once the crawl has already dropped. Then there is nothing to compare with.
FAQ
What is log file analysis?
The analysis of server or CDN logs. For SEO, it shows which URLs Googlebot and other bots fetch, how often and with which status code.
Where do I find the log files?
At the web server, the load balancer or the CDN. With managed hosting, the provider often makes them available, and Cloudflare has its own exports.
Do I need log file analysis for small websites?
Rarely. Google recommends working on crawl budget mainly for large websites. For smaller websites, the Search Console reports are usually enough. Logs still help if you want to know which AI bots fetch your pages.
How do I spot fake Googlebots?
With a reverse DNS lookup on the IP followed by a forward DNS lookup. The host name must end in googlebot.com, google.com or googleusercontent.com and point back to the same IP. Alternatively, check the IP against Google's JSON lists.
What is the difference between crawl budget and crawl rate?
The crawl rate is the speed at which Googlebot makes requests. Crawl budget describes how many URLs Google can and wants to crawl in total. The capacity limit caps the rate.
Sources
Retrieved on October 15, 2026. If something is out of date or missing, let us know.
- Google, Crawl budget management for large sites: https://developers.google.com/crawling/docs/crawl-budget · As of Jul 22, 2026
- Google, Verifying Google crawlers and fetchers: https://developers.google.com/crawling/docs/crawlers-fetchers/verify-google-requests · As of Mar 20, 2026
- Search Console Help, Crawl Stats report: https://support.google.com/webmasters/answer/9679690
- Apache HTTP Server, Log Files: https://httpd.apache.org/docs/current/logs.html
- OpenAI, Overview of OpenAI Crawlers: https://developers.openai.com/api/docs/bots
- Anthropic, Does Anthropic crawl data from the web?: https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler · Apr 7, 2026
- Perplexity, Perplexity Crawlers: https://docs.perplexity.ai/guides/bots
- Apple, About Applebot: https://support.apple.com/en-us/119829 · Sep 4, 2026
- Common Crawl, CCBot: https://commoncrawl.org/ccbot
- CJEU, judgment of October 19, 2016, C-582/14 (Breyer): https://eur-lex.europa.eu/legal-content/DE/TXT/?uri=CELEX:62014CJ0582 · Oct 19, 2016
- Google, Managing crawling of faceted navigation URLs: https://developers.google.com/search/docs/crawling-indexing/crawling-managing-faceted-navigation · retrieved November 2, 2026
- Google, Link best practices: https://developers.google.com/search/docs/crawling-indexing/links-crawlable · retrieved November 2, 2026
- Google, Introduction to robots.txt: https://developers.google.com/search/docs/crawling-indexing/robots/intro · retrieved November 2, 2026