Technical SEO

Server Log Analysis for SEO: What Bots Really Crawl

Server log analysis for SEO means reading your web server's access logs to see which URLs Googlebot and other crawlers actually request, how often, and what status codes they get back.

By SEORecheck Research Team, SEO auditorsPublished 10 min read

Server log analysis for SEO: cyan crawl traces connect web pages to a server and glowing request records.
Server logs reveal what bots really crawl

Server log analysis for SEO means reading your web server's access logs to see which URLs Googlebot and other crawlers actually request, how often they come back and what status codes they get. Other SEO data is sampled, delayed or simulated. Logs are a first-hand record of every bot visit, so they show where crawling is wasted and which pages get missed.

This guide covers getting the logs, cleaning them, checking that a "Googlebot" hit really came from Google, the patterns worth looking for and how to turn them into fixes.

What is server log analysis for SEO?

It's the process of filtering your server's access log down to search engine and AI crawler requests, then measuring what they crawl. You compare that against what you want crawled: your indexable, important pages. The gaps between the two are your fix list.

Each line in an access log is one HTTP request. A typical line in the common "combined" format looks like this:

66.249.66.1 - - [28/Oct/2026:09:14:02 +0000] "GET /shoes/red-runner HTTP/1.1" 200 48213 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

From one line you get the client IP, the timestamp, the method and URL, the status code, the response size, the referrer and the user agent. Multiply that by weeks of traffic and you can answer questions no crawler tool can: did Google fetch the new category page? How many requests went to filter URLs? Which bot hit the 500 errors at 3 a.m.?

What can logs show that Search Console and crawlers can't?

Logs show what bots actually did, URL by URL. Search Console gives aggregated Google data, and a site crawler shows what could be crawled. Logs give you the exact requests, including every bot other than Google, with timestamps and responses you can join to your own URL list.

Data source What it tells you Main limit
Server access logs Every request by every bot, per URL, with status and timing Raw, large, needs cleaning and bot verification
Search Console Crawl Stats Google's crawl requests, responses, file types, purpose, Googlebot type, host status Google only, aggregated, example URLs rather than a full list
Site crawler (audit tool) Which URLs are linked, indexable, redirected or broken Simulates a crawl and doesn't show real bot behavior
URL Inspection Google's view of one URL One URL at a time

Google's Crawl Stats report documentation lists the breakdowns it offers: total requests, download size, average response time, host status, responses by status code, file type, crawl purpose (discovery vs refresh) and Googlebot type. The same page even suggests checking "your website logs" when you look into crawl rate spikes. So the two work together. Crawl Stats is the quick overview, and the logs give you the URL-level detail behind it.

Who actually needs log file analysis?

Log analysis pays off most on large or fast-changing sites, sites with faceted navigation, and sites that just went through a migration. A 40-page brochure site rarely needs it. Search Console and a crawl will usually tell you enough there.

Google's crawl budget guide is aimed at sites with 1 million+ unique pages that change about weekly, or 10,000+ pages that change daily. For other sites it says that keeping the sitemap up to date and checking the Page Indexing report regularly is usually enough. Logs still help smaller sites in a few cases:

  • After a migration or redesign, to confirm Googlebot is following the new redirects and reaching the new URLs.
  • When pages sit in "Discovered – currently not indexed" and you want to know whether Google has ever requested them.
  • When server errors or slowdowns show up in Crawl Stats and you need the exact URLs and times.
  • When you want to know how AI crawlers use your site, since Search Console doesn't report them at all.

If crawl budget is your main worry, our crawl budget optimization guide goes deeper into the fixes.

How do you get and prepare server logs?

Ask your host or developer for the raw access logs covering at least 30 days, from every server or CDN that serves HTML. Then filter them down to bot requests, normalize the URLs and verify the bots. A clean dataset matters more than a fancy tool.

Where the logs live

  • Apache / Nginx: usually access.log files, often rotated and gzipped daily.
  • Managed hosting: often a "raw access logs" download in the control panel. Some hosts keep only a few days, so turn on archiving first.
  • CDN or reverse proxy: if a CDN serves cached pages, your origin server never sees those requests. You need the CDN's logs too, or you'll be missing part of the picture.
  • Load-balanced setups: merge the logs from every node.

Check whether the log records the real client IP or the proxy's IP. Without the real IP, you can't verify bots.

Clean the data

  1. Keep only the fields you need: IP, timestamp, method, URL, status, bytes, user agent and, if available, response time.
  2. Filter by user agent tokens (Googlebot, bingbot, GPTBot, OAI-SearchBot, ChatGPT-User and so on).
  3. Verify the IPs (next section) and drop the fakes.
  4. Normalize URLs: lowercase the host, decide how to handle trailing slashes, and keep query strings, because parameters are often where crawl waste hides.
  5. Join the result to a crawl of your site and your XML sitemap, so each URL carries labels like "indexable", "canonicalized", "in sitemap" and "linked internally".

For a quick first look before you set up any tool, a shell one-liner works on a combined-format log:

grep "Googlebot" access.log | awk '{print $9}' | sort | uniq -c | sort -rn

This counts Googlebot requests by status code. Treat the result as a rough first look, because it hasn't been verified yet.

How do you verify that Googlebot is really Google?

Run a reverse DNS lookup on the IP, check that the hostname ends in googlebot.com, google.com or googleusercontent.com, then run a forward lookup to confirm it resolves back to the same IP. At scale, match IPs against Google's published IP range files.

This step matters because, as Google's Googlebot documentation warns, the Googlebot user-agent header "is often spoofed by other crawlers". Scrapers pretend to be Googlebot to get past blocks. If you skip verification, you might "fix" crawl patterns that Google never made.

Google's verification guide describes both methods. The manual method is the four-step reverse-then-forward DNS check. The automatic method matches IPs, in CIDR format, against JSON lists: common-crawlers.json for crawlers like Googlebot, special-crawlers.json for crawlers such as AdsBot, and separate files for user-triggered fetchers. Most log analysis tools can run this check for you. Turn it on and leave it on.

Expect the mix to lean mobile. Google says that because it mainly indexes mobile content, "the majority of Googlebot crawl requests will be made using the mobile crawler". If most of your verified hits come from Googlebot Desktop, take a closer look at your mobile setup (see our mobile-first indexing checklist).

Which patterns should you look for in the logs?

Look for four things. First, important pages that bots rarely or never crawl. Second, crawl activity spent on URLs that shouldn't exist, like parameters, duplicates and redirects. Third, error and slow responses. Fourth, changes in crawl volume over time. Each one points to a specific type of fix.

Pattern in logs What it usually means Typical fix
Key pages with zero or very few Googlebot hits in 30 days Weak internal links, deep pages, missing from the sitemap Link from stronger pages, add to the sitemap, shorten click depth
Many hits on ?sort=, ?color=, session or tracking parameters Faceted or parameter URLs eating crawl activity Stop linking to them, use canonicals, block pure crawl traps in robots.txt
Lots of 301/302 responses to bots Internal links pointing at redirected URLs, redirect chains Update internal links to the final URL
Repeated 404s on the same URLs Old links or sitemap entries pointing at removed pages Redirect if there's a true replacement, otherwise remove the links
Spikes of 5xx or 429 Server overload or rate limiting Add capacity, fix the failing endpoints
Bots crawling URLs that aren't in your crawl or sitemap Orphan pages, old sections, leaked staging URLs Link, redirect, noindex or remove
Heavy crawling of JS/CSS/API endpoints Rendering-heavy pages Check what rendering needs (see JavaScript rendering problems)

Why do 5xx errors in logs matter so much?

Server errors don't just fail one request. They also slow down future crawling. Google's crawl budget guide says that when a site slows down or "responds with server errors (5xx HTTP status codes) or rate-limiting signals (such as HTTP 429), the limit goes down and Google crawls less." Logs show you exactly when this happens and on which URLs, often during traffic peaks, backups or deploys. Group 5xx responses by hour and by URL template. A single slow search page or a timing-out product feed is a common cause. Fixing that one endpoint can bring crawl volume back for the whole site. Also check the gap between what Crawl Stats reports and what your logs show. Google's Crawl Stats help page explains that a much higher count in the report than in your logs can mean Google couldn't crawl because your robots.txt file was unavailable for too long. Google counts those as potential crawls it never actually made.

Crawl frequency vs page importance

Sort your URLs by business value (revenue pages, top categories, key articles), then add the verified Googlebot hits for each one. When important pages get crawled less than filter URLs, that's the clearest sign of a site architecture or internal linking problem. To understand which 404s matter, see 404 errors and SEO.

Logs show what bots did. To see why, you need a crawl of the same site: which links point to the redirects, which pages are orphaned, what robots.txt allows. A free SEORecheck audit crawls your pages in a real browser and reports redirects, broken links, sitemap and canonical issues, and AI crawler access in robots.txt, with example URLs. You can compare those findings directly with your log data.

How do you analyze AI crawlers in server logs?

Filter by each AI vendor's documented user agent, verify the IPs against the ranges the vendor publishes, and split the bots by purpose (search, user-triggered or training). Then check that the bots you want are getting 200 responses on your important pages.

OpenAI's crawler documentation is a good example of why separating bots by purpose matters. OAI-SearchBot is used to surface websites in ChatGPT's search features. GPTBot crawls content for training generative AI models. ChatGPT-User handles actions that users start in ChatGPT, and OpenAI notes that because these actions are user-initiated, "robots.txt rules may not apply." OpenAI publishes a separate IP list for each one (searchbot.json, gptbot.json, chatgpt-user.json), so you can verify them the same way you verify Googlebot.

Google works the same way. Its crawler overview separates common crawlers, which "always respect robots.txt rules for automatic crawls", from special-case crawlers and user-triggered fetchers. If your logs show a search-purpose AI bot getting 403s from a firewall rule while robots.txt allows it, the block is on your server, not in robots.txt. Our robots.txt guide explains how to set rules for each bot.

Logs show whether AI crawlers fetch your pages. They don't show whether those pages get cited. No vendor documents a link between crawl volume and citations.

How often should you run log analysis?

Run a full review once a quarter, and a targeted check after any migration, major deploy or sudden change in Crawl Stats. On large sites, set up a dashboard that alerts on 5xx spikes and on drops in verified Googlebot hits to key templates.

A practical routine:

  • Weekly (large sites): verified Googlebot hits per day, share of 5xx and 429 responses, top requested parameter patterns.
  • After a release: compare the 7 days before and after. Look for new 404s, new redirect hits and new URL patterns, along with your SEO regression tests.
  • Quarterly: crawl frequency vs page importance, orphan URLs, AI crawler access by purpose.

Add each fix to your plan with an owner and a date. Then recheck the logs 30–60 days later to confirm the pattern changed, for example fewer hits on parameter URLs and more on the category pages you linked.

Key takeaways

  • Server logs are the only complete record of what Googlebot and AI crawlers actually request on your site.
  • Verify bots by reverse/forward DNS or the published IP ranges before you analyze anything, because the Googlebot user agent is often spoofed.
  • Get logs from every layer that serves pages, including the CDN, and keep at least 30 days.
  • Focus on four patterns: important pages that are rarely crawled, crawl waste on parameters and redirects, 5xx/429 errors, and changes in volume.
  • Combine logs with a site crawl. Logs show what bots did, and the crawl shows why.
  • Split AI crawlers by purpose (search, user-triggered, training). Crawl data says nothing about citations.

To see how an audit turns crawl findings into prioritized fixes, look at the sample report.

All articles
A layered landscape tile connects to search nodes with a speed trail, illustrating image SEO best practices.

Technical SEO

Image SEO Best Practices: Alt Text, Formats, Speed (2026)

Image SEO means making images discoverable and understandable to Google with HTML img tags, descriptive alt text and file names, then keeping them fast with modern formats, correct sizing and smart lazy loading.

10 min read

Duplicate content SEO visualized as matching content nodes grouped in amber, with one preferred version highlighted.

Technical SEO

Duplicate Content SEO: How to Detect and Fix It

Duplicate content is the same or nearly the same content on more than one URL. It isn't a penalty, but it splits signals and wastes crawls. Find it in Search Console and a crawl, then redirect, canonicalize or rewrite.

8 min read

Blue pages joined by cyan links, each with an amber loop, illustrate pagination SEO best practices.

Technical SEO

Pagination SEO Best Practices: URLs, Canonicals, Links

Give every paginated page its own URL and self-referencing canonical, link pages with real <a href> links, avoid # page numbers, and make load more or infinite scroll fall back to crawlable pages.

10 min read