Server Log Reports
Read the Server Log Monitoring reports - Overview, Bots, AI crawlers, Security, Crawled pages, Sections, Crawl budget, Crawl map, Responses and Explore.
Once a source has delivered its first request, Server Log Monitoring opens these reports. Every report counts only the traffic the module collects: search engines and AI crawlers. See What gets collected.
Date range, comparison and filters
The controls above each report work the same way across the module.
Date range
The default window is Last 30 days, including today. Presets: Last 7 days, Last 28 days, Last 30 days, Last 90 days, Last 6 months, Last 12 months, This year (Jan - Today), Last calendar year, and Custom.
Most reports go back up to 12 months. A longer custom range is shortened at its start. When a report can only cover part of your range, an amber notice names the window it actually shows and why, for example because request-level detail is kept for a shorter time.
The date range, comparison and filters are kept in the page URL, so you can bookmark or share a view, and they carry across pages in the module.
Comparison
Tick Enable comparison in the date picker and choose Previous Period, Previous Month, Year over Year or Custom. Tiles then show the change against that window:
- +x% / -x%: the change, in neutral colors (more crawling is not automatically good or bad)
- Flat: less than 0.5% change
- No prior-period baseline: the comparison window had no traffic
- No comparable prior period: one of the windows had to be shortened, so the two can't be compared fairly
Filters
Click Filter to narrow a report. Available dimensions:
| Filter | Narrows to |
|---|---|
| Bot | One or more bots |
| Bot category | One or more bot categories, such as Search engine or AI crawler |
| Status code | Exact HTTP status codes |
| Status class | 2xx, 3xx, 4xx, 5xx |
| Verification | Verified (any method), Verified (IP range), Verified (reverse DNS), Verified (signature), Unverified, Spoofed |
| Section | Your sections |
| URL | URLs containing a text |
| Query parameter | URLs requested with a given query-parameter name |
| Robots.txt | URLs your robots.txt disallows or allows |
Text filters can match exactly, by "contains", or by regular expression, and each can be negated to exclude matches.
Not every report supports every filter:
- When a filter can't be applied on the current page, a notice says Not applied here and offers to remove it.
- On Overview, Bots and Security, an exact Status code filter can't be combined with Verification.
- With an exact status code, figures that need every response (response time, crawl waste, verified share, bytes) read Not available with a status-code filter.
Common figures
- Response time is the 75th percentile time to first byte (TTFB): how long your server took to start answering. Three in four requests were faster, so it describes a typical slow request rather than the worst one.
- Slowest responses is the 95th percentile TTFB: the slow tail.
- Status mix is a stacked bar of 2xx Success, 3xx Redirect, 4xx Client error and 5xx Server error.
Overview
The module's dashboard: which bots and crawlers hit your server, and how much of your crawl budget they waste.
All bots (follows your filters):
| Tile | What it shows |
|---|---|
| Total hits | Every collected bot hit in the window |
| Response time | 75th percentile TTFB across all bot hits |
| Crawl waste | Share of bot hits spent on a failing, redirecting, parameterized or robots.txt-disallowed URL. Green below 10%, amber from 10%, red from 30%. See Crawl budget |
| AI crawler share | Share of hits from an AI crawler, AI search, AI assistant or AI agent |
Googlebot only (verified Googlebot only; your filters do not apply here):
| Tile | What it shows |
|---|---|
| Googlebot hits | Verified Googlebot fetches, with the time of the last crawl |
| Answered 2xx | Share of Googlebot fetches answered successfully |
| Redirected | Share answered with a 3xx other than 304. Each one costs Googlebot a second fetch. Amber from 10% |
| Errors (4xx/5xx) | Share answered with an error. Red from 5% |
| Response time | 75th percentile TTFB for Googlebot |
Below the tiles:
- Hits over time: bot hits stacked by bot category, by hour, day, week or month. Relative switches to each category's share. Markers show when robots.txt changed and when Uptime Monitoring recorded Downtime, so you can see whether a crawl change lines up with either.
- Googlebot crawl capacity: verified Googlebot hits as bars against Googlebot's response time as a line, with a one-sentence takeaway. A slow server is one of the main reasons Google crawls less.
- Top bots: the 10 busiest bots, with category, hits, share and response time. Click a bot to filter the page to it, or View all bots.
- Open findings: server log alerts currently firing for this domain. Shown only when something is firing.
Bots
All bots
Every bot that hit the site in the window, and its share of the traffic. Quick chips switch between All, Search engines and AI.
| Column | Meaning |
|---|---|
| Bot | Bot name, with its vendor |
| Category | The bot's category |
| Hits / Share | Hits, and share of all bot hits |
| Trend | Change against the comparison window (with comparison on) |
| Verified | Share of hits confirmed to come from the bot's published IP ranges or reverse-DNS suffixes. Not measured for bots that publish neither |
| Response time / Slowest responses | 75th and 95th percentile TTFB |
| Status mix | How the bot's requests were answered |
| Last seen | The bot's most recent hit |
Click a bot to open its detail: hits, share of all bot hits, verified share, response time, first and last seen, how its requests were answered, and hits over time. Open in Explore lists the pages it hit.
AI crawlers
Which AI crawlers, search indexers and assistants actually read your site, and whether they respect robots.txt while doing it.
- Tiles: Total bot hits, AI crawler hits, AI crawler share.
- By intent splits AI traffic into Training (AI crawler), Live fetch (AI assistant) and Other (search / agent). A training crawl is a licensing question; a live fetch means a person is asking a question about your page right now.
- All AI crawlers lists every AI bot with hits, share, verified share, Robots.txt compliance (share of its hits that stayed within what your robots.txt allows it to fetch), Blocked (403), Bytes served (where recorded) and last seen.
Two caveats:
- On very high-traffic sites, part of each day's request-level detail is trimmed before storage. A compliance rate measured on what remains would look better than reality, so it shows Not measured instead.
- Bytes served can understate what a vendor took, because some hits report no size.
AI coverage gap lists pages Googlebot crawled successfully in the window that no AI crawler fetched, ordered by Googlebot hits. Tiles show Crawled by Googlebot, Also fetched by AI and Missed by AI crawlers. Use it to find content that Google sees but AI search and assistants don't. It needs one full day of collection first, and ignores filters and comparison.
Security
Bot identities faked on your site, and the networks they came from.
- Tiles: Total bot hits, Spoofed hits, Unverified hits, Verified hits.
- Fake bots lists requests claiming to be Googlebot, Bingbot or an AI crawler from an address that bot does not use: Claimed identity, Hits, Share of fake hits and Networks. Click a row to see which networks (AS numbers) the fake identity came from.
Many different bot names arriving from one network is itself a signal. The IP addresses of spoofed and unverified requests are never stored, so this report groups them by network instead.
Pages
Crawled pages
Every URL a search or AI crawler fetched, Googlebot first.
| Column | Meaning |
|---|---|
| URL | The page |
| Section | Its section, when you have section rules |
| Googlebot hits | Verified Googlebot fetches |
| All search/AI hits | Every collected crawler |
| Last Googlebot crawl | When verified Googlebot last fetched it, or Never |
| Last status | The status code the page last returned |
| Clicks | Search Console clicks, when Search Console is connected |
The table covers up to 12 months, has no row cap, and is rebuilt nightly. If the nightly build runs more than 2 days behind, a note says so.
Click a URL to open its detail: hits, bots that fetched it, response time, bytes served, first and last fetch, every status code it returned, hits over time, and which bots hit it. Per-request detail is kept for about 7 days, so the page detail covers at most the last 7 days of your range. Older crawls still count in the reports you opened it from.
To get told when a page changes, click Watch in Page Monitoring (the eye icon) on its row. See Page Monitoring.
Sections
Crawl activity grouped by your section rules, so you can see where bot traffic lands across your site: Section, Hits, Share, Unique URLs, Bytes, Response time and Last seen. Hits that match no rule appear as (unsectioned).
Section rules apply to data already collected, so this page fills in as soon as you add a rule. Click a section to open it in Explore. If you have no rules yet, click Set up sections.
Crawl budget
Where the window's bot traffic went, and how much of it earned nothing back.
Crawl waste is the share of bot hits that went to a URL earning nothing back:
- a redirect (3xx)
- an error (4xx or 5xx)
- a URL carrying query parameters
- a URL your robots.txt disallows
A 304 Not Modified is a healthy answer and is not counted as waste.
The page then breaks the budget down:
- By response status: how the window's hits were answered.
- Where the budget goes: HTML share (hits that reached an HTML page), Parameter waste (hits that carried a query string) and Redirect hops (hits that got a redirect instead of content). A card reads Not available when your logs don't record content type or query strings.
- By content type: hits, share and bytes per content type.
- Top query parameters: which parameter names attract crawling, for Googlebot or All bots. Click a parameter to see the affected pages in Explore. Typical fixes are canonical tags, robots.txt rules, or removing the parameter from internal links.
Crawl budget ROI plots each section's share of crawl against its share of Search Console clicks. It needs section rules and a linked Search Console property.
| Quadrant | Meaning |
|---|---|
| Workhorse | Earns a bigger share of the clicks than it takes of the crawl |
| Crawl drain | Takes a big share of the crawl and returns few clicks |
| Underfed | Earns clicks on a small share of the crawl, so it is worth feeding |
| Long tail | Small share of both |
Duplicate-variant crawl finds URLs crawled under more than one address that are almost certainly the same page, in three tabs: Trailing slash, Case variants and Repeat visits with query strings. Redundant hits is the crawl spent on the less-used variants. Treat case variants as candidates, not confirmed duplicates: most servers treat paths case-sensitively.
The Bot, Bot category and Section filters don't apply to Crawl budget ROI or Duplicate-variant crawl.
Crawl map
Which parts of your site a bot has reached, and which it has never touched. Switch between Folders, Treemap and Folder depth.
| Tile | Meaning |
|---|---|
| Known URLs | URLs VitalSentinel knows about from your sitemap, Search Console (performance or URL Inspection) and Web Analytics, all-time |
| Crawled by Googlebot | Known URLs verified Googlebot fetched in the window |
| Not crawled by Googlebot | Known URLs Googlebot did not fetch in the window |
| Googlebot coverage | Share of known URLs Googlebot fetched at least once |
- Folders shows your site as a folder tree. Expand a folder to see the crawl coverage of everything beneath it, with bot hits, status mix, last visit and top bot.
- Treemap sizes each tile by how many URLs are known and colors it by Coverage or by Crawl share vs. URL share. Needs a larger screen.
- Folder depth shows how many folders deep Googlebot's crawl reaches, level by level.
Click a Not crawled by Googlebot count to list those URLs. For each one you see where VitalSentinel knows it from (Sitemap, Search Console, URL Inspection, Web Analytics or Server logs), and whether another verified crawler, or Googlebot before this window, has reached it.
"Not crawled" always means not crawled by verified Googlebot in this window.
Responses
How bots are actually being answered.
- Tiles: Total hits, Failure rate (share answered 4xx or 5xx; red from 5%) and Redirect share (share answered 3xx, excluding 304; amber from 10%).
- Status codes over time: one line per Exact code or per class (By class), by hour, day, week or month. Errors only hides successful responses and Relative switches to shares. The hourly view covers up to 92 days.
- Bot by status: every distinct status code returned to each bot. Click a bot to filter the page to it.
URLs to fix
Every URL crawlers got an error or a redirect for, one row per URL, in three tabs: Not found (4xx), Server errors (5xx) and Redirected (3xx). Switch between Search engines and All bots.
Columns: URL, Status, Googlebot hits, Other search/AI hits, First seen, Last seen, and In sitemap (shown when your sitemap is synced). The page filters don't apply to this list.
Start with the URLs Googlebot hits most, and with errors on URLs that are in your sitemap.
This table also has the Watch in Page Monitoring button on each row.
Explore
Find exactly which crawler hit which page with a given status code, and share the answer as a link. Every setting on the page is kept in the URL.
- Group by: Bot + page (default), Bot, Page, Network or IP prefix.
- Sort: Most hits or Most recent.
- Every view ends with Hits, Bytes, Response time and Last seen. Click a URL to open its page detail.
Explore reads individual requests going back up to 12 months, and supports every filter.
Every non-2xx request (errors and redirects) is kept in full, but successful (2xx) responses are kept as a 1% sample. When your filters include successful responses, Matching hits (at least) is a lower bound and the real figures are higher. Filter to a specific error code and the counts are exact.
Unverified and spoofed requests have their IP redacted when they are stored, so they have no network to group by. Query-parameter names are recorded but their values never are.
Related
Connecting a Log Source
Connect server logs to VitalSentinel with the Cloudflare Worker for real-time collection, or with SFTP, FTPS, Amazon S3, Cloudflare R2, Google Cloud Storage or a file upload.
Server Log Intelligence
Join server logs with Search Console, Web Analytics, RUM and your sitemap to find stale money pages, crawl-to-click drop-offs, orphan pages and slow pages Google crawls most.