Identifiers & labels

The panel shows words. The URL, the Solr document and the API carry identifiers. This is the mapping.

The panel speaks in words. The URL, the Solr document and anything you query yourself speak in identifiers. This page is the mapping, and it is the only place it exists.

Why both

An identifier is the right thing to store: it is stable, it is what a filter carries in a URL, it is what you grep a log for, and it is what a query you write yourself has to name. It is the wrong thing to show somebody who has never read the source. So the panel renders a label, and an identifier it does not recognise renders as itself — never as a wrong-but-plausible label, and never as blank.

01 · Signal codes

These are the values a session’s reasons field can hold. Seventeen are weighted rules; the last three carry no weight and are not accusations at all. The scoring page explains how they combine.

IdentifierLabelWhat it testsWeightPlane
automation_markerAutomation markerThe page exposed a definitive driver artefact — the webdriver flag, a chromedriver global, Puppeteer, Playwright or Selenium hooks. Browsers do not have these; drivers do.100execution
ua_declared_botDeclared crawlerIt said it was a bot and it was telling the truth. Verdict bot, threat none.100transport
rdns_claim_failedrDNS claim failedIt declared itself a major crawler and forward-confirmed reverse DNS did not back that up. Impersonating a crawler is not a mistake anyone makes by accident.95transport
headless_rendererHeadless rendererWebGL reported SwiftShader, llvmpipe, Mesa OffScreen or Microsoft Basic Render: software rasterisation, which is what you get when there is no screen.90execution
beacon_forgedForged beacon timingThe claimed dwell time is impossible against the issue time of its own token. The lie is recorded rather than discarded, because the lie is the evidence.90execution
ua_claim_failedUA claim failedThe User-Agent claimed a browser version whose engine features the page does not actually have. A spoofed User-Agent string cannot retrofit a JavaScript engine.85execution
fp_cluster_proxy_fleetProxy fleet fingerprintFive or more distinct addresses shared this exact header fingerprint within twenty-four hours on non-mobile networks. One client, many exits.80behaviour
ua_secch_mismatchSec-CH-UA mismatchA Chrome User-Agent arrived without the matching client hint, or with one that contradicts it. Chrome always sends its own client hints.75transport
platform_mismatchPlatform mismatchThe platform client hint disagrees with the operating system the User-Agent claims.70transport
no_js_on_htmlNo JS on HTMLAn HTML page was served with a 200 and no beacon ever arrived, while the User-Agent claimed a real browser. Real browsers run scripts.70behaviour
hosting_asn_browser_uaDatacentre + browser UAA consumer browser User-Agent arriving from a hosting network. Weak alone — VPNs and corporate egress look like this — meaningful when stacked.45transport
periodic_timingPeriodic timingThe gaps between requests are too regular across four or more requests. People are not metronomes.45behaviour
no_interactionNo interactionThe beacon ran, the session ended, and not one scroll, click or key press ever happened.40execution
tz_mismatchTimezone mismatchThe browser timezone disagrees with the timezone of the address geolocation.35transport
no_304_on_repeatNo conditional requestsThe same assets were fetched again with no conditional header. A browser cache would have asked.30behaviour
no_assetsNo sub-resourcesHTML was fetched and not a single stylesheet, script, font or image followed it.25behaviour
single_page_10sSingle page, under 10sOne page, gone in under ten seconds. Very weak on its own; a bounce looks the same.15behaviour
provisional_sessionSession still openThe session had not ended when it was scored, so the five signals that can only be read after it ends were not evaluated and the verdict is held at unknown. Nothing was detected.0
beacon_only_sessionOne plane onlyThis site has no access log in this installation, so the session was measured by the beacon alone and the five signals that read the request log were not evaluated. Nothing was detected — but the evidence that remains is the plane a determined client controls, so treat the verdict as weaker than the same verdict on a session with a log behind it.0
no_bot_signalsNothing firedEvery rule was evaluated and none of them fired. This is the absence of evidence, not evidence that a person was driving.0
The reasons list is never empty

A session with nothing against it says so explicitly, so “no signals fired” and “the scorer did not run” are different states on the document rather than the same absence.

02 · Verdicts
IdentifierLabelMeaning
humanHumanScored low enough that we believe a person drove this session.
likely_humanLikely humanSome weak automation signals, not enough to call it a bot.
unknownUnknownScored, and the evidence did not reach a verdict either way. Not a failure to measure.
likely_botLikely botEnough signals to suspect automation, short of the bot threshold.
botBotAutomation, honest or not. Look at the class to tell which.
03 · Bot classes
IdentifierLabelMeaning
declared_crawlerDeclared crawlerSaid what it was in the User-Agent and was telling the truth. Honest traffic.
ai_crawlerAI crawlerA declared crawler collecting for model training or inference.
monitorMonitorA declared uptime or availability checker.
spoofed_uaSpoofed User-AgentThe headers contradict each other, or a crawler claim failed reverse DNS.
proxy_fleetProxy fleetOne browser fingerprint arriving from many unrelated networks.
headlessHeadless browserA driven or screenless browser: an automation marker, a software rasteriser, or a failed engine claim.
scriptedScripted clientScored as automation without falling into any of the named classes.
noneNot automationNot classed as a bot of any kind.
04 · Network types

Classified from the network operator’s name. These seven are the whole set: the classifier can only return one of the six named types or unknown. The hosting value is the one that matters most, because a consumer browser User-Agent arriving from hosting address space is a scoring signal in its own right.

IdentifierLabelMeaning
hostingHosting / datacentreCloud, colocation, VPS or CDN address space. People do not browse from servers.
ispConsumer ISPResidential or business broadband.
mobileMobile carrierCellular address space, where many subscribers share few addresses. Excluded from the proxy fleet rule for exactly that reason.
vpnVPN / anonymiserA commercial VPN, a private relay or a Tor exit.
eduEducationA university, school or research network.
govGovernmentA public-sector or military network.
unknownUnclassifiedThe operator name did not match any known pattern.
05 · Referrer types
IdentifierLabelMeaning
directDirectNo referrer was sent: a bookmark, a typed address, or a client that strips it.
internalSame siteReferred from this site, or from a host configured as internal.
adPaid adCarried an ad-network click id or a paid campaign medium. Tested before search, so a paid search click is never counted as organic.
aiAI assistantReferred from an AI assistant or chat product.
searchSearch engineOrganic: referred from a search engine with no paid click id.
socialSocial networkReferred from a social platform.
linkAnother siteReferred from a site that is none of the above.
06 · Declared bot categories
IdentifierLabelMeaning
searchSearch crawlerIndexes pages for a search engine.
aiAI crawlerCollects pages for model training or for answering in an assistant.
seoSEO toolA commercial backlink or audit crawler.
socialSocial previewFetches a page to build a link preview.
monitorUptime monitorChecks that the site is answering.
otherOther declared botDeclared itself a bot and does not fall into the named categories.
07 · Which planes a session was seen on
IdentifierLabelMeaning
log_onlyServer log onlySeen in the web server log and never by the beacon: no script ran, or the visitor left before it reported.
log_beaconLog and beaconSeen on both planes, so the log counts and the measured timings describe the same visit.
beacon_onlyBeacon onlyReported by the beacon with no matching log line — a site on another server, or one whose log has not been read yet.
The interesting value here is the absence

This field has no schema default, so every session indexed before it existed carries none of the three — and that absence means “this installation had not started recording which planes it had”, not “log only”. So the honest way to ask for sessions that have a transport plane is to exclude the beacon-only value, which keeps all of that history; asking for log-only instead would silently drop every older session and the count would look like a fact. The None of operator is what spells it, and the panel offers the remainder as its own row labelled “Not reported”.

The same three-state discipline applies to the signed-in dimension, whose two stored values are true (Signed in) and false (Anonymous), with absent meaning not reported — see identity.

08 · Fields with no vocabulary, deliberately

Dimensions that already hold words a person uses — a browser name, an operating system, a city, a network operator, a netname, a virtual host, a path, a TLS version — have no mapping at all. There is nothing to translate, and a half-populated map over real-world values would mean some rows got a label and some did not.

For the field names themselves and what each one is indexed, stored or faceted for, see the Solr schema.

Loghound is open source and MIT licensed. Questions about the Opensolr half — the account, the indexes, the plan — go to opensolr.com/contact; questions about the software itself belong on GitHub.

Loghound Documentation