Chrome では、ユーザーのプライバシーを保護するために、ユーザー エージェント文字列で共有される情報を引き続き削減しています。
Chrome 110(2023 年 2 月)より、Android のバージョンとデバイスモデルの固定値を段階的に導入しています。モデル K
のデフォルト値は常に Android 10
です。
訪問者のオペレーティング システムのバージョン、Android デバイスのモデル、ブラウザの詳細バージョンの検出に user-agent を使用している場合は、なんらかの対応が必要になることがあります。以下で詳しく説明します。
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 | ➡ | Macintosh、Intel Mac OS X 10_15_7 |
ウィンドウ | ➡ | Windows NT 10.0、Win64、x64 |
ChromeOS | ➡ | X11、CrOS x86_64 14541.0.0 |
Linux | ➡ | X11、Linux x86_64 |
Android のバージョンとデバイスモデルを修正(Chrome 110 以降)
Chrome 110 より、Android のバージョンとデバイスモデルの固定値を段階的に導入しています。
Pixel 7
で Android 13
などが表示される代わりに、デフォルト値は常にモデル K
の Android 10
になります。
Mozilla/5.0(Linux、Android 13、Google Pixel 7)AppleWebKit/537.36(Gecko などの KHTML)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 Client Hints を使用して詳細データをリクエストする
デバイス固有のコンテンツの提供、不正防止機能、詳細なロギングなど、詳細なユーザー エージェント データにアクセスする正当な理由は多数あります。より詳細なデータが必要な場合は、User-Agent Client Hints(UA-CH)API を使用してアクセスできます。ユーザー エージェントと同様に、UA-CH は HTTP ヘッダーまたは JavaScript で使用できます。
Sec-CH-UA-
プレフィックスを付けて送信されるデフォルトのヘッダーは、ブラウザ、メジャー バージョン、オペレーティング システム、ブラウザがモバイル デバイスかどうかを示すものです。
⏫ Chrome の Default 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 を配信する際、機密性の高い値に依存しないようにする必要があります。
詳細
削減された user-agent 文字列の動作を確認するには、以下をご覧ください。
- goo.gle/reduced-ua-demo で、ご利用のデバイスのユーザー エージェント文字列の短縮版をご覧ください。
- goo.gle/ua-ch-demo で、ご利用のデバイスの JavaScript と HTTP ヘッダーのすべての User-Agent Client Hints をご覧ください。
#reduce-user-agent
Chrome フラグを有効にして、ブラウザでユーザー エージェント文字列を削減して送信します。
また、ユーザー エージェント削減のオリジン トライアルに登録して、減らされたユーザー エージェントをサイトで受信することもできます。ただし、デフォルトで削減したユーザー エージェントの送信を継続するため、このトライアルは 3 月上旬に終了する予定です。
ユーザー エージェントの削減に関するランディング ページにその他のリソースがあります。また、専用の user-agent-reduction GitHub リポジトリで問題を報告することもできます。