Chrome では、ユーザーのプライバシーを保護するために、ユーザー エージェント文字列で共有される情報を引き続き削減しています。
Chrome 110(2023 年 2 月)より、Android バージョンとデバイスモデルの固定値が段階的に導入されます。デフォルト値は、モデル K
で常に Android 10
になります。ユーザー エージェントを使用して訪問者のオペレーティング システムのバージョン、Android デバイスのモデル、ブラウザの詳細バージョンを検出している場合は、対応が必要になる場合があります。詳しくは、以下をご覧ください。
user-agent は、ユーザーのブラウザと環境に関する情報を提供する文字列です。たとえば、サイトの訪問者が Android で Chrome バージョン 110 を実行していることを把握できます。ブラウザはこれを HTTP ヘッダーで送信し、JavaScript で利用できるようにします。
完全なユーザー エージェント文字列の問題は、デフォルトでリクエストごとにブラウザに関する詳細情報を共有することです。これは、クロスサイト トラッキングを可能にする主な要因です。Google は、このデータを受動的に収集する機会を減らし、必要に応じてデータにアクティブにアクセスできるようにする API を提供することを目標としています。
これまでのユーザー エージェントの削減
すでに、デフォルトで利用可能な一部のユーザー エージェント データを削除し、固定値に置き換え始めています。
Chrome 101 以降、マイナー バージョン番号はゼロに置き換えられました(例: Chrome/101.3.2.1 は Chrome/101.0.0.0 になりました)。
Chrome 107 より、デスクトップ オペレーティング システムのバージョンと CPU 情報を、プラットフォームの固定値に置き換えました。
Mac | ➡ | Macintosh; Intel Mac OS X 10_15_7 |
Windows | ➡ | Windows NT 10.0; Win64; x64 |
ChromeOS | ➡ | X11; CrOS x86_64 14541.0.0 |
Linux | ➡ | X11; Linux x86_64 |
Chrome 110 以降の Android バージョンとデバイスモデルを修正
Chrome 110 以降、Android バージョンとデバイスモデルの固定値が段階的に導入されます。Pixel 7
で Android 13
のような値が表示される代わりに、モデル K
ではデフォルト値が常に Android 10
になります。
Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
ユーザー エージェントの形式に変更なし
User-Agent の削減により、User-Agent で返される値は変更されますが、形式は変わりません。ユーザー エージェントを使用してオペレーティング システムの種類やブラウザのメジャー バージョンのみを読み取る場合、そのデータは引き続き更新され、対応する必要はありません。

ユーザー エージェントの代替手段
現在、より詳細なデータを使用している場合は、代わりにプログレッシブ エンハンスメントまたは機能検出を使用できるかどうかを常に確認することをおすすめします。
ユーザー エージェントは他のユーザー提供値と同じであることを常に念頭に置き、正確であると想定せずに検証する必要があります。ユーザー エージェントの値は、ユーザー、拡張機能、他のクライアントによって簡単に変更できます。また、送信されないこともあります。ほとんどの場合、ユーザー エージェント データなしで動作するコンテンツを訪問者に提供できます。
User-Agent Client Hints を使用して詳細データをリクエストする
デバイス固有のコンテンツの提供、不正行為防止機能、きめ細かいロギングなど、ユーザー エージェントの詳細データにアクセスする正当な理由は数多くあります。より詳細なデータが必要な場合は、User-Agent Client Hints(UA-CH)API を使用してアクセスできます。ユーザー エージェントと同様に、UA-CH は HTTP ヘッダーまたは JavaScript で使用できます。
Sec-CH-UA-
接頭辞が付いたデフォルトのヘッダーが送信され、ブラウザ、そのメジャー バージョン、オペレーティング システム、ブラウザがモバイル デバイスかどうかが示されていることをご存じかもしれません。
⏫ Chrome のデフォルトの User-Agent Client Hints リクエスト ヘッダー:
Sec-CH-UA: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"
レスポンスで Accept-CH
ヘッダーを使用して、追加のデータをリクエストできます。この場合、Sec-CH-UA-Platform-Version
と Sec-CH-UA-Model
をリクエストして、後続のリクエストでその Android バージョンとデバイスタイプを取得できます。
⏬ プラットフォームのバージョンとモデルを指定するサーバーからのレスポンス ヘッダー:
Accept-CH:
Sec-CH-UA-Platform-Version,
Sec-CH-UA-Model
⏫ Android のバージョンとモデル名を含む Chrome からのリクエスト ヘッダー:
Sec-CH-UA-Platform-Version: "13.0.0"
Sec-CH-UA-Model: "Pixel 7"
JavaScript でも同じことを行えます。userAgentData
API で getHighEntropyValues()
を呼び出し、必要な値(platformVersion
と model
)の配列を渡します。これにより、特定の値を含むオブジェクトを含む Promise が返されます。
navigator.userAgentData
.getHighEntropyValues(
['platformVersion', 'model']
).then(ua => { console.log(ua)
});
{
"platformVersion": "13.0.0",
"model": "Pixel 7"
}
クロスオリジン リクエストまたは最初のリクエスト
サイトが最初の最上位リクエストでこれらの機密値を必要とする場合は、Critical-CH
HTTP ヘッダーを使用できます。これにより、追加のヒントを追加して最初のリクエストを再試行するようブラウザに指示します。これは、更新が難しいレガシー システムには役立ちますが、理想的には、このような機密性の高い値に依存して初期 HTML を配信しないことをおすすめします。
その他の情報
削減されたユーザー エージェント文字列の動作を確認するには、以下をご覧ください。
- goo.gle/reduced-ua-demo で、お客様のデバイスの削減されたユーザー エージェント文字列を確認する
- goo.gle/ua-ch-demo で、お客様のデバイスの JavaScript と HTTP ヘッダーの User-Agent Client Hints をすべて確認する
#reduce-user-agent
Chrome フラグを有効にして、ブラウザで情報量削減後のユーザー エージェント文字列を送信します。
ユーザー エージェントの削減に関するオリジン トライアルに登録して、サイトに情報量削減後のユーザー エージェントを受け取ることもできます。ただし、デフォルトで情報量削減後のユーザー エージェントを送信する機能の導入を進めていくため、このトライアルは 3 月上旬に終了します。
その他のリソースについては、User-Agent 文字列の情報量削減のランディング ページをご覧ください。また、専用の user-agent-reduction GitHub リポジトリで問題を報告することもできます。