Skip to main content
NewNMC’s advertising guidelines for doctors are in force from 6 Oct 2026. See what to change, and get a free compliance auditNew NMC advertising rules for doctors: what to change
SEO

Reading Server Logs for Googlebot, Bingbot and AI Crawlers on a Clinic Site

A step-by-step method for parsing 30 days of access logs from a small clinic site on shared hosting: verify the bots, read the status-code mix and measure crawl by page template.

Reading Server Logs for Googlebot, Bingbot and AI Crawlers on a Clinic Site

This post is for the marketing lead or SEO of a small clinic or practice whose website runs on shared hosting, and who has never opened an access log. Search Console tells you what Google chose to report. The server log tells you what actually requested your pages: every bot and every human, with the URL, the time, the status code and the user-agent string.

You will not need a dedicated log platform. A month of logs from a clinic site is small enough for a spreadsheet or a short script. The method below covers getting the files, separating real crawlers from impostors, reading the status-code mix, and measuring how often each type of page is crawled. We describe the method rather than report figures from any one site, because the useful numbers are the ones from your own logs.

A caution before you start. Access logs contain IP addresses, and under most privacy policies those are personal data. Work on a copy, keep it on a restricted drive, do not paste raw lines into shared documents or chats, and delete the working copy when you are done.

Step 1: Get 30 days of raw logs

On shared hosting, access logs are usually available from the control panel (look for "Raw access", "Access logs" or "Metrics") or by FTP/SFTP from a logs directory. Three practical problems recur.

  • Retention. Many hosts keep only a few days of raw logs, rotating and compressing older ones. If you can only get a week, start a scheduled download now and analyse again in a month.
  • Format. Most hosts write the "combined" format: client IP, timestamp, request line, status, bytes, referrer and user agent. Check the first line. If the host adds response time or the host header, note which column it is.
  • Proxy or CDN in front. If the site sits behind a CDN, the IP in the origin log may be the CDN's. Look for a forwarded-for field, or use the CDN's own logs.

Concatenate the files in date order and keep one working file. Confirm that the first and last timestamps cover the 30 days you expect.

Step 2: Filter by user agent, then verify

Start by splitting traffic by user-agent string: Googlebot, Bingbot, known AI crawlers, other bots, and everything else. The user-agent string alone proves nothing, because anyone can send "Googlebot" in a header. Verification matters because fake crawlers are common, and counting them as Google will skew every conclusion.

Googlebot. Google's verifying Googlebot guide gives two methods. The manual one: run a reverse DNS lookup on the IP, confirm that the hostname ends in googlebot.com, google.com or googleusercontent.com, then run a forward lookup on that hostname and confirm it returns the original IP. The automatic one: match the IP against the published JSON files of crawler ranges (common crawlers, special-case crawlers and user-triggered fetchers are separate files). Match against the range lists for bulk work, and use reverse DNS for spot checks.

Bingbot. Microsoft documents how to verify Bingbot and publishes an IP list; apply the same two-way logic.

AI crawlers. OpenAI's crawler documentation lists three separate agents with different purposes and each has its own published IP list: GPTBot, used for content that may be used to train its models; OAI-SearchBot, which surfaces sites in ChatGPT search; and ChatGPT-User, which fetches a page when a person's request in ChatGPT triggers it. The document states that ChatGPT-User is not used for automatic crawling and that robots.txt rules may not apply to it. These differences matter when you decide what to allow. Other operators, including Anthropic and Perplexity, publish their own user-agent names and documentation; check each operator's page rather than relying on a list from a blog, including this one.

Anything that claims a verified crawler's name but fails verification goes into a separate "impostor" bucket. Keep it out of the totals.

Step 3: Read the status-code mix

For each verified crawler, count requests by status code. Group them as 200, 301/302/307/308, 304, 404/410, 403/401, 429 and 5xx. What each group tells you:

  • 200 on the pages you care about is the healthy baseline.
  • A large share of 301s means crawlers are following old URLs. Look at the Location values. Internal links, sitemap entries or old campaign URLs may still point at redirected addresses, and each hop costs a request.
  • 304 (Not Modified) is good. It means the server answered a conditional request and Google reused its copy. If you never see 304s, the server may not be sending the headers that make them possible.
  • 404 and 410 from a crawler that discovered the URL by following a link means something on your site or another site links to it. Group them by pattern, such as old WordPress paths, removed doctor pages or mistyped campaign URLs.
  • 403, 401 and 429 to a verified crawler suggest a firewall, security plugin or rate limiter is blocking the bot. This is a frequent cause of "Googlebot cannot access" warnings on shared hosting.
  • 5xx means the server failed. Check the timestamps; clusters usually line up with backups, plugin updates or traffic spikes.

Do the same split for the impostor bucket. A flood of fake Googlebot 404s on admin or login paths is a security sign, not an SEO one, and your host can block it.

Want this applied to your practice? Get a free seo audit.

Book my free audit

Step 4: Group URLs by template and count crawl frequency

Group the URL paths into templates. On a clinic site that might be: home, service or treatment pages, doctor profiles, location pages, blog posts, tag and category archives, search results, feeds, the WordPress wp-json and wp-admin paths, images and scripts, and parameter URLs (anything with ?).

For each template and each verified crawler, calculate:

  1. Requests in 30 days.
  2. Distinct URLs requested.
  3. Requests per distinct URL, a rough measure of crawl frequency.
  4. Last-crawled date for each important URL, which is easy to pull from the sorted log.

Then compare with what you want. Your most valuable templates, usually treatment and location pages, should be crawled regularly. If they are not, look for causes: weak internal linking, a slow server, a noindex or canonical issue, or a sitemap that does not list them.

Also look at the share of requests that go to templates you do not care about. If a verified crawler spends many of its requests on internal search results, calendar archives or filter parameters, you have a crawl-waste problem that can be fixed with internal-link changes, robots.txt rules for the parameter patterns, or by removing the links that expose those URLs. Google's faceted navigation guidance covers the options.

A worked example, with invented numbers

To show the arithmetic, suppose a clinic's log for 30 days contains 1,200 verified Googlebot requests. Suppose 60 go to treatment pages (30 distinct URLs, so two requests per URL), 40 go to doctor profiles (8 URLs, five per URL), 420 go to blog posts (180 URLs), and 500 go to URLs with query strings from an old site search. These figures are hypothetical, not from any client. The reading would be: treatment pages are crawled about every two weeks, doctor profiles roughly weekly, and more than a third of the crawl is spent on search-result URLs that have no reason to be indexed. The action would be to remove internal links to search-result URLs and block the parameter in robots.txt, then check the next month's log for a shift in the mix.

Step 5: Check the things logs reveal that reports hide

Time of day. If crawl bursts coincide with slow responses or 5xx errors, the host may be struggling at peak. Move heavy jobs, such as backups, away from them.

Response time. If your log format includes request duration, sort by it. The slowest templates deserve attention first.

Robots.txt and sitemap fetches. Confirm Googlebot fetched robots.txt recently and the sitemaps you submitted. A gap means a problem upstream.

Resource files. Check that crawlers can fetch the CSS, JavaScript and images needed to render the page. Blocked resources can reduce what Google understands.

New content discovery. Find a page you published recently and check how long it took for a verified crawler to request it. If days pass, strengthen internal links and the sitemap.

AI agents. Compare which pages each AI agent requests with your high-value pages. If an assistant's fetcher is requesting pages you did not expect, such as old PDFs, consider whether they still belong online. If it reaches none of your service pages, check that the pages are not blocked and that internal links expose them. Our notes on AI search optimisation explain what these crawlers are used for.

What to do with the results

Finding in the logLikely causeAction
Verified bots hit many 301sInternal links or sitemap use old URLsUpdate links and sitemap to final URLs
Verified bots get 403 or 429Security plugin or host firewallAllow verified crawler ranges; test with URL Inspection
Crawl concentrated on parameter URLsSite search, filters, tracking parametersRemove links; block the pattern in robots.txt
Money pages crawled rarelyWeak internal links, slow server, noindexFix links and check status; resubmit the sitemap
Many fake crawler hits on login pathsBot scanningAsk host to block; leave it out of SEO totals
AI agents blocked but you want visibilityRobots rules or firewallDecide per agent; allow deliberately

A monthly routine

  1. Download the month's logs.
  2. Verify crawler IPs against the published ranges.
  3. Produce one table: template by crawler, requests, distinct URLs, status mix.
  4. Compare it with last month's table.
  5. Record two actions and review them next month.

Search Console's Crawl Stats report shows a Google-side view of the same activity and is worth comparing with your log. If you want this kind of analysis folded into regular reporting, see our technical SEO audit and SEO reporting pages, and our guide to AI search optimisation for the AI-crawler side.

Filed underlog file analysis SEOserver log analysis Googlebotverify Googlebot reverse DNSAI crawler logs GPTBotclinic website crawl analysis

About the author

Co-Founder & CTO · Gurugram, India

Arush builds the systems the rest of the company runs on — the patient-acquisition pipelines, the AI chatbots, the analytics that tie a single click to a booked appointment. If a campaign reports a number, it's because something his team built is tracking it.

Free guide · 17 pages

The Patient Acquisition Blueprint

A 90-day plan from first search to booked appointment.

The Pioneers Brief — one essay, three benchmarks, one teardown, every Thursday. Subscribe free →

Free seo audit

Your next chapter starts with a conversation.

Three quick questions. We come prepared with a plan for your specialty and city.

  • A 30-minute call with a healthcare specialist
  • Your top three growth opportunities, in writing
  • Honest advice — even if that means not hiring us
  • No obligation and no hard sell
You’ll speak with a senior strategist
Consultations are hosted by Arush Thapar’s team.
Step 1 of 3Takes 30 seconds

What do you want to improve first?

Details stay privateNo obligationReply within 1 working day

Client portfolio · Healthcare websites

Work relevant to reading server logs for googlebot bingbot and ai crawlers on a.

Explore client work →