SEO GEO Lab
Original research日本語版

Crawlers don't follow sitemap order: 190K log requests analyzed

We analyzed 190,179 bot requests in our own access logs. Crawl order shows near-zero correlation with sitemap order, and ClaudeBot and GPTBot never fetched a single child sitemap.

Conclusion

Across 190,179 bot requests, crawlers did not follow sitemap order: the rank correlation between crawl order and sitemap order was ρ = 0.00 to +0.11 for every bot, and consecutive requests hit the next sitemap entry only 6.0% of the time for Googlebot, 3.4% for GoogleOther, and 1.2% for ClaudeBot.

The operator of this site also runs a separate media site covering disclosures from Japanese listed companies. That site logs the User-Agent of every page request on the server side, so we can check in raw logs the actual order in which crawlers fetch pages.

For this analysis we took 31 days of that site's logs: 190,179 requests classified as bots, covering 17,986 paths (the sitemap lists about 2,300 URLs).

The result: crawlers do not read in sitemap order.

The share of consecutive request pairs that were neighbors in the sitemap (index +1) was 6.0% for Googlebot, 3.4% for GoogleOther, and 1.2% for ClaudeBot. The Spearman rank correlation between in-session crawl order and sitemap order was ρ = 0.00 to +0.11 across all bots, i.e. no correlation. About 50% of steps moved forward, so there isn't even a direction.

What we found instead was a three-layer structure.

Figure

Three layers of crawling seen in real logs

  1. 1

    Layer 1: Entry point

    The first request of a session. Bots split into three types: those that start at robots.txt, those that start at sitemap.xml, and those that go straight to a content page

  2. 2

    Layer 2: Bursts by URL type

    If it's stock pages, the bot fetches only stock pages, hundreds in a row. The probability that the next request is the same type is 87.4% for ClaudeBot (26.2% if random)

  3. 3

    Layer 3: Order within a burst

    This is neither sitemap order nor numeric order. The bot is simply working through its own queue built from past crawls, which looks unordered from the outside

Scope: 2026-08-02 to 09-02, 190,179 requests classified as bots

This structure has two practical consequences. Neither is about how you write your sitemap; both are about how the site itself is built.

First: for AI crawlers, internal links are not a supplement but the only path. ClaudeBot fetched 2,257 paths over 31 days, yet never read a single file that lists page URLs (it fetched only the sitemap index, and child sitemaps 0 times). GPTBot is the same.

Second: a directory is the unit that gets read in one burst, so if its contents are inconsistent, the whole burst is wasted. On this site, just two directories full of legacy URL formats and dead URLs (/investors and /en) absorbed 35.8% of all bot requests. Most of that ended in redirects or 404s.

The data follows, in order.

What we measured and how

We classify the User-Agent of every request in Next.js proxy (formerly middleware) and record path / bot_name / occurred_at in a database. For this analysis we kept only the bot rows (excluding anything classified as a browser) and split sessions wherever there was a gap of 30 minutes or more.

On the sitemap side, we fetched the live /sitemap.xml (a sitemapindex) and the five child sitemaps it references, and used the order in which each <loc> appears as its index number.

Note that bot classification relies on the self-declared User-Agent; we did not verify it with reverse DNS. Suspicious paths that look like they came from scanners (/.git/config, /.env, etc.) accounted for 133 requests, or 0.07% of the total.

Test 1: Do crawlers read in sitemap order? No

For each bot, we took only the pairs of consecutive requests where both URLs appear in the sitemap, and counted the difference in index numbers.

BotPairsDiff +1 (next entry)Diff -1 (previous entry)Share moving forward
GoogleOther58,5803.4%6.0%35.3%
Googlebot1,6216.0%2.1%52.0%
OAI-SearchBot3,3552.1%2.3%49.4%
AhrefsBot1,3691.5%0.9%54.2%
MJ12bot1,2581.7%2.7%38.1%
PerplexityBot9220.9%1.0%49.9%
ClaudeBot2431.2%0.8%46.1%

With 2,255 URLs in the sitemap, a fully random order would give a +1 difference 0.04% of the time. The observed values are a few percent, but if bots were reading in order, they would be in the tens of percent. The forward share hovering around 50% across the board also shows that bots aren't progressing in any direction.

We also computed, per session, the rank correlation between crawl order and sitemap order. The figures below are medians, limited to sessions that fetched 20 or more URLs within the child sitemaps.

Figure

Rank correlation between crawl order and sitemap order (Spearman ρ)

meta-externalagent

+0.11

24 sessions

GoogleOther

+0.1

247 sessions

OAI-SearchBot

+0.08

56 sessions

ClaudeBot

+0.07

5 sessions

Googlebot

0

25 sessions

MJ12bot

0

36 sessions

PerplexityBot

-0.05

17 sessions

1.0 would mean perfect sitemap order. Every bot is near 0 = no correlation

Reordering your sitemap does nothing, at least within the scope of these logs. When you see advice like "put important pages at the top," we think it's safe to drop it from your list of things to test.

Test 2: Where do crawlers enter? Completely different per bot

Counting what the first request of each session was revealed very distinct bot personalities.

BotSessionsStarts with robots.txtStarts with sitemap.xml
MJ12bot119100.0%0.0%
ClaudeBot9573.7%17.9%
Googlebot30856.2%2.9%
SemrushBot16847.6%0.0%
AhrefsBot18618.8%57.0%
GPTBot380.0%81.6%
GoogleOther2300.0%0.0%
ChatGPT-User3890.0%0.5%
Amazonbot900.0%0.0%

GPTBot did not fetch robots.txt even once in 31 days, yet started 80% of its sessions at /sitemap.xml. The natural explanation is that it caches robots.txt for a long time.

By contrast, ChatGPT-User (the fetch triggered when a user asks ChatGPT a question) went straight to a content page (including the home page) in 387 of 389 sessions. It has no concept of an entry point; it just fetches the one page it needs. GoogleOther and Amazonbot likewise never touch robots.txt or the sitemap.

Googlebot is the opposite: 15.4% of its requests (1,687 of 10,942) were for robots.txt. SemrushBot was at 11.6%. So bots whose overall crawl speed depends on how fast robots.txt responds really do exist.

Test 3: What order is used inside a burst? The bot's own queue

ClaudeBot's longest session is a clear example.

+     0.0s  /robots.txt
+     1.7s  /sitemap.xml
+   842.2s  /stocks/3950     ← after 14 minutes of silence
+   842.2s  /stocks/8136
+   845.5s  /stocks/3733
+   845.5s  /stocks/6902
+   847.0s  /stocks/4641
   (followed by 735 consecutive /stocks/ requests)

The session an hour earlier fetched /investors/ 627 times in a row; on another day it fetched 219 English-version articles in a row. One session = one URL type. The probability that the next request is the same type was 87.4%, far above the 26.2% you'd get from a random shuffle.

And the order within a burst is neither stock-code order nor sitemap order. Two findings were decisive.

Figure

Ruling out the idea that bots follow links on the spot

Zero URL overlap between sessions

Three sessions of 49, 141, and 735 requests

  • Not a single stock page was fetched in more than one of the three sessions
  • Requests ÷ unique URLs was 1.1x (almost no repeat fetches)
  • = there is a queue that remembers how far it has gotten

No hub page fetched right before

Just before a burst of detail pages starts

  • ClaudeBot: 0 of 18 sessions
  • Googlebot: 4 of 364 sessions
  • = bots are not opening a listing page and following its links
Result of cross-checking three ClaudeBot sessions

In other words, crawlers don't "read" the site on each visit. They work through a URL queue built from past crawls, sliced by URL type. The order of that queue is determined by the crawler's internal logic, so the site cannot reorder it.

The practical conclusion of this analysis: the only thing a site can influence is what goes into the queue.

Side finding 1: ClaudeBot and GPTBot never descend into child sitemaps

Sites with many URLs use split sitemaps, where a sitemapindex references child sitemaps (defined in the sitemaps.org protocol, and recommended by Google for sitemaps exceeding 50,000 URLs / 50 MB). This site's /sitemap.xml references five children, such as /sitemap/pages.xml.

We counted every /sitemap* fetch over the 31 days.

Bot/sitemap.xml (index)/sitemap/*.xml (children)
Googlebot30101
Bingbot2790
AhrefsBot13118
SemrushBot27
ClaudeBot800
GPTBot310
PerplexityBot10

ClaudeBot fetched the index 80 times and GPTBot 31 times, yet neither fetched a single child sitemap. Googlebot and Bingbot descend properly.

ClaudeBot still reached 2,259 paths and GPTBot 1,380, so they do discover URLs via links. But the assumption that "having a sitemap tells AI crawlers about all your URLs" does not hold, at least for these two bots.

Figure

What to do if you use split sitemaps

What to do

  • Count hits on child sitemaps (/sitemap/*.xml) per bot (check whether any bot is at 0)
  • If you have well under 50,000 URLs, consider consolidating into a single sitemap instead of splitting
  • Keep every URL reachable through internal links from listing pages, without relying on the sitemap

What to skip

  • Tweak the order of URLs in the sitemap
  • Tweak priority or changefreq values (in these logs they had nothing to do with crawl order anyway)
  • Spend time on llms.txt (0 hits from all bots combined over 31 days in this log)
Implications from this one log. Sample: one site, 31 days

Over the same period, /llms.txt got 0 hits from all bots combined. Browsers did request it, but no crawler fetched it even once.

Side finding 2: GoogleOther is the first to reach new URLs

For the 1,042 article URLs that first appeared 10 or more days after the log started, we tallied which bot fetched each one first, and how many hours each bot lagged behind the first one.

Figure

How fast new URLs are discovered

640

URLs where GoogleOther was first

61.4% of 1,042

8.0h

Googlebot lag (median)

81.8% coverage

27.1h

OAI-SearchBot lag

41.7% coverage

153h

PerplexityBot lag

39.1% coverage

Scope: 1,042 article URLs first seen on or after 2026-08-12

GoogleOther is a fetcher Google uses for purposes other than Search (including AI-related products), and it is listed in Google's crawler documentation. On this site, GoogleOther accounted for 57.6% of all bot requests (about 3,534 per day), re-fetching the same URL 16.4 times on average. That is an order of magnitude beyond Googlebot's 1.9.

AI crawlers as a whole (GoogleOther, GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, meta-externalagent, Amazonbot, Applebot, etc.) made up 68.3% of all bot requests.

If ordering doesn't matter, is there nothing a site can do? Judging from the logs, two things matter: what goes into the queue and how URLs are grouped.

ClaudeBot fetched 2,257 paths over 31 days (excluding robots.txt and sitemaps). Yet the only sitemap ClaudeBot fetched was /sitemap.xml (the index), which contains nothing but the URLs of the five child sitemaps. Not a single page URL is listed there. Child sitemaps: 0 fetches.

So ClaudeBot knows 2,257 paths without ever having read a file that lists page URLs. The only possible discovery path is links (internal links or references from other sites). GPTBot shows the same pattern: 1,379 paths fetched, 0 child sitemaps.

Figure

Paths fetched without reading any list of page URLs

2,257

Paths fetched by ClaudeBot

Fetched sitemap.xml (index) 80 times

1,379

Paths fetched by GPTBot

Fetched sitemap.xml (index) 31 times

0

Child sitemap fetches by either bot

Googlebot: 101, Bingbot: 90

Both bots fetched child sitemaps (/sitemap/*.xml) 0 times

For bots the sitemap doesn't reach, internal links are not a supplement but the only path. "It's in the sitemap, so we're fine" does not hold for AI crawlers.

2. Crawling is grouped by directory

The "bursts by URL type" from Layer 2 become even clearer when you split URLs by their first path segment (directory).

BotNext request is in the same directoryIf the log were randomly shuffled
MJ12bot95.3%38.1%
ClaudeBot87.5%26.1%
AhrefsBot71.2%40.6%
GPTBot68.2%27.1%
PerplexityBot67.1%27.6%
Googlebot51.0%15.7%
GoogleOther40.5%9.8%

This matches Google's official documentation. The SEO Starter Guide says that grouping pages on similar topics into directories lets Google learn how often each directory changes, and crawl different directories at different frequencies (guidance aimed at sites with more than a few thousand URLs).

What the logs show is that this behavior appears not only for Googlebot but equally for ClaudeBot, GPTBot, and PerplexityBot.

Flip that around and mixing pages with different update frequencies in one directory costs you. If pages updated daily share a directory with pages that haven't changed in a year, per-directory frequency learning stops working.

More top-level directories, or fewer with deeper second levels?

The practical dilemma here is whether to add more directories side by side at the first level, or group them and build out the second level.

The short answer: we saw no downside to grouping. The unit bots group by was not "the first level" but whichever level actually groups pages of the same kind.

This site has structures where multiple second-level segments sit under one first-level directory, such as /en/articles/<id> and /en/category/<name> (21,803 requests over 31 days). We measured whether bots group by the second level there.

BotNext request within /en/ has the same second levelIf the log were randomly shuffled
MJ12bot95.3%49.4%
AhrefsBot76.4%51.7%
Googlebot75.6%45.6%
GPTBot69.6%32.4%
GoogleOther58.5%32.2%
OAI-SearchBot45.2%31.5%

Even under a single first-level directory, bots group their reads by the second level. There's no need to worry that consolidating will break the burst unit.

Conversely, we found no numbers showing a benefit from adding more first-level directories. Google recommends directories so it can learn update frequency, so splitting pages with the same update frequency across first-level directories doesn't give it anything new to learn.

Figure

When to split a directory and when not to

Split

  • Update frequencies clearly differ (daily updates vs. content unchanged for years)
  • The content types differ and only one of them keeps growing in volume
  • You want to treat only one of them differently with robots.txt or noindex

Don't split

  • The meaning differs, but the update frequency is the same
  • You just want things to be tidier
  • Because the URLs look cleaner
Split on differences in update frequency and content type, not differences in meaning

One number does hint at a cost of depth. There are 1,241 cases where the same article ID was requested at both /articles/<id> (2 levels) and /en/articles/<id> (3 levels). The 2-level side got 15,381 fetches in total and the 3-level side 7,353. The median ratio was 0.47: the deeper version got less than half.

That said, we can't attribute this to depth alone. /en is the English version, a deprecated section that now 308-redirects to the home page. Language and priority differences are mixed in, so treat this as a reference value only.

Also, on this site the third level exists only under /en, and there is no data for 4 or more levels. Whether deep nesting is a disadvantage could not be tested with these logs.

3. Because directories are read in bursts, their contents become the crawl outcome

If bots read a directory in one go, then what's in that directory becomes the crawl outcome as-is. Put good pages in and they all get picked up; put junk in and the bot leaves with junk.

For the same site, we lined up the number of URLs listed in the sitemap per directory against the number of unique URLs bots actually requested.

DirectoryIn sitemapURLs actually requestedOf which not in sitemapShare of requests outside sitemap
/investors53810,0369,50172%
/en02,0342,034100%
/stocks6674,0823,41553%
/articles9171,40150834%
/date8123215231%
/faq101000%
/category1426120.3%

The 12 /category URLs outside the sitemap received only 13 requests in total over 31 days.

/investors lists 538 URLs in the sitemap, yet 10,036 unique URLs were actually requested. Here is the breakdown.

  • 7,115 were the legacy URL format (/investors/加藤産業株式会社, i.e. a company name, Kato Sangyo, in Japanese). These now 308-redirect to /investors/2925
  • 2,386 were numeric IDs not in the sitemap (/investors/9999, etc.). These return 404

This directory received 35,528 requests over 31 days, 18.7% of all bot requests. 72% of them ended in a redirect or a 404.

/en is even more extreme: 32,608 requests (17.1% of all bot traffic) went to a directory with not a single URL in the sitemap. That path now 308-redirects to the home page. Bots are still carrying remnants of a former English version in their queues.

In contrast, /faq (10 URLs) and /category (14 URLs) have near-identical sitemap and actual URLs. Coverage is 100% for both Googlebot and GoogleOther.

Figure

How tidy a directory is vs. what the crawl achieves

Tidy directories

/faq, /category, /date

  • Only one URL format
  • Sitemap and actual URLs nearly match
  • 94–100% coverage
  • Nearly every request lands on a 200

Messy directories

/investors, /en

  • Legacy and current URL formats coexist
  • 2,386 nonexistent IDs requested
  • /investors coverage stalls at 50–51%
  • These two absorb 35.8% of all bot requests
Same site, same period. Coverage for Googlebot / GoogleOther

So "group pages into directories" doesn't mean packing URLs in; it means giving each directory one URL format and one update frequency. If the unit that gets read in a burst is inconsistent, the whole burst is wasted. By our count, cleaning up just these two directories would free up a third of this site's crawling for other uses.

Figure

Fix the paths, not the entry point

What to do

  • Keep every detail page reachable from listing and category pages (some bots never get the sitemap)
  • Put pages of the same type and update frequency in the same directory
  • Separate directories with high and low update frequency

What to skip

  • "Put important pages at the top of the sitemap" (order has no correlation with crawl order)
  • Designing on the assumption that bots follow links within a single crawl (bots work through a queue built on earlier visits)
  • Mixing pages with widely varying update frequencies in one directory
What this analysis supports

Incidentally, the popular term "hub and spoke" does not appear in Google's official documentation. What the documentation actually says comes down to three things: "organize your site logically," "group similar topics into directories," and "make your links crawlable." These logs show that the latter two are actually observable in crawler behavior.

How to check this on your own site

If you have server or CDN logs, you can run the same analysis. No special tools required.

Figure

Steps to test crawl order from logs

  1. 1

    Keep only bot rows

    Identify bot names from the User-Agent and drop browser rows. This is based on self-declaration, so verifying with reverse DNS makes it stricter

  2. 2

    Split into sessions at 30-minute gaps

    One session = one crawl. Counting whether the first request is robots.txt, sitemap.xml, or a content page reveals each bot's personality

  3. 3

    Look at runs by URL type

    Compare the probability that the next request is the same type against a randomly shuffled log. If it's far higher, the bot reads in bursts by type

  4. 4

    Compare with sitemap order

    Number each <loc> by order of appearance and count the index difference between consecutive requests. If +1 isn't in the tens of percent, it's not sitemap order

  5. 5

    Count child sitemap hits per bot

    If you split your sitemap, check whether any bot fetches only the index and never descends

All you need are three columns: occurred_at / path / user_agent

Limitations of this analysis

The sample is one site over 31 days. Some results may depend on the site's size (about 2,300 URLs), update frequency (almost daily), and genre (Japanese company disclosures).

In particular, these three points may not hold on other sites.

  • The high share of GoogleOther. 57.6% is clearly skewed and may reflect something specific to this site
  • ClaudeBot's last visit was on 2026-08-21. Not a single request in the 12 days after that
  • Child sitemaps not being fetched. We can't rule out that this is due to how the sitemap is split (5 files / up to 916 URLs) or how the index is written

Also, the sitemap we compared against is a snapshot taken on the last day of the period. We can't rule out that the order changed during the period. However, the zero-correlation result was consistent across bots, sessions, and the whole period, and changes in order alone can't fully explain it.

We also didn't verify User-Agents with reverse DNS, so some requests may come from bots spoofing their identity. Requests to suspicious paths were 0.07% of the total.

On the other hand, the finding that sitemap order and crawl order are uncorrelated held consistently regardless of bot, session, or period. We think this part is likely to reproduce on other sites.

FAQ

Is there any point in putting important URLs at the top of the sitemap?

In these 31 days of logs, there was no correlation between the order of URLs in the sitemap and the actual crawl order. Instead of signaling importance through order, make important URLs reachable via crawlable links from listing and category pages.

Don't AI crawlers read sitemaps?

It depends on the crawler. On this site, ClaudeBot and GPTBot fetched the sitemap index but never fetched the child sitemaps it references. Googlebot and Bingbot fetched the child sitemaps as well.

Will a shallower directory structure increase crawling?

This data alone can't settle that. The difference between 2 and 3 levels also mixes in language and page priority. Before worrying about depth, group pages of the same type and update frequency, and reduce legacy URLs and 404s.

Sources

This is the English edition of research first published in Japanese by SEO GEO Lab. Read the Japanese original.