Chrome では、ユーザーのプライバシーを保護するため、ユーザー エージェント文字列で共有される情報を減らし続けています。
Chrome 110(2023 年 2 月)以降、Android のバージョンとデバイスモデルの固定値を段階的に導入しています。モデル K
のデフォルト値は常に Android 10
です。
訪問者のオペレーティング システムのバージョン、Android デバイスのモデル、またはブラウザの詳細なバージョンの検出をユーザー エージェントに依存している場合は、なんらかの対応が必要となることがあります。以下をご確認ください。
user-agent は、ユーザーのブラウザとその環境に関する情報を提供する文字列です。たとえば、サイトにアクセスしたユーザーが Android で Chrome バージョン 110 を実行していることを知ることができます。 ブラウザはこれを HTTP ヘッダーで送信し、JavaScript 経由で利用できるようにします。
完全なユーザー エージェント文字列の問題は、リクエストのたびにデフォルトでブラウザの詳細情報が共有されることです。これがクロスサイト トラッキングを許可する主な要因となります。 Google の目標は、このようなデータをパッシブに収集する機会を減らすと同時に、ユーザーが必要なときに積極的にデータにアクセスできる API を提供することです。
ここまでのユーザー エージェントの削減
Google では、デフォルトで使用可能なユーザー エージェント データの一部を削除し、固定値への置き換えをすでに開始しています。
Chrome 101 以降、マイナー バージョン番号はゼロに置き換えられました。たとえば、Chrome/101.3.2.1 は Chrome/101.0.0.0 になりました。
Chrome 107 以降、デスクトップ オペレーティング システムのバージョンと CPU の情報がプラットフォームの固定値に置き換えられました。
Mac | ➡ | MacintoshIntel Mac OS X 10_15_7 |
Windows | ➡ | Windows NT 10.0Win64x64 |
ChromeOS | ➡ | 11 倍、ChromeOS x86_64 14541.0.0 |
Linux | ➡ | 11 倍、Linux x86_64 |
Chrome 110 以降、Android のバージョンとデバイスモデルを修正
Chrome 110 以降、Android のバージョンとデバイスモデルの固定値を段階的に導入しています。
Pixel 7
で Android 13
などが表示されるのではなく、モデル K
のデフォルト値は常に Android 10
になります。
Mozilla/5.0(Linux、Android 13、Google Pixel 7)AppleWebKit/537.36(KHTML、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
⏫ Chrome から返されるリクエスト ヘッダー(Android のバージョンとモデル名を含む):
Sec-CH-UA-Platform-Version: "13.0.0"
Sec-CH-UA-Model: "Pixel 7"
userAgentData
API で getHighEntropyValues()
を呼び出して、必要な値の配列(platformVersion
と model
)を渡すことで、JavaScript でも同じことができます。
これは、特定の値を含むオブジェクトを含む Promise を返します。
navigator.userAgentData
.getHighEntropyValues(
['platformVersion', 'model']
).then(ua => { console.log(ua)
});
{
"platformVersion": "13.0.0",
"model": "Pixel 7"
}
クロスオリジンまたは初期リクエスト
これらの値を必要とするクロスオリジン リソースがページにある場合は、Permissions-Policy
HTTP ヘッダーか、HTML で Delegate-CH
メタタグを使用してアクセスを許可できます。
最初のトップレベル リクエストでこれらの機密性の高い値をサイトに含める必要がある場合は、Critical-CH
HTTP ヘッダーを使用できます。このヘッダーを使用すると、ブラウザにヒントを追加して最初のリクエストを再試行するよう指示できます。
これは更新が困難なレガシー システムの場合に役立つことがありますが、最初の HTML を提供するためにこのような機密性の高い値を使用するのが理想的です。
その他の情報
削減されたユーザー エージェント文字列の動作を確認するには、以下をご覧ください。
- goo.gle/reduced-ua-demo で、お使いのデバイス向けのユーザー エージェント文字列が削減されます。
- お使いのデバイスでご利用いただける JavaScript および HTTP ヘッダーの User-Agent Client Hints について詳しくは、goo.gle/ua-ch-demo をご覧ください。
- Chrome フラグ
#reduce-user-agent
を有効にして、お使いのブラウザで削減したユーザー エージェント文字列を送信します。
User Agent Reduction オリジン トライアルに登録して、サイトで削減されたユーザー エージェントを受け取ることもできます。ただし、引き続き削減されたユーザー エージェントをデフォルトで送信するため、このトライアルは 3 月上旬に終了する予定です。
ユーザー エージェントの情報量削減のランディング ページにさらに多くのリソースがあります。専用の user-agent-reduction GitHub リポジトリで問題を報告することもできます。