User-Agent Reduction
Updates
May 11th, 2023: the Phase 6 rollout is enabled for 100% of Android clients on M110 and above via Finch.
April 25th, 2023: the Phase 6 rollout is enabled for 50% of Android clients on M110 and above via Finch.
April 4th, 2023: the Phase 6 rollout is enabled for 10% of Android clients on M110 and above via Finch.
March 21st, 2023: the Phase 6 rollout is enabled for 5% of Android clients on M110 and above via Finch.
February 21st, 2023: the Phase 6 rollout is enabled for 1% of Android clients on M110 and above via Finch.
February 7th, 2023: the Phase 5 rollout is enabled for 100% of clients on M107 and above via Finch.
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.
FAQ
-
What do I do after the reduction deprecation OT ends in May 2023?
Be sure to prepare and test if you are OK with the default values provided by the reduced UA and if not then migrate to User-Agent Client Hints.
-
I'm an SSP. How can I be ready for UACH?
-
Considerations
To continue to get accurate values you will need to call the User-Agent Client Hints API (“UA-CH”) which is accessed via JavaScript or HTTP Headers.
Open RTB 2.6 introduces a new field for Structured UA in section 3.2.29 which standardized how you would pass it into the bidstream after populating from UA-CH.
To minimize disruption for ongoing campaigns, we recommend integrating with UA-CH, passing the data in the bidstream following the OpenRTB 2.6 spec, and notifying your DSP partners of this change ensuring they are looking at
device.sua
.If you need more time, you can retain access through late May 2023 via the reduction deprecation trial.
-
Questions to ask your team
- Have you already integrated with User-Agent Client Hints and are passing that data into the bidstream?
- Are you passing UA-CH into the bidstream in line with the OpenRTB 2.6 spec? (see section 3.2.29 which describes capturing structured UA within device.sua).
- Have you coordinated with your buy-side partners to ensure they are aware of and relying on the new Structured UA fields within your bidstream?
Answered yes to all the above? Great! You are ready and successfully migrated to UA-CH. If you answered no to any of the prior questions please make sure you review "Actions to take" below to ensure you're ready.
-
Actions to take
- Integrate with UA-CH
- See Migrate to User-Agent Client Hints for recommendations on how to integrate with the API through HTTP Headers or JavaScript.
- For an API overview, see this introductory article.
- Updated your bidstream to include UA-CH
- We recommend updating your bidstream spec following section 3.2.29 of Open RTB 2.6 spec.
- If there are technical blockers to updating to Open RTB 2.6, consider following the device.sua data structure recommended in 3.2.29 to include UACH values within the
ext object
to enable continued access to your DSP partners.
- (Optional) Extend access to the legacy User-Agent string
- Companies who need more time to migrate to the UA-CH API can join the reduction deprecation trial that extends access to the legacy User-Agent string through the end of May 2023.
- Once registered, you will need to update your HTTP Response headers for your production traffic.
- While this provides access until May 23, 2023, you should still integrate with UA-CH to continue to have access to accurate values.
- Raise awareness to your DSP partners
- Reach out to your DSP partners and let them know you are passing ua information like device model and OS version in the
device.sua
of OpenRTB 2.6. - If they continue to rely only on the
device.ua
, they will no longer be able to access information like device model or Android OS version.
- Reach out to your DSP partners and let them know you are passing ua information like device model and OS version in the
- Integrate with UA-CH
-
Resources
Education
- What is the Privacy Sandbox?
- What are User Agent Client Hints?
- What happens to the User Agent string?
- Public GitHub: UA-CH Explainer
- Public feedback: Open issues
- Public support: Sandbox-Dev-Support-Repo
Proposed Timeline
- Full UA-Reduction proposed rollout plan
- Key Dates (As of Mar 15th, 2023) (schedule)
- Chrome 100 release (Mar 29th, 2022) (Deployed)
- User Agent Reduction Deprecation Trial launches for instances where a site may need more migration time.
- Chrome 101 release (Apr 26th, 2022) (Deployed)
- Minor build version is frozen to 0.0.0 and applies to all page loads on desktop or mobile that are not part of the Reverse Origin Trial.
- Chrome 107 release (Oct 25th, 2022) (Deployed)
- Desktop based UA string is fully reduced for all page loads that are not part of the Reverse Origin Trial.
- Chrome 110 release (Feb 7th, 2023) (Deployed)
- Android Mobile and Tablet based UA string is fully reduced for all page loads that are not part of the Reduction Deprecation Trial.
- Chrome 100 release (Mar 29th, 2022) (Deployed)
- If additional time is needed for migration you may register for the Reduction Deprecation Trial which will provide access to the full UA string until late May, 2023.
Migration
- Migrating to User Agent Client Hints (Full guide)
- Strategy for navigator.userAgent users (JS API)
- Strategy for Static server-side headers
- Delegating access of your high entropy hints to 3P resources
- Handling critical first request client hints beyond the default set
- The default set of hints includes the browser name with major version, platform, and mobile indicator.
Testing
- Chrome Browser - Please use chrome://flags/#reduce-user-agent
- Chrome Webdriver (Selenium testing, regression testing) --enable-features=ReduceUserAgent
- User-Agent reduction code snippets
- Headers & JS API interactive demo