How sessions get classified

A session is a stream of requests from the same IP+UA, split when idle for more than 30 minutes. Each session lands in one of the classes below by the rules on this page: any hard rule makes it a known bot; otherwise the soft rules add up to a score that two thresholds split.

Classes

User-Agent families

The first matching pattern wins. Empty UA → empty; no match → unknown. Bot-side families are flagged on the bot_ua hard rule.

NamePatternSide
ramore-monitor ramore\-monitor bot
gptbot GPTBot bot
claudebot ClaudeBot bot
perplexitybot PerplexityBot bot
bytespider Bytespider bot
googlebot Googlebot bot
bingbot Bingbot bot
ahrefsbot AhrefsBot bot
semrushbot SemrushBot bot
mj12bot MJ12bot bot
duckduckbot DuckDuckBot bot
yandexbot YandexBot bot
facebookbot facebookexternalhit bot
whatsapp whatsapp bot
telegrambot telegram bot
python-script python-(?:requests|urllib) bot
curl \bcurl\b bot
wget \bwget\b bot
go-script Go-http-client bot
java-script okhttp|Apache-HttpClient|java/ bot
libwww libwww bot
other-bot \bbot\b|crawler|spider|slurp|mediapartners bot
edge Edg/ browser
chrome-mobile Chrome/.*Mobile browser
chrome Chrome/ browser
firefox Firefox/ browser
safari Safari/.*Version/ browser
safari-webkit Safari/ browser
opera Opera|OPR/ browser

Route categories

Search route: /v1/names/{etype} (must carry a non-empty q=).

Bot-only routes
/robots.txt, /sitemap-{n}.xml, /sitemap.xml
SvelteKit data prefetch routes
/__data.json, /about/__data.json, /{game}/__data.json, /{rootType}/table/__data.json, /{rootType}/{...semanticId}/__data.json
API routes
/v1/names/{etype}, /v1/specs, /v1/trees/{root_type}/{semantic_id}, /v1/works-intersect/{...spec}

Hard rules

Any of these → bot_known. Rates over 5,265 sessions.

Soft rules

Applied only when no hard rule fired. Scores are summed; the session lands as human_likely at score ≥ 3, bot_likely at score ≤ 0, otherwise unknown.

ScoreNameWhen it firesObserved
+2 search_used Used the search route with a non-empty query parameter. 31.49%
+1 browser_ua User-Agent looks like a real browser (`Mozilla` + Chrome/Safari/Firefox/etc.). 79.43%
+2 sveltekit_prefetch Session contains SvelteKit __data.json requests, indicating browser hover-prefetch activity. 58.80%
+1 referrer_present At least one request carries a non-empty Referer. 79.43%
-2 www_no_api The session made no request to an API route. 18.18%

Soft score distribution

Sessions that reached soft scoring (no hard rule fired). Dotted lines mark the human_likely / bot_likely thresholds.