User-Agent文字列とは
ブラウザが送るリクエストには、必ずUser-Agentヘッダーが付いています。どのソフトウェアからの要求なのかをサーバーに知らせる1行の文字列です。サイトはこれを見て、ページの適切な版を返したり、ある機能を使っても問題ないかを判断したり、既知のセキュリティ上の欠陥を抱えた古いブラウザを締め出したり、訪問者のブラウザの内訳を数えたりします。検索エンジンやAIのクローラーもこのヘッダーで名乗るため、robots.txtを書くときにも「ユーザーエージェント」という言葉が出てきます。
上には、あなたのUser-Agentが届いたとおりに表示され、その下で同じ文字列をブラウザ、レンダリングエンジン、OS、デバイスの種類に分けています。クライアントの分類も行います。ふつうのWebブラウザ、Googlebotのような検索エンジンのクローラー、GPTBotやClaudeBotのようなAIクローラー、ユーザーの代わりにページを取りに来るAIアシスタント、リンクプレビュー用のボット、コマンドラインツール、HTTPライブラリのどれにあたるかです。
使い方
- 確認したいブラウザ、デバイス、自動操作のセッションでこのページを開きます。いちばん上の行が、このリクエストで当サイトのサーバーが受け取った
User-Agentヘッダーです。 - 「ユーザーエージェントをコピー」を押すと、削ったり打ち直したりしていない正確な文字列をコピーできます。
- 「ヘッダーから読み取った内容」で、その文字列から取り出したブラウザ、エンジン、OS、デバイス、CPU、クライアントの種類を確かめます。
- 「JavaScriptが返す値」と見比べます。
navigator.userAgentがヘッダーと一致すればその旨が表示され、違う場合はJavaScript側の値が全文表示されます。クライアントヒントの行が埋まるのは、HTTPSで開いたChromium系ブラウザだけです。 - 「つじつまは合っている?」を読みます。ヘッダーとJavaScript、OSとクライアントヒントのプラットフォームを照らし合わせ、自動操作のフラグが立っているかも調べます。
開発者ツールで上書きを試すときは、変更してから再読み込みしてヘッダーを送り直し、どの行が変わり、どの行が本当のブラウザを示したままかを見てください。
こんなときに
- 不具合を報告する。コピーした文字列を貼り付ければ、開発者は「Windowsの最新のChrome」のようなあいまいな説明ではなく、正確なブラウザ、バージョン、プラットフォームを把握できます。
- User-Agentの切り替えツールを試す。拡張機能をオンにして再読み込みします。「つじつまは合っている?」でヘッダーとJavaScript、またはクライアントヒントとの食い違いを指摘されたら、サイトからも変装は見破られます。
- 自動操作のブラウザを確認する。SeleniumやPlaywrightのセッションでこのページを開けば、実際に送っている文字列と、
navigator.webdriverで自動操作だと名乗っているかどうかがわかります。 - iPadでパソコン向けの表示になる理由を知る。iPadOSのSafariは初期設定でデスクトップ用のサイトを要求し、MacのUser-Agentを送るため、解析されるOSはmacOSになります。Safariの設定で「デスクトップ用Webサイトを表示」をオフにすると、タブレットの文字列に戻ります。
- サーバーのルールを書く。リダイレクト、ファイアウォールのルール、アクセス解析のフィルターでブラウザを判定する前に、対象にしたいブラウザの実際の文字列を集め、作ったパターンをそれに当てて試しましょう。
User-Agent文字列の読み方
デスクトップ版Chromeの典型的な文字列は次のとおりです。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
Mozilla/5.0:最近のブラウザならどれも送る、互換性のための記号です。Firefoxとは関係ありません。(Windows NT 10.0; Win64; x64):プラットフォーム、つまりOSとCPUのアーキテクチャです。Windows 11でも10.0のままです。AppleWebKit/537.36 (KHTML, like Gecko):これも互換性の名残です。ChromeのBlinkエンジンはWebKitから枝分かれし、そのWebKitはKHTMLから枝分かれしました。Chrome/141.0.0.0:実際のブラウザと、そのメジャーバージョンです。0が並んでいるのは意図的で、Chromeがマイナーバージョンを隠しているためです。Safari/537.36:これもまた互換性のための記号です。
FirefoxはGecko/20100101 Firefox/141.0を使い、SafariはVersion/18.0 Safari/605.1.15で終わり、EdgeはChromeの文字列の末尾にEdg/141.0.0.0を付け足します。モバイルのブラウザはMobileを加えます。iPhoneのブラウザはAppleのWebKitの上で動いているため(EU以外ではiOSがそれを義務づけています)、ほぼすべてが中身はSafariだと名乗ります。
クライアントヒント:ユーザーエージェントの後継
Chromium系のブラウザ(Chrome、Edge、Opera、Brave、Samsung Internet)は、従来の文字列の大部分を固定し、詳しい情報をUser-Agentクライアントヒントに移しました。初期状態で送るのは3つの小さなヘッダー、つまりブランド名とメジャーバージョンを含むSec-CH-UA、Sec-CH-UA-Mobile、Sec-CH-UA-Platformで、サイトはフルバージョン、CPUのアーキテクチャ、スマホの機種などをさらに要求できます。ページはnavigator.userAgentDataから同じデータを読み取れます。FirefoxとSafariはクライアントヒントを実装していません。クライアントヒントを使えるのはHTTPSのページだけです。
ユーザーエージェントを変更する
開発者ツールはどのブラウザにも付いていて、テストのためにUser-Agentを上書きできます。拡張機能を使えば常に変えておくこともできます。ほかのデバイスでサイトがどう動くかを確かめるには便利ですが、プライバシーを守る道具としては不向きです。ヘッダーを変えても、navigator.userAgentData、TLSハンドシェイク、フォントの一覧、ブラウザがcanvasを描画するやり方は変わらないため、変装がほかのすべてと矛盾してしまいます。上の「つじつまは合っている?」の欄では、ボット検出のスクリプトと同じ比較を行っています。ヘッダーとJavaScript、User-Agentとクライアントヒントの比較です。
スクリプトやツールのユーザーエージェントを確認する
コマンドラインツールやライブラリは、curl/8.x、python-requests/2.x、Go-http-client/1.1のように独自のユーザーエージェントを送ります。多くのサイトは、これらを初期設定でブロックしています。ツールが何を送っているかを正確に知るには、同じマシンから当サイトのエンドポイントにアクセスしてください。
curl "iseeu.cc/ua?format=text"
curl iseeu.cc/ua # 解析結果をJSONで
python -c "import requests; print(requests.get('https://iseeu.cc/ua').json())"
AIエージェントは、当サイトのMCPサーバーにあるparse_uaツールを呼び出して、ログで見つけたクローラーの文字列も含め、どんなUser-Agent文字列でも解析できます。
よくある質問
ユーザーエージェントとは何ですか?
あなたに代わってWebにリクエストを送るプログラムのことで、ふつうはブラウザを指します。そのUser-Agentヘッダーは、ブラウザの名前とバージョン、レンダリングエンジン、OSを書き並べた1行の文字列です。
ユーザーエージェントが、どのブラウザでもMozilla/5.0で始まるのはなぜですか?
互換性を保つための歴史的な名残です。1990年代、サイトはNetscape(開発コード名がMozilla)により出来のよいページを送っていたため、ほかのブラウザもそのページを受け取ろうと、この先頭部分をまねしました。主要なブラウザはいまもこれを残しています。
ユーザーエージェントは変更できますか?
変えられます。開発者ツールや拡張機能を使えば上書きできます。ただし、クライアントヒント、JavaScriptのプロパティ、TLSハンドシェイクは本当のブラウザを示したままなので、書き換えたUser-Agentは簡単に見破られます。
User-Agentクライアントヒント(User-Agent Client Hints)とは何ですか?
Chromium系ブラウザに備わった新しい仕組みです。初期状態では短いブランド名とプラットフォームだけを送り、正確なバージョン、アーキテクチャ、デバイスのモデルといった詳細は、サイト側から要求できるようになっています。
ユーザーエージェントに古いOSのバージョンが出るのはなぜですか?
フィンガープリントに使われにくくするため、ブラウザが文字列の一部を固定しているからです。ChromeはWindows 11でもWindows NT 10.0と名乗り、macOSのバージョンも固定値にして、マイナーバージョンの数字は0で埋めます。
curlやスクリプトのユーザーエージェントを確認するには?
同じマシンやツールからcurl iseeu.cc/ua?format=textを実行してください。当サイトのサーバーが受け取ったとおりのUser-Agentヘッダーが表示されます。
ユーザーエージェントの解析はパターンにもとづくため、新しいブラウザや珍しいブラウザを誤って判定することがあります。ボットの分類は、クライアントが自分をどう名乗っているかを反映したものです。User-Agentは誰でも自由に送れます。