User-Agent Reduction
Updates
Jan 23rd, 2023: the Phase 5 rollout is enabled for 50% of clients on M107 and above via Finch.
Jan 9th, 2023: the Phase 5 rollout is enabled for 10% of clients on M107 and above via Finch.
Dec 7th, 2022: the Phase 5 rollout is enabled for 5% of clients on M107 and above via Finch.
Nov 3rd, 2022: the Phase 5 rollout is enabled for 1% of clients on M107 and above via Finch.
June 13th, 2022: the Phase 4 rollout is enabled for 100% of clients on M101 and above via Finch.
June 10th, 2022: Enabled the "ReduceUserAgentMinorVersion" feature by default in the M105 branch.
May 31, 2022: Phase 4 rollout was increased to an even larger percentage of the Chrome 101 population while we evaluate stability.
May 16, 2022: Phase 4 rollout was increased to a larger percentage of the Chrome 101 population while we evaluate stability.
May 6, 2022: "Phase 4" began rolling out to a small percentage of the Chrome 101 stable population while we evaluate stability.
April 11, 2022: Add a table to map from UA to UA-CH
March 3, 2022: Added frozen Chrome OS platform version to
<unifiedPlatform>
value
February 18, 2022: Added information on the platforms for which User-Agent reduction is applicable, as well as links to resources.
October 12, 2021: Information on using the Origin Trial with third-party embeds was add to the blog post.
September 16, 2021: Chrome milestones were added to reflect https://blog.chromium.org/2021/09/user-agent-reduction-origin-trial-and-dates.html.
May 24, 2021: The chrome://flags#freeze-user-agent flag was renamed to chrome://flags/#reduce-user-agent in Chrome 93 and the values were updated to align with the plan below (also testable via --enable-features=ReduceUserAgent).
Proposed Rollout Plan
Reduction Preparation
Phase 1: Warn about accessing navigator.userAgent, navigator.appVersion, and navigator.platform in DevTools, beginning in M92.
Phase 2: Chrome 95 to Chrome 100 Launch an Origin Trial for sites to opt into the final reduced UA string for testing and feedback, for at least 6 months.
Reduction Rollout
Phase 3: Chrome 100 Launch a reverse Origin Trial, for instances where a site may need more time for migration, for at least 6 months.
Phase 4: Chrome 101 Ship reduced Chrome MINOR.BUILD.PATCH version numbers (“0.0.0”). Once rolled-out, the reduced UA string would apply to all page loads on desktop and mobile OSes that do not opt into the reverse Origin Trial.
Phase 5: Chrome 107 Begin roll-out of reduced Desktop UA string and related JS APIs (navigator.userAgent, navigator.appVersion, navigator.platform). Once rolled-out, the reduced UA string would apply to all page loads on desktop OSes that do not opt into the reverse Origin Trial.
Phase 6: Chrome 110 Begin roll-out of reduced Android Mobile (and Tablet) UA string and related JS APIs. Once rolled-out, the reduced UA string would apply to all page loads on Android that do not opt into the reverse Origin Trial.
Reduction Completion Phase 7: Chrome 113 reverse Origin Trial ends and all page loads receive the reduced UA string and related JS APIs.
Reduced User Agent String Reference
This reduced format will be available for testing via chrome://flags/#reduce-user-agent in Chrome 93.
Applicable platforms
User-Agent reduction will be applied to the following platforms: Windows, macOS, Linux, Chrome OS, and Chrome on Android. We don't have current plans for User-Agent Reduction on iOS and Android WebView at this time.
Unified Format
The unified format that covers all platforms post-UA Reduction looks like so:
Mozilla/5.0 (<unifiedPlatform>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0 <deviceCompat> Safari/537.36
Desktop
The Chrome Desktop User Agent string currently uses the following format:
Mozilla/5.0 (<platform>; <oscpu>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.<minorVersion> Safari/537.36
Post UA-Reduction, the new format will be:
Mozilla/5.0 (<unifiedPlatform>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0 Safari/537.36
Mobile and Tablet
The Chrome Mobile and Tablet User Agent strings use the following format:
Mozilla/5.0 (Linux; Android <androidVersion>; <deviceModel>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.<minorVersion> <deviceCompat> Safari/537.36
Post UA-Reduction, the new format will be:
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0 <deviceCompat> Safari/537.36
Token Reference
Tokens | Description |
<androidVersion> | Represents Android major version |
<deviceModel> | Represents Android device model. |
<minorVersion> | Represents the Chrome MINOR.BUILD.PATCH version numbers. |
<oscpu> | Represents the device operating system and (optionally) CPU architecture. |
<platform> | Represents the underlying device platform. |
Post-Reduction Tokens | |
---|---|
<deviceCompat> |
Represents device form-factor.
The possible values are:
|
<majorVersion> | Represents the Chrome major version. |
<unifiedPlatform> |
The intersection of <platform>,
<oscpu>, <androidVersion>,
and <deviceModel>, depending on device.
The possible desktop values* are:
The possible mobile values* are:
* Note that these strings are literal values; they will not update even if a user is on an updated operating system or device. |
UA Token to UA-CH Mapping
UA string token | HTTP UA-CH token (ref) | UA-CH JS API (ref) |
---|---|---|
<androidVersion> | Sec-CH-UA-Platform-Version |
UADataValues.platformVersion |
<deviceCompat> | Sec-CH-UA-Mobile |
NavigatorUAData.mobile |
<deviceModel> | Sec-CH-UA-Model |
UADataValues.model |
<majorVersion> | Sec-CH-UA |
NavigatorUAData.brands |
<minorVersion> | Sec-CH-UA-Full-Version-List |
UADataValues.fullVersionList |
<oscpu> |
Any combination of the following, as relevant:Sec-CH-UA-WoW64 , Sec-CH-UA-Arch ,
Sec-CH-UA-Bitness
|
Any combination of the following, as relevant:UADataValues.wow64 , UADataValues.arch ,
UADataValues.bitness
|
<unifiedPlatform> |
Sec-CH-UA-Platform and
Sec-CH-UA-Platform-Version
|
UADataValues.platform and
UADataValues.platformVersion
|
Sample UA Strings: Phase 4
In Phase 4 we change the <minorVersion>
token to “0.0.0”.
Desktop (user on Windows 8.1, for example) | |
---|---|
Phase 3 UA | Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93. |
Phase 4 UA | Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36 |
Mobile (user on Samsung Galaxy, for example) | |
---|---|
Phase 3 UA | Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93. |
Phase 4 UA | Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36 |
Tablet (user on Samsung Galaxy, for example) | |
---|---|
Phase 3 UA | Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93. |
Phase 4 UA | Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36 |
Sample UA Strings: Phase 5
In Phase 5 we change the <platform>
and
<oscpu>
tokens from their
platform-defined values to the relevant <unifiedPlatform>
token value (which will never change).
Note: There may not be user-visible changes here, unless the user was on a lower version.
Also note that the macOS platform version was already capped to 10_15_7 in Chrome 90 for site compatibility reasons.
Desktop (user on Windows 8.1, for example) | |
---|---|
Phase 4 UA | Mozilla/5.0 (Windows NT |
Phase 5 UA | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36 |
Mobile (user on Samsung Galaxy, for example) | |
---|---|
Phase 4 UA | Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36 |
Phase 5 UA | (No changes for Mobile UAs in Phase 5) |
Tablet (user on Samsung Galaxy, for example) | |
---|---|
Phase 4 UA | Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36 |
Phase 5 UA | (No changes for Tablet UAs in Phase 5) |
Sample UA Strings: Phase 6
In Phase 6, we change the <deviceModel>
token to “K” and
change the <androidVersion>
token to a static “10” string.
Desktop (user on Windows 8.1, for example) | |
---|---|
Phase 5 UA | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36 |
Phase 6 UA | (No changes for Desktop UAs from Phase 5) |
Mobile (user on Samsung Galaxy, for example) | |
---|---|
Phase 5 UA | Mozilla/5.0 (Linux; Android |
Phase 6 UA | Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36 |
Tablet (user on Samsung Galaxy, for example) | |
---|---|
Phase 5 UA | Mozilla/5.0 (Linux; Android |
Phase 6 UA | Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36 |
Sample UA Strings: Final Reduced State
Desktop (user on Windows 8.1, for example) | |
---|---|
Old UA | Mozilla/5.0 (Windows NT |
Final Reduced UA | Mozilla/5.0 (Windows NT |
Mobile (user on Samsung Galaxy, for example) | |
---|---|
Old UA | Mozilla/5.0 (Linux; Android |
Final Reduced UA | Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36 |
Tablet (user on Samsung Galaxy, for example) | |
---|---|
Old UA | Mozilla/5.0 (Linux; Android |
Final Reduced UA | Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36 |
Reduced navigator.platform values (for all versions)
Platform | Reduced value |
---|---|
macOS | MacIntel |
Windows | Win32 |
Chrome OS | Linux x86_64 |
Linux | Linux x86_64 |
Android | Linux armv81 |
Reduced navigator.appVersion values
navigator.appVersion
is effectively an alias of navigator.userAgent
(it’s
everything after
“Mozilla/”).
Reduced navigator.userAgent values
To avoid confusion and reduce implementation complexity, we aim to follow the
same plan for navigator.userAgent
.
Alternative: high entropy client hints
All of the information that was contained in the User-Agent string prior to reduction is available through the high entropy client hints, which are available by request through the User-Agent Client Hints request headers, as well as the navigator.userAgentData.getHighEntropyValues Javascript API.
Resources
The following sites show snippets and allow developers to preview what the reduced User-Agent string will look like on different platforms: