最新のChromeのUser-Agentを見ると、「Mozilla/5.0 ... AppleWebKit/537.36 ... Chrome/120.0 Safari/537.36」のような、Chromeが実際にはそうでないブラウザの名前だらけの文字列が並んでいる。これは偶然ではなく、数十年にわたる歴史的な互換性対応の積み重ねの結果だ。
「Mozilla」の由来
1990年代、サイトはUser-Agentに「Mozilla」(当時の市場リーダーNetscape Navigatorのコードネーム)が含まれるかどうかでブラウザの機能を判定していた。Internet Explorerも同じ「高機能な」コンテンツを受け取りたかったため、自身のUser-Agentにも「Mozilla」を含めるようになった——そしてこの前例は業界に永久に定着してしまった。
日本のiPhoneシェアが突出して高い理由
世界的にはAndroidが多数派の市場が多い中、日本はiPhoneのシェアが際立って高い数少ない国の一つとされる。これは2008年にソフトバンクが日本国内でのiPhone独占販売権を獲得し、他キャリアに先駆けて大々的に展開したことが大きなきっかけだったとよく言われる。そのため日本国内のアクセスログを見ると、他の多くのアジア市場より"Mobile Safari"を含むUser-Agentの比率が高く出る傾向があり、Android/Chrome中心の検証だけでは実際のトラフィックを十分にカバーできないことがある。
User-Agentによる判定が信頼できない理由
新しいブラウザが登場するたびに互換性のため前身のトークンをUser-Agentに継ぎ足してきた結果、この文字列はブラウザを正確に描写するものではなく、歴史的な遺物の寄せ集めになってしまった。現在のベストプラクティスは、User-Agentを解析するのではなく、必要なJavaScript/CSSの機能サポートを直接検出することだ。
何に使うか
- クライアントが正確にどのブラウザ・バージョンを名乗っているかを調べ、互換性の問題を診断する。
- 訪問者のUser-Agentが記録されたサーバーログを読み解く。
- User-Agentベースの古い判定コードがなぜしばしば誤るのかを理解する。
代替手段としてのUser-Agent Client Hints
一つの肥大化した文字列を解析する代わりに、Chromiumベースの最新ブラウザは User-Agent Client Hints をサポートしている——Sec-CH-UA、Sec-CH-UA-Platform、Sec-CH-UA-Mobileのように、サーバーが明示的にリクエストして構造化された形式で受け取る個別のヘッダー群だ。これはプライバシー保護のための「User-Agent Reduction」という大きな流れの一部であり、時間とともに従来のUser-Agent文字列に含まれる情報はますます少なくなっていく。