Chrome のユーザー エージェントの情報量削減に備える

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.1Chrome/101.0.0.0 になりました)。

Chrome 107 より、デスクトップ オペレーティング システムのバージョンと CPU 情報を、プラットフォームの固定値に置き換えました。

MacMacintosh; Intel Mac OS X 10_15_7
WindowsWindows NT 10.0; Win64; x64
ChromeOSX11; CrOS x86_64 14541.0.0
LinuxX11; Linux x86_64

Chrome 110 以降の Android バージョンとデバイスモデルを修正

Chrome 110 以降、Android バージョンとデバイスモデルの固定値が段階的に導入されます。Pixel 7Android 13 のような値が表示される代わりに、モデル K ではデフォルト値が常に Android 10 になります。

以前: user-agent に Android のバージョンとデバイスのモデルが含まれている

Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36

変更後: Android のバージョンとデバイスのモデルを固定して User-Agent 文字列を削減

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-VersionSec-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() を呼び出し、必要な値(platformVersionmodel)の配列を渡します。これにより、特定の値を含むオブジェクトを含む 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 で、お客様のデバイスの削減されたユーザー エージェント文字列を確認する
  • goo.gle/ua-ch-demo で、お客様のデバイスの JavaScript と HTTP ヘッダーの User-Agent Client Hints をすべて確認する
  • #reduce-user-agent Chrome フラグを有効にして、ブラウザで情報量削減後のユーザー エージェント文字列を送信します。

ユーザー エージェントの削減に関するオリジン トライアルに登録して、サイトに情報量削減後のユーザー エージェントを受け取ることもできます。ただし、デフォルトで情報量削減後のユーザー エージェントを送信する機能の導入を進めていくため、このトライアルは 3 月上旬に終了します。

その他のリソースについては、User-Agent 文字列の情報量削減のランディング ページをご覧ください。また、専用の user-agent-reduction GitHub リポジトリで問題を報告することもできます。