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
-
bot_known -
bot_likely -
unknown -
human_likely
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.
| Name | Pattern | Side |
|---|---|---|
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=).
Hard rules
Any of these → bot_known. Rates over 5,265 sessions.
-
empty_ua— User-Agent header missing or empty. 2.53% -
bot_ua— User-Agent matches a known bot/crawler/script family. 14.70% -
robots_or_sitemap— Hit a bot-only route: /robots.txt, /sitemap*.xml. 7.26% -
all_HEAD— Every request in the session uses the HEAD method. 0.02%
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.
| Score | Name | When it fires | Observed |
|---|---|---|---|
| +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.