TRACIOのボット検知は、ブラウザエージェントによるクライアントサイドの収集と サーバーサイドの分析という二層アーキテクチャを用いて、自動化ブラウザ、 ヘッドレスツール、スクリプト化された攻撃を識別します。主要な自動化フレームワーク、 ヘッドレスブラウザ、AIブラウジングエージェント、アンチディテクトブラウザを ほぼゼロの誤検知でカバーし、同時に正規の検索エンジンクローラーを自動的に 許可リストへ登録します。
ブラウザエージェントは幅広いチェックを実行し、その結果を報告します。サーバー側では、
それらの結果が重み付けされてボットスコアとなり、スコアが判定にマッピングされます。
ごく少数の明白な指標はそれ単独で決定的であり、他の結果にかかわらず bot 判定を
強制します。
どのチェックが実行され、どのように重み付けされ、しきい値がどこに置かれているかは、 どのプランでも公開されません。 それらを文書化することは、保護を通過するために何を 変えればよいかをボット運営者に正確に教えることになります。代わりに提供されるのは、 判定、ボットタイプのラベル、そしてBusiness以上では判断の背後にある観測のクラスを 示す理由コードです。
すべての識別にはボット判定が伴います。webhookペイロードでは
bot.result として、クライアントSDKでは result.bot として届きます。
| 結果 | 説明 |
|---|---|
human | 自動化の兆候は見つかりませんでした。検証済みの検索エンジンクローラーも human として解決されます。 |
bot | 自動化またはスクリプト化されたアクセスが検知されました。bot.type ラベルが付随します。 |
uncertain | 混在または弱いシグナル — 明確に人間とも明確に自動化とも言えません。 |
これは、ダッシュボードとwebhookペイロード全体で使用されるビジネス上の
decision.action フィールド(real、fake、suspicious)にマッピングされます。
判定には bot.score が伴います。webhookペイロードのバージョン2では 0..100 の
小数であり、そのアクセスについてダッシュボードが表示するのと同じ数値です。
(凍結されたバージョン1のスキーマでは 0..1 の割合です。Webhooksを
参照してください。)
bot.type は結果が bot の場合に存在します。認識されたボットまたはランタイムの
名前か、具体的なチェック名を挙げると検知器の内部構造が明らかになってしまう場合の
ファミリーのいずれかです:
bot.type | 意味 |
|---|---|
playwright、jsdom、electron | 名前の挙がっている自動化ランタイムが特定されました |
browser_use、claude_computer_use、skyvern、genspark、fellou | 名前の挙がっているAIブラウジングエージェントが特定されました |
automation | 自動化ツール。具体的なチェック名は示しません |
headless | ユーザーインターフェイスなしで動作しているブラウザ |
antidetect | アンチディテクト/フィンガープリント偽装のビルド |
extension | 自動化、プロキシ、VPNを行うブラウザ拡張機能 |
privacy_browser | プライバシーを強化したブラウザのビルド(例: Mullvad Browser) |
other | 検知されましたが、公開されている語彙の範囲外です |
この一覧は意図的に閉じられています: 明日検知器に追加されたチェックは、内部名を
漏らすのではなく other として現れます。bot.type は分岐に使うラベルとして扱い、
検証のための網羅的なenumとしては扱わないでください — 名前付きのランタイムは今後も
追加されていきます。
BusinessおよびEnterpriseプランでは、webhookペイロードに reasons 配列が含まれます —
最大8件、重要度順にソートされます。コードは観測のクラスを示すもので、その背後にある
チェックを示すことは決してありません:
| コード | 意味 |
|---|---|
automation_signature | 自動化ツールの痕跡 |
headless_browser | ユーザーインターフェイスを持たないブラウザ |
anonymous_browser | 一般的な環境に見せかけたプライバシー強化またはアンチディテクトのビルド |
privacy_hardening | 積極的なプライバシー設定 |
behavior_anomaly | 人間らしくないインタラクションのパターン |
fingerprint_tampering | 互いに一致すべき値が一致していません |
environment_anomaly | ランタイム環境が内部的に矛盾しています |
identity_mismatch | 申告されたアイデンティティが観測結果と食い違っています |
virtual_environment | 物理ハードウェアではなくエミュレータ |
strong_automation_evidence | 明白なボットの指標 — それ単独で決定的 |
detection_signal | 発火したその他のチェック |
severity は high、medium、low のいずれかであり、そのアクセスにおいて
このクラスが判定に占める割合であって、コードに固定された性質ではありません。
同じコードがあるアクセスでは high、別のアクセスでは low として届くことがあるため、
定数としてキャッシュしないでください。
privacy_hardening はとりわけ注意が必要です: 回避行為と同じくらい、ごく普通の
プライバシー意識の高い訪問者に対しても発火します。単独で対処せず、他の要素と
併せて評価してください。
virtual_environment はエミュレータ検知から生じます。Webには「ハイパーバイザー上で
動作している」という独立した判定はありません。ブラウザから見える手がかり——汎用の
ソフトウェアレンダラー、異常に少ないコア数——は、GPUドライバのない普通のマシンや
リモートデスクトップのセッションでも同じくらい頻繁に現れるため、お客様が疑わざるを
えないような判定には変換していません。
| 機能 | 提供範囲 |
|---|---|
| 自動化、ヘッドレス、AIエージェントの検知 | すべてのプラン |
| 検証済みクローラーの許可リスト登録 | すべてのプラン |
| エミュレータ検知 | すべてのプラン |
アンチディテクトの指標(bot.antidetectScore、0..100) | Pro以上 |
| 理由コード、行動ブロック | Business以上 |
| DevTools検知 | Business以上 |
アンチディテクトのスコアリングは現在も較正中です。
bot.antidetectScoreは、 お客様が観察してご自身のポリシーを調整できるように報告されます。単独でブロックする 理由としてではなく、リスク判断への入力として扱ってください。
モバイル専用のチェックはWebでは有効ではありません。 root化、脱獄、 クローン/デュアルアプリ、Fridaの検知は、ブラウザでは収集できないネイティブの シグナルに依存します。TRACIOが提供するのはブラウザSDKのみですので、 Webで完全に機能する自動化、ヘッドレス、AIエージェント、アンチディテクト、エミュレータ、 行動の各判定をご利用ください。
既知の良性ボットはuser-agentによって認識され、その後接続元IPに対して検証されます — IPの逆引きDNS、得られたホスト名が運営者のドメインに属するかの確認、そしてそれが同じIPに 解決されることを確かめる正引きです。これはクローラー運営者自身が公開している検証手順です。
| クローラー | 検証対象ドメイン |
|---|---|
.googlebot.com、.google.com | |
| Bing | .search.msn.com |
| Apple | .applebot.apple.com |
| Yahoo | .crawl.yahoo.net |
| Yandex | .yandex.com、.yandex.net、.yandex.ru |
| DuckDuckGo | .duckduckgo.com |
検証済みクローラーは human として解決されます。Googlebotを名乗りながら、そのIPが
明らかに別の主体に属しているリクエストはボットとして分類されます — 逆引きが単に
見つからなかった、あるいはタイムアウトしただけでは、偽装の証拠とは見なされません。
インタラクションのダイナミクス(ポインターの動き、キーボードのリズム、スクロール)は、
どの人間であるかではなく、人間がその場にいるかどうかの証拠として判定に
反映されます。Business以上では、その集約結果がwebhookの behavior ブロックで届きます:
{ "behavior": { "score": 87, "verdict": "human", "confidence": 0.92 }}score は 0..100(高いほど人間らしい)、verdict は human、uncertain、bot の
いずれか、confidence(0..1)は判定がどれだけの証拠に基づいているかを示します —
ポインターの動きが2回しかない短い訪問は、判定が決定的に見えてもここでは低い値に
なります。
このブロックは、そのアクセスで実際に行動スコアリングが実行された場合にのみ 存在します。ブロックがないことは「データなし」を意味するのであって、 「疑わしい点がない」ことを意味することは決してありません — 不在を良好なシグナルとして 読まないでください。
クライアントSDKは、便利なブール値 result.bot.detected と、0..100 スケールの
confidence を公開します:
const result = await tracio.getResult()
if (result.bot.detected) { console.warn(`Bot detected (confidence ${result.bot.confidence})`) showCaptcha() return}
await login(credentials)サーバー側では、webhookの配信に基づいて対処します。ボット判定は
bot オブジェクト — bot.result と bot.type にあります:
// `event` is the webhook delivery body (/docs/webhooks)app.post("/webhook/tracio", async (req, res) => { const event = req.body
if (event.bot?.result === "bot") { await db.blockedRequests.insert({ visitorId: event.visitorId, botType: event.bot.type, ip: event.ip, timestamp: new Date(), }) }
res.status(200).send("OK")})ゼロ値と空の値はペイロードから省略されるため、bot.type はスキーマで必須とするのでは
なく、防御的に読み取ってください。
TRACIOのボット検知はほぼゼロの誤検知を目指して設計されていますが、エッジケースは 存在します:
| シナリオ | リスク | 緩和策 |
|---|---|---|
navigator を改変するブラウザ拡張機能 | 低 | 多数のチェックによる相互検証が、単一チェックでの発火を防ぎます |
| 企業向けセキュリティソフトウェア | 非常に低い | ヘッドレスの分類には裏付けとなる証拠が必要です |
| アクセシビリティツール | なし | アクセシビリティAPIはボット検知に反映されません |
| VPN/プロキシの利用者 | なし | ネットワークのフラグはボット判定とは別に扱われます |
誤検知が見られる場合は、bot.type(およびBusiness以上では reasons)を確認して
どのクラスの観測が発火したかを把握し、ポリシーを調整してください。よくある原因は
トラブルシューティングを参照してください。