TapCub is live — analytics, insights and live chat, free on one platform

Free tool Server log analyzer: who really requests your pages

JavaScript analytics misses most crawlers, because most of them never run your tracking script. Your access log records every request. Drop it here to see which search engines and AI crawlers fetch what, how often, with which status codes, and whether they touch paths your robots.txt disallows.

  • The file never leaves your browser
  • 197+ bot rules, same as TapCub
  • .log, .txt or .gz, up to 1 GB
Analyzer

Analyze an access log

The report below is from a synthetic sample log (2,400 requests over seven days). Choose or drop your own file to replace it; the format is detected from the first lines.

Your log stays on this device

The file is read and parsed by your browser. Nothing is uploaded to TapCub or anywhere else, and IP addresses are shown only as truncated prefixes. You can disconnect from the internet after the page has loaded and it still works.

robots.txt to check against (optional)

Paste your robots.txt to count crawler requests to disallowed paths. The sample's robots.txt is filled in; it is cleared when you load your own log.

Sample dataSynthetic log generated for this page, with documentation-only IP addresses. Not real traffic.

Sample log (synthetic) · Nginx / Apache combined · 2,400 requests · 2026-11-02 to 2026-11-08

Requests

2,400

People

55%

1,314

Search engines

19%

451

AI crawlers

16%

394

Other bots

10%

241

Share of requests

  • People (no bot match) 55%
  • Search engines 19%
  • AI training crawlers 12%
  • AI search crawlers 3.5%
  • AI agents (user-triggered) 1.1%
  • Other bots 10%

Top bots

Matched by user agent with TapCub's built-in rules, first match wins. IP prefixes are /24 for IPv4 and /48 for IPv6.

BotTypeRequestsShareIP prefixesVerify
GooglebotGoogleSearch engine27812%192.0.2.0/24 ×260203.0.113.0/24 ×18Reverse DNS: googlebot.com, google.com
GPTBotOpenAIAI training1215.0%192.0.2.0/24 ×121Reverse DNS: openai.com
BingbotMicrosoftSearch engine984.1%192.0.2.0/24 ×98Reverse DNS: search.msn.com
BytespiderByteDanceAI training863.6%198.51.100.0/24 ×86No published domain
AhrefsBotAhrefsSEO tool783.3%203.0.113.0/24 ×78No published domain
ClaudeBotAnthropicAI training773.2%198.51.100.0/24 ×77No published domain
Baiduspider百度Search engine753.1%192.0.2.0/24 ×75Reverse DNS: baidu.com, baidu.jp
python-requestsScripted client472.0%203.0.113.0/24 ×47No published domain
UptimeRobotUptimeRobotMonitoring451.9%2001:db8:77::/48 ×45No published domain
PerplexityBotPerplexityAI search431.8%198.51.100.0/24 ×43No published domain
OAI-SearchBotOpenAIAI search401.7%192.0.2.0/24 ×40No published domain
HeadlessChromeHeadless browser301.3%203.0.113.0/24 ×30No published domain
ChatGPT-UserOpenAIAI agent271.1%198.51.100.0/24 ×27No published domain
facebookexternalhitMetaSocial preview251.0%2001:db8:fb::/48 ×25No published domain
Empty User-AgentScripted client160.7%203.0.113.0/24 ×16No published domain

Requests to paths robots.txt disallows

Crawlers only (search engines, AI, SEO and social preview bots), using the group for their robots.txt token or User-agent: *. Longest matching rule wins, as in RFC 9309.

BotGroup usedRequestsTop disallowed paths
BytespiderUser-agent: Bytespider15/pricing ×3 · Disallow: //docs/api ×3 · Disallow: //blog/ ×2 · Disallow: //blog/page/3 ×2 · Disallow: //docs/install ×2 · Disallow: /
GooglebotUser-agent: *13/search?q=a ×7 · Disallow: /search/cart ×3 · Disallow: /cart/search?q=b ×3 · Disallow: /search
GPTBotUser-agent: GPTBot13/blog/ ×4 · Disallow: //pricing ×3 · Disallow: //blog/website-analytics-guide ×2 · Disallow: // ×1 · Disallow: //blog/ai-crawlers-explained ×1 · Disallow: /

Top paths by visitor type

People (no bot match)

PathRequests
/125
/assets/logo.svg106
/favicon.ico102
/pricing100
/assets/main.css100
/blog/95
/blog/ai-crawlers-explained93
/assets/app.js92
/blog/website-analytics-guide84
/about83

Search engines

PathRequests
/blog/56
/41
/pricing41
/robots.txt36
/docs/install33
/blog/page/231
/docs/api31
/blog/website-analytics-guide31
/features30
/blog/ai-crawlers-explained29

AI training crawlers

PathRequests
/robots.txt184
/pricing16
/blog/15
/docs/api14
/docs/install14
/blog/ai-crawlers-explained12
/10
/blog/website-analytics-guide8
/features5
/about4

AI search crawlers

PathRequests
/pricing27
/24
/blog/ai-crawlers-explained18
/blog/website-analytics-guide14

AI agents (user-triggered)

PathRequests
/docs/install14
/pricing13

Other bots

PathRequests
/104
/pricing22
/blog/ai-crawlers-explained19
/api/v1/users13
/.env12
/docs/install12
/wp-login.php11
/xmlrpc.php9
/docs/api8
/blog/website-analytics-guide8

Status codes

StatusPeopleSearchAIOther bots
200838312360129
2060008
301082032
304386000
4000008
4030955
40490482959

Requests by day

DayPeopleSearchAIOther botsTotal
2026-11-02179636239343
2026-11-03183655243343
2026-11-04191586034343
2026-11-05183676330343
2026-11-06195705325343
2026-11-07201724426343
2026-11-08182566044342
A user agent is just a header and anyone can send Googlebot. The table shows truncated IP prefixes so you can spot a "crawler" coming from an unexpected network. To confirm one, do a reverse DNS lookup and a forward lookup on the full IP (Google, Bing, Baidu, Yandex, Apple and OpenAI publish the domains, listed under "Verify"), or compare against the operator's published IP ranges. See Google's verification guide.

Version v1.0Updated Update history

Read the result

What the report tells you

In the sample, people made 55% of requests, search engines 19%, AI crawlers 16% and other bots 10%. Here is how to read those numbers for your own site.

Share of requests

Requests, not visits: one page view by a person can pull a dozen files (scripts, styles, images), while a crawler usually fetches just the HTML. So people look bigger here than in page counts. Compare the bot shares with each other and over time, not against your analytics sessions.

Top bots and IP prefixes

A real crawler arrives from its operator's network. In the sample, 260 Googlebot requests came from one prefix and 18 from another, which is the pattern a spoofed user agent leaves. Verify suspicious ones with reverse DNS before blocking anything.

Disallowed paths

Requests a crawler made to paths your robots.txt disallows. A few right after you change robots.txt are normal: RFC 9309 lets crawlers cache the file for up to 24 hours. A steady stream means the crawler ignores it, or the user agent is fake.

Status codes and days

Many 404s for search engines point to broken internal links or stale sitemaps; 301 chains waste crawl requests; 403s to a crawler mean your firewall blocks it, which may or may not be what you intended. A spike on one day often matches a deploy or a new sitemap.

"People" means no bot rule matched. Scripts that send a normal browser user agent end up here too, so treat it as an upper bound. TapCub's product adds header, behaviour, network and rate signals on top of the user agent; this tool uses the user agent only.

How to use it

Get the log, drop it, read the report

You need read access to the server or CDN logs. Larger sites usually rotate logs daily; a week gives a good picture.

  1. 1

    Find the access log

    Nginx: /var/log/nginx/access.log. Apache: /var/log/apache2/access.log or /var/log/httpd/access_log. IIS: C:\inetpub\logs\LogFiles\W3SVC1\. Cloudflare: files from a Logpush job (HTTP requests dataset). Rotated .gz files work as they are.

  2. 2

    Drop the file

    The format is detected from the first 50 lines and the file is read in chunks with a progress bar, so a few hundred megabytes is fine. Paste your robots.txt in the optional box to check disallowed paths.

  3. 3

    Act on it

    Block or rate-limit bots you do not want, fix the 404s search engines hit, and export the CSV to compare with next month.

Rules

How lines are read and classified

Each request is matched against TapCub's 197+ built-in bot rules in order, case-insensitively, and the first rule that matches decides the bot and its type. An empty user agent counts as a scripted client. These are the same rules TapCub uses for bot traffic.

  • Days use the log's own clock: local server time for Nginx and Apache, UTC for Cloudflare and IIS
  • Paths are counted without the query string; the robots.txt check uses the full path and query
  • Parsing is done line by line; up to 5,000 distinct paths per group are kept, the rest go under "(other paths)"
Supported log formats and the fields used
FormatRecognised byFields used
Nginx / Apache combinedIP - - [time] "GET /path HTTP/1.1" status bytes "referer" "user agent"IP, date, request path, status, user agent
Apache commonSame without referer and user agentIP, date, path, status (no bot split)
Cloudflare LogpushJSON per line with ClientRequestUserAgent or ClientRequestURIClientIP, EdgeStartTimestamp, ClientRequestURI, EdgeResponseStatus, ClientRequestUserAgent
IIS W3C extended#Fields: header linedate, c-ip, cs-uri-stem, cs-uri-query, sc-status, cs(User-Agent)
Worked example

What the sample log shows

The sample is synthetic: a small site over seven days, with a robots.txt that blocks GPTBot and Bytespider from 2 November. The numbers below come straight from the report above.

Findings from the synthetic sample log
FindingNumberWhat it means
Bots in total15 different botsSearch engines, AI crawlers, SEO tools, uptime checks, link previews and scripts
AI training crawlers12% of requestsMostly GPTBot, ClaudeBot and Bytespider
GPTBot on disallowed paths13 of 121 requestsAll on 2 November; afterwards it only fetches robots.txt, consistent with the 24-hour cache allowed by RFC 9309
"Googlebot" on disallowed paths13 requestsAll from the second IP prefix (18 requests), hitting /cart and /search: likely a spoofed user agent
Bytespider on disallowed paths15 requestsAlso only on the first day of the block

With a real log you would confirm the suspicious Googlebot by reverse DNS on its full IP addresses before blocking. The sample uses documentation-only IP ranges, so no lookup is possible there.

Common mistakes

Misreading server logs

Logs are precise about requests and silent about intent.

Trusting the user agent

Blocking or allowing by user agent alone is easy to fool. Verify the big crawlers by DNS or IP range and treat unverified ones as unknown.

Comparing requests with visits

A log counts every file. Bot share by requests is not the bot share of page views or sessions; filter to HTML pages or compare like with like.

Reading only one server

Behind a CDN or load balancer, each origin sees part of the traffic, and cached hits never reach it. Use CDN logs or combine all origins.

Expecting robots.txt to block

robots.txt is a request, not a lock. Well-behaved crawlers follow it; for the rest you need firewall rules, rate limits or authentication.

FAQ

Server log analyzer questions

Still have a question?

Chat with the team behind TapCub — we usually reply within a few hours on business days.

How do I see which bots crawl my website?

Look at the server access log, not your analytics: most crawlers do not run JavaScript, so tag-based analytics misses them (the few that render pages, such as Googlebot, are usually filtered out as bots). Drop the log here and the "Top bots" table lists every recognised crawler with its request count, type and IP prefixes.

How can I tell if AI crawlers are visiting my site?

AI crawlers identify themselves in the user agent: GPTBot, OAI-SearchBot and ChatGPT-User (OpenAI), ClaudeBot (Anthropic), PerplexityBot, Bytespider (ByteDance), CCBot (Common Crawl) and others. Some opt-outs, such as Google-Extended, are robots.txt tokens only and never appear in logs. The report splits them into training crawlers, AI search crawlers and user-triggered agents, which matters if you want to block training but stay visible in AI answers.

Is my log file uploaded anywhere?

No. The file is read with your browser's File API and processed on your device; there is no upload step and no server-side processing. Only aggregate numbers appear on screen and in the CSV, and IP addresses are cut to /24 or /48 prefixes.

How big a log file can it handle?

Up to 1 GB per file, read in chunks so memory use depends on the number of distinct bots and paths rather than on file size. A compressed .gz is decompressed on the fly. For very large logs, analysing a few representative days is usually enough.

Can a user agent be faked?

Yes, trivially. That is why the report shows IP prefixes and which crawlers publish a verification domain. Google, Bing, Baidu, Yandex, Apple and OpenAI document reverse DNS checks or IP ranges; a "Googlebot" that fails the check is not Google.

Why do crawlers still request pages I disallowed?

Three common reasons: robots.txt changed recently and the crawler still uses its cached copy (RFC 9309 allows up to 24 hours), the user agent is spoofed, or the crawler does not follow robots.txt. Agents acting for a user, such as ChatGPT-User, may not apply robots.txt rules the same way as crawlers.

Why is the people share so high?

Because requests include every image, script and stylesheet a browser loads, and because anything that sends a normal browser user agent, scrapers included, lands in "People". Use it as an upper bound and look at the bot rows for the details.

Which log formats are supported?

Nginx and Apache in combined or common format, Cloudflare Logpush HTTP request logs as JSON lines, and IIS W3C extended logs with a #Fields header. Custom formats work if each line starts with the standard combined fields.

Changelog

Update history

New features, fixes and data refreshes for this tool, newest first.

  1. · v1.0

    LaunchedFirst release.

Data this tool relies on

  • Bot and AI crawler rules (same as the TapCub product) — checked 2026-11-10, reviewed every 3 months (next review by 2027-02-10)

Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates

Next step

Keep bots out of your numbers automatically

TapCub separates people from bots on every report, keeps a ledger of AI crawlers and can import your server logs, so this check does not have to be a monthly chore.

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics