CINXE.COM
What is User-Agent reduction? | Privacy Sandbox | Google for Developers
<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google for Developers"> <meta property="og:type" content="website"><meta name="theme-color" content="#fff"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/developers/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/favicon-new.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/touchicon-180-new.png"><link rel="canonical" href="https://developers.google.com/privacy-sandbox/protections/user-agent"><link rel="search" type="application/opensearchdescription+xml" title="Google for Developers" href="https://developers.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://developers.google.com/privacy-sandbox/protections/user-agent" /><link rel="alternate" hreflang="x-default" href="https://developers.google.com/privacy-sandbox/protections/user-agent" /><link rel="alternate" hreflang="ar" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=ar" /><link rel="alternate" hreflang="bn" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=fa" /><link rel="alternate" hreflang="fr" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=fr" /><link rel="alternate" hreflang="de" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=de" /><link rel="alternate" hreflang="he" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=he" /><link rel="alternate" hreflang="hi" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=hi" /><link rel="alternate" hreflang="id" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=id" /><link rel="alternate" hreflang="it" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=it" /><link rel="alternate" hreflang="ja" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=ja" /><link rel="alternate" hreflang="ko" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=ko" /><link rel="alternate" hreflang="pl" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=es-419" /><link rel="alternate" hreflang="th" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=th" /><link rel="alternate" hreflang="tr" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=tr" /><link rel="alternate" hreflang="vi" href="https://developers.google.com/privacy-sandbox/protections/user-agent?hl=vi" /><title>What is User-Agent reduction? | Privacy Sandbox | Google for Developers</title> <meta property="og:title" content="What is User-Agent reduction? | Privacy Sandbox | Google for Developers"><meta name="description" content="User-Agent reduction limits passively shared browser data to reduce the volume of sensitive information which leads to fingerprinting. The reduction is now complete."> <meta property="og:description" content="User-Agent reduction limits passively shared browser data to reduce the volume of sensitive information which leads to fingerprinting. The reduction is now complete."><meta property="og:url" content="https://developers.google.com/privacy-sandbox/protections/user-agent"><meta property="og:image" content="https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-for-developers.png"> <meta property="og:image:width" content="1600"> <meta property="og:image:height" content="900"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "What is User-Agent reduction?" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Privacy Sandbox", "item": "https://developers.google.com/privacy-sandbox" },{ "@type": "ListItem", "position": 2, "name": "What is User-Agent reduction?", "item": "https://developers.google.com/privacy-sandbox/protections/user-agent" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="white" type="article" layout="docs" concierge='closed' display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="https://developers.google.com/privacy-sandbox"> <div class="devsite-product-logo-container" size="medium" > <picture> <img class="devsite-product-logo" alt="Privacy Sandbox" src="https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo.png" srcset="https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_36.png 36w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_48.png 48w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_72.png 72w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_96.png 96w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_480.png 480w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_720.png 720w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_856.png 856w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_960.png 960w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_1440.png 1440w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_1920.png 1920w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_2880.png 2880w" sizes="64px" loading="lazy" > </picture> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/privacy-sandbox" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Privacy Sandbox" > Privacy Sandbox </a> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab > <a href="https://developers.google.com/privacy-sandbox" track-metadata-eventdetail="https://developers.google.com/privacy-sandbox" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - overview" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" > Overview </a> </tab> <tab > <a href="https://developers.google.com/privacy-sandbox/cookies" track-metadata-eventdetail="https://developers.google.com/privacy-sandbox/cookies" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - cookies" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Cookies" track-name="cookies" > Cookies </a> </tab> <tab > <a href="https://developers.google.com/privacy-sandbox/private-advertising" track-metadata-eventdetail="https://developers.google.com/privacy-sandbox/private-advertising" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - private advertising" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Private advertising" track-name="private advertising" > Private advertising </a> </tab> <tab class="devsite-active"> <a href="https://developers.google.com/privacy-sandbox/protections" track-metadata-eventdetail="https://developers.google.com/privacy-sandbox/protections" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - privacy protections" track-metadata-module="primary nav" aria-label="Privacy protections, selected" data-category="Site-Wide Custom Events" data-label="Tab: Privacy protections" track-name="privacy protections" > Privacy protections </a> </tab> <tab > <a href="https://developers.google.com/privacy-sandbox/learn" track-metadata-eventdetail="https://developers.google.com/privacy-sandbox/learn" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - learn" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Learn" track-name="learn" > Learn </a> </tab> <tab > <a href="https://developers.google.com/privacy-sandbox/blog" track-metadata-eventdetail="https://developers.google.com/privacy-sandbox/blog" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - blog" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Blog" track-name="blog" > Blog </a> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Privacy Sandbox" tenant-name="Google for Developers" project-scope="/privacy-sandbox" url-scoped="https://developers.google.com/s/results/privacy-sandbox" > <form class="devsite-search-form" action="https://developers.google.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <a class="devsite-header-link devsite-top-button button gc-analytics-event" href="//privacysandbox.com/" data-category="Site-Wide Custom Events" data-label="Site header link" > Home </a> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section devsite-header-no-lower-tabs "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/privacy-sandbox/protections" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Privacy protections </a> </li> </ul> </div> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="https://developers.google.com/privacy-sandbox"> <div class="devsite-product-logo-container" size="medium" > <picture> <img class="devsite-product-logo" alt="Privacy Sandbox" src="https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo.png" srcset="https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_36.png 36w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_48.png 48w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_72.png 72w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_96.png 96w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_480.png 480w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_720.png 720w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_856.png 856w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_960.png 960w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_1440.png 1440w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_1920.png 1920w, https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo_2880.png 2880w" sizes="64px" loading="lazy" > </picture> </div> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/privacy-sandbox" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Privacy Sandbox" > Privacy Sandbox </a> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/privacy-sandbox" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/privacy-sandbox/cookies" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Cookies" track-name="cookies" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cookies" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cookies </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/privacy-sandbox/private-advertising" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Private advertising" track-name="private advertising" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Private advertising" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Private advertising </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/privacy-sandbox/protections" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Privacy protections" track-name="privacy protections" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Privacy protections" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Privacy protections </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/privacy-sandbox/learn" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Learn" track-name="learn" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn </span> </a> </li> <li class="devsite-nav-item"> <a href="/privacy-sandbox/blog" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Blog" track-name="blog" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Blog" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Blog </span> </a> </li> <li class="devsite-nav-item"> <a href="//privacysandbox.com/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Home" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Home </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/privacy-sandbox/protections" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections" ><span class="devsite-nav-text" tooltip>About privacy protections</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Prevent covert tracking</span> </div></li> <li class="devsite-nav-item"><a href="/privacy-sandbox/protections/ip-protection" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/ip-protection" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/ip-protection" ><span class="devsite-nav-text" tooltip>IP Protection</span></a></li> <li class="devsite-nav-item"><a href="/privacy-sandbox/protections/bounce-tracking-mitigations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/bounce-tracking-mitigations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/bounce-tracking-mitigations" ><span class="devsite-nav-text" tooltip>Bounce tracking mitigations</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Limit passive fingerprinting</span> </div></li> <li class="devsite-nav-item"><a href="/privacy-sandbox/protections/user-agent" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/user-agent" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/user-agent" ><span class="devsite-nav-text" tooltip>User-Agent reduction</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Fight spam and fraud</span> </div></li> <li class="devsite-nav-item"><a href="/privacy-sandbox/protections/private-state-tokens" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/private-state-tokens" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/private-state-tokens" ><span class="devsite-nav-text" tooltip>Private State Tokens</span></a></li> <li class="devsite-nav-item"><a href="/privacy-sandbox/protections/private-state-tokens/developer-guide" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/private-state-tokens/developer-guide" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/private-state-tokens/developer-guide" ><span class="devsite-nav-text" tooltip>Private State Tokens developer guide</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>On-device personalization</span> </div></li> <li class="devsite-nav-item"><a href="/privacy-sandbox/protections/on-device-personalization" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/on-device-personalization" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/on-device-personalization" ><span class="devsite-nav-text" tooltip>Overview</span></a></li> <li class="devsite-nav-item"><a href="/privacy-sandbox/protections/on-device-personalization/developer-guide" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/on-device-personalization/developer-guide" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/on-device-personalization/developer-guide" ><span class="devsite-nav-text" tooltip>Developer guide</span></a></li> <li class="devsite-nav-item"><a href="/privacy-sandbox/protections/on-device-personalization/create-federated-learning-job" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/on-device-personalization/create-federated-learning-job" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/on-device-personalization/create-federated-learning-job" ><span class="devsite-nav-text" tooltip>Create a federated learning job</span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Privacy approach</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/privacy-sandbox/protections/on-device-personalization/differential-privacy-semantics-for-odp" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/on-device-personalization/differential-privacy-semantics-for-odp" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/on-device-personalization/differential-privacy-semantics-for-odp" ><span class="devsite-nav-text" tooltip>Differential privacy semantics for On-Device Personalization</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Server side</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/privacy-sandbox/protections/on-device-personalization/federated-compute-server" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/on-device-personalization/federated-compute-server" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/on-device-personalization/federated-compute-server" ><span class="devsite-nav-text" tooltip>Federated compute server overview</span></a></li><li class="devsite-nav-item"><a href="/privacy-sandbox/protections/on-device-personalization/deterministic-build" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /privacy-sandbox/protections/on-device-personalization/deterministic-build" track-type="bookNav" track-name="click" track-metadata-eventdetail="/privacy-sandbox/protections/on-device-personalization/deterministic-build" ><span class="devsite-nav-text" tooltip>Deterministic build</span></a></li></ul></div></li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" class="devsite-main-content" has-book-nav > <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Home </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/privacy-sandbox" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Privacy Sandbox" > Privacy Sandbox </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/privacy-sandbox/protections" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="" > Privacy protections </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feedback position="header" project-name="Privacy Sandbox" product-id="5335444" bucket="" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" class="nocontent" disable-product-feedback project-icon="https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo.png" > <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title" tabindex="-1"> What is User-Agent reduction? </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <p>User-Agent (UA) reduction minimizes the identifying information shared in the User-Agent string, which may be <a href="https://www.w3.org/2001/tag/doc/unsanctioned-tracking/#unsanctioned-tracking-tracking-without-user-control">used for passive fingerprinting</a>. Now that these changes have been rolled out for general availability, all resource requests have a reduced <code translate="no" dir="ltr">User-Agent</code> header. As a result, the return values from certain <code translate="no" dir="ltr">Navigator</code> interfaces are reduced, including: <code translate="no" dir="ltr">navigator.userAgent</code>, <code translate="no" dir="ltr">navigator.appVersion</code>, and <code translate="no" dir="ltr">navigator.platform</code>.</p> <p>Web developers should review their site code for usage of the User-Agent string. If your site relies on parsing the User-Agent string to read the device model, platform version, or full browser version, you'll need to <a href="https://web.dev/migrate-to-ua-ch/">implement the User-Agent Client Hints API</a>.</p> <aside class="key-term"><b>The <a href="https://developer.mozilla.org/docs/Web/HTTP/Headers/User-Agent">User-Agent string</a></b> is an HTTP request header that allows servers and networks to identify the application, operating system (OS), vendor, and / or version of a user agent. Historically, the <code translate="no" dir="ltr">User-Agent</code> was shared on every HTTP request and exposed in JavaScript.</aside> <h3 id="user-agent_client_hints_ua-ch" data-text="User-Agent Client Hints (UA-CH)" tabindex="-1">User-Agent Client Hints (UA-CH)</h3> <p><a href="https://wicg.github.io/ua-client-hints/">User-Agent Client Hints</a> allow access to the full set of User-Agent data, but only when servers actively declare an explicit need for specific pieces of data.</p> <p>By removing passively exposed user data, we better measure and reduce the amount of information that is intentionally exposed by request headers, JavaScript APIs, and other mechanisms.</p> <h2 id="why_do_we_need_reduced_ua_and_ua-ch" data-text="Why do we need reduced UA and UA-CH?" tabindex="-1">Why do we need reduced UA and UA-CH?</h2> <p>Historically, the User-Agent string would broadcast a large string of data about a user's browser, operating system, and version with every HTTP request. This was problematic for two reasons:</p> <ul> <li>The granularity and abundance of detail can lead to user identification.</li> <li>The default availability of this information can lead to covert tracking.</li> </ul> <p>Reduced UA and UA-CH improve user privacy by sharing only basic information by default.</p> <p>The reduced User-Agent includes the browser's brand and a significant version, where the request came from (desktop or mobile), and the platform. To access more data, User-Agent Client Hints allow you to request specific information about the user's device or conditions. </p> <p>Further, over time the <code translate="no" dir="ltr">User-Agent</code> string grew longer and more complex, which led to error-prone string parsing. UA-CH provides structured and reliable data that is easier to interpret. Existing code that parses the UA string shouldn't break (though it will return less data), and you'll need to migrate to UA-CH if your site <a href="https://wicg.github.io/ua-client-hints/#use-cases">needs specific client information</a>.</p> <h2 id="how_does_the_reduced_ua_and_ua-ch_work" data-text="How does the reduced UA and UA-CH work?" tabindex="-1">How does the reduced UA and UA-CH work?</h2> <p>Here is a brief example of how the reduced User-Agent string and UA-CH work. For a more in-depth example, review <a href="https://web.dev/user-agent-client-hints/#example-exchange">Improving user privacy and developer experience with User-Agent Client Hints</a>.</p> <p>A user opens the browser and enters <code translate="no" dir="ltr">example.com</code> into the address bar:</p> <ol> <li><p>The browser sends a request to load the webpage.</p> <ol> <li>The browser includes the <code translate="no" dir="ltr">User-Agent</code> header with the reduced User-Agent string. For example: <code translate="no" dir="ltr">User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36</code></li> <li><p>The browser includes that same information in the default User-Agent Client Hint headers. For example:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="PowerShell"><code translate="no" dir="ltr"><span class="devsite-syntax-n">Sec-CH-UA</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Chrome"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-n">v</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-s2">"98"</span> <span class="devsite-syntax-n">Sec-CH-UA-Mobile</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-k">?</span><span class="devsite-syntax-n">1</span> <span class="devsite-syntax-n">Sec-CH-UA-Platform</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Android"</span> </code></pre></devsite-code></li> </ol></li> <li><p>The server can ask the browser to send additional client hints, such as the device model, with the <code translate="no" dir="ltr">Accept-CH</code> response header. For example: <code translate="no" dir="ltr">Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model</code></p></li> <li><p>The browser applies policies and user configuration to determine what data is allowed to return to the server in subsequent request headers. For example:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="PowerShell"><code translate="no" dir="ltr"><span class="devsite-syntax-n">Sec-CH-UA</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Chrome"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-n">v</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-s2">"93"</span> <span class="devsite-syntax-n">Sec-CH-UA-Mobile</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-k">?</span><span class="devsite-syntax-n">1</span> <span class="devsite-syntax-n">Sec-CH-UA-Platform</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Android"</span> <span class="devsite-syntax-n">Sec-CH-UA-Model</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s2">"Pixel 2"</span> </code></pre></devsite-code></li> </ol> <h3 id="critical_client_hints" data-text="Critical Client Hints" tabindex="-1">Critical Client Hints</h3> <p>If you need a specific set of Client Hints in your initial request, you can use the <code translate="no" dir="ltr">Critical-CH</code> response header. <code translate="no" dir="ltr">Critical-CH</code> values must be a subset of the values requested by <code translate="no" dir="ltr">Accept-CH</code>.</p> <p>For example, the initial request may include a request for <code translate="no" dir="ltr">Device-Memory</code> and <code translate="no" dir="ltr">Viewport-Width</code>, where <code translate="no" dir="ltr">Device-Memory</code> is considered critical.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="PowerShell"><code translate="no" dir="ltr"><span class="devsite-syntax-n">GET</span> <span class="devsite-syntax-p">/</span> <span class="devsite-syntax-n">HTTP</span><span class="devsite-syntax-p">/</span><span class="devsite-syntax-n">1</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">1</span> <span class="devsite-syntax-n">Host</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">example</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">com</span> <span class="devsite-syntax-n">HTTP</span><span class="devsite-syntax-p">/</span><span class="devsite-syntax-n">1</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">1</span> <span class="devsite-syntax-n">200</span> <span class="devsite-syntax-n">OK</span> <span class="devsite-syntax-n">Content-Type</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">text</span><span class="devsite-syntax-p">/</span><span class="devsite-syntax-n">html</span> <span class="devsite-syntax-n">Accept-CH</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">Device-Memory</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">Viewport-Width</span> <span class="devsite-syntax-n">Vary</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">Device-Memory</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">Viewport-Width</span> <span class="devsite-syntax-n">Critical-CH</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">Device-Memory</span> </code></pre></devsite-code> <p>If the browser requires a critical hint (<code translate="no" dir="ltr">Critical-CH</code>) to properly render the webpage, then the server can ask for this additional information with the <code translate="no" dir="ltr">Accept-CH</code> header. Then, the browser can send a new request for the page, including the critical hint.</p> <p>In summary, <code translate="no" dir="ltr">Accept-CH</code> requests all values you'd like for the page, while <code translate="no" dir="ltr">Critical-CH</code> requests only the subset of values you must have on-load to properly load the page. Refer to the <a href="https://github.com/WICG/client-hints-infrastructure/blob/main/reliability.md">Client Hints Reliability specification</a> for more information.</p> <h3 id="detect_tablet_devices_with_the_ua-ch_api" data-text="Detect tablet devices with the UA-CH API" tabindex="-1">Detect tablet devices with the UA-CH API</h3> <p>As the line between mobile, tablet, and desktop devices continues to become less distinct and dynamic form factors are more common (folding screens, switching between laptop and tablet mode), it's advisable to use responsive design and feature detection to present an appropriate user interface.</p> <p>However, information provided by the browser for both the User-Agent string and User-Agent Client Hints comes from the same source, so the same forms of logic should work.</p> <p>For example, if this pattern is checked on the UA string:</p> <ul> <li>Phone pattern: <code translate="no" dir="ltr">'Android' + 'Chrome/[.0-9]* Mobile'</code></li> <li>Tablet pattern: <code translate="no" dir="ltr">'Android' + 'Chrome/[.0-9]* (?!Mobile)'</code></li> </ul> <p>The matching default UA-CH headers interface may be checked:</p> <ul> <li>Phone pattern: <code translate="no" dir="ltr">Sec-CH-UA-Platform: "Android"</code>, <code translate="no" dir="ltr">Sec-CH-UA-Mobile: ?1</code></li> <li>Tablet pattern: <code translate="no" dir="ltr">Sec-CH-UA-Platform: "Android"</code>, <code translate="no" dir="ltr">Sec-CH-UA-Mobile: ?0</code></li> </ul> <p>Or the equivalent JavaScript interface:</p> <ul> <li>Phone pattern: <code translate="no" dir="ltr">navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true</code></li> <li>Tablet pattern: <code translate="no" dir="ltr">navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false</code></li> </ul> <p>For hardware-specific use cases, the device model name can be requested via the high-entropy <code translate="no" dir="ltr">Sec-CH-UA-Model</code> hint.</p> <h2 id="prepare-and-test" data-text="How do I use and test reduced UA?" tabindex="-1">How do I use and test reduced UA?</h2> <p>To begin, <a href="https://web.dev/migrate-to-ua-ch/#audit-collection-and-use-of-user-agent-data">review your site code</a> for instances and uses of the User-Agent string. If your site relies on parsing the User-Agent string to read the device model, platform version, or full browser version, you'll need to <a href="https://web.dev/migrate-to-ua-ch/">implement the UA-CH API</a>.</p> <p>Once you've updated to the UA-CH API, you should test to ensure you get the data you expect from the User-Agent. There are three ways to test, each increasing in complexity.</p> <p>Scaled availability for User-Agent reduction means the fully reduced UA string shipped on all Chrome devices. Reduction began with a Chrome minor release in Q2 of 2022.</p> <h3 id="test-locally" data-text="Test custom strings locally" tabindex="-1">Test custom strings locally</h3> <p>If you want to test your site using custom User-Agent strings to simulate different devices, launch Chrome with the <code translate="no" dir="ltr">--user-agent="Custom string here"</code> command-line flag. Find more on <a href="https://www.chromium.org/developers/how-tos/run-chromium-with-flags">command-line flags</a> here.</p> <p>Alternatively, use the device emulator in Chrome DevTools.</p> <h3 id="transform_the_string_in_your_sites_code" data-text="Transform the string in your site's code" tabindex="-1">Transform the string in your site's code</h3> <p>If you process the existing Chrome <code translate="no" dir="ltr">user-agent</code> string in your client-side or server-side code, you can transform that string to the new format to test compatibility. You can test by either overriding and replacing the string, or generating the new version and test side by side.</p> <h2 id="support_for_client_hints_and_critical_hints" data-text="Support for Client Hints and critical hints" tabindex="-1">Support for Client Hints and critical hints</h2> <p>There are three <a href="https://web.dev/migrate-to-ua-ch/#are-you-only-using-basic-user-agent-data">default Client Hints</a> returned to the server, including browser name and major version, a boolean that indicates if the browser is on a mobile device, and the operating system name. These are sent after the Transport Layer Security protocol (TLS) handshake. These are already available and supported in your browser.</p> <p>However, there may be times when you need to retrieve critical information for your site to render.</p> <h3 id="optimize_critical_hints" data-text="Optimize critical hints" tabindex="-1">Optimize critical hints</h3> <aside class="warning"><strong>Warning:</strong><span> Using critical hints should be rare, so make sure you've reviewed the reason for implementation. The question to ask yourself is, do you require extended data on the initial page load? Will your page fail to load without this information?</span></aside> <p>A TLS handshake is the first step to create a secure connection between the browser and web server. Without an intervention, the <a href="https://www.ietf.org/archive/id/draft-davidben-http-client-hint-reliability-03.html#name-the-critical-ch-response-he">Critical-CH response header</a> was designed to tell the browser to immediately retry the request if the first one was sent without a critical hint.</p> <figure> <img src="/privacy-sandbox/assets/images/sequence-diagram-with-critical-client-hints.avif" alt="Sequence diagram for Client Hints with critical hints."> <figcaption>When a critical hint is requested by the server, the client will retry sending the first request for the webpage with the critical hint. In this example, the hint for <code translate="no" dir="ltr">Sec-CH-UA-Model</code> is requested twice: once as a Client Hint with <code translate="no" dir="ltr">Accept-CH</code> and again as a critical hint with <code translate="no" dir="ltr">Critical-CH</code>.</figcaption> </figure> <p>To optimize critical hints (<a href="https://groups.google.com/a/chromium.org/g/blink-dev/c/zPYGbULXn7o/m/q3OJ2kZAAQAJ)"><code translate="no" dir="ltr">Critical-CH</code> header</a>), you must intercept this handshake and provide a model for Client Hints. These steps may be complex, and require advanced knowledge.</p> <p>The <a href="https://datatracker.ietf.org/doc/html/draft-davidben-http-client-hint-reliability-02#section-4"><code translate="no" dir="ltr">ACCEPT_CH</code> HTTP/2 and HTTP/3 frames</a>, combined with the <a href="https://github.com/vasilvv/tls-alps">TLS ALPS extension</a>, is a connection-level optimization to deliver the server's Client Hint preferences in time for the first HTTP request. These require complex configuration, and we recommend only using this for truly critical information.</p> <p>BoringSSL (a fork of OpenSSL) helps you work with Google's experimental features in Chromium. At this time, ALPS is only <a href="https://commondatastorage.googleapis.com/chromium-boringssl-docs/ssl.h.html#Application-layer-protocol-settings">implemented in BoringSSL</a>.</p> <p>If you need to use critical hints, refer to our guide on <a href="https://docs.google.com/document/d/1HQd3vosjFls2jp6DwpkNMUN4CBdmmxZJJz0WhhcqOPw/edit?usp=sharing">critical hints reliability and optimization</a>.</p> <h2 id="faq" data-text="FAQ" tabindex="-1">FAQ</h2> <h3 id="how_long_will_hints_specified_via_the_accept-ch_header_be_sent" data-text="How long will hints specified via the Accept-CH header be sent?" tabindex="-1">How long will hints specified via the <code translate="no" dir="ltr">Accept-CH</code> header be sent?</h3> <p>Hints specified via the <code translate="no" dir="ltr">Accept-CH</code> header will be sent for the duration of the browser session or until a different set of hints is specified.</p> <h3 id="does_ua-ch_work_with_http2_and_http3" data-text="Does UA-CH work with HTTP/2 and HTTP/3?" tabindex="-1">Does UA-CH work with HTTP/2 and HTTP/3?</h3> <p>UA-CH works with both HTTP/2 and HTTP/3 connections.</p> <aside class="caution"> Client Hints are only sent over secure connections, so make sure your uses HTTPS.</aside> <h3 id="do_subdomains_and_cnames_require_a_top-level_page_permissions-policy_to_access_high-entropy_ua-ch" data-text="Do subdomains (and CNAMEs) require a top-level page Permissions-Policy to access high-entropy UA-CH?" tabindex="-1">Do subdomains (and CNAMEs) require a top-level page <code translate="no" dir="ltr">Permissions-Policy</code> to access high-entropy UA-CH?</h3> <p>High-entropy UA-CH on request headers are restricted on cross-origin requests regardless of how that origin is defined on the DNS side. Delegation must be handled via <code translate="no" dir="ltr">Permissions-Policy</code> for any cross-origin subresource or obtained via JavaScript that executes in the cross-origin context.</p> <h3 id="how_does_user-agent_reduction_affect_bot_detection" data-text="How does User-Agent reduction affect bot detection?" tabindex="-1">How does User-Agent reduction affect bot detection?</h3> <p>Chrome's change to its User-Agent string does not directly impact the User-Agent string that a bot chooses to send.</p> <p>Bots may choose to update their own strings to reflect the reduced information Chrome sends, but that is entirely their implementation choice. Chrome is still sending the same User-Agent format, and bots that append their own identifier to the end of a Chrome User-Agent string can continue to do so.</p> <p>For any concerns with specific bots, it may be worth reaching out directly to the owners to ask if they have any plans to change their User-Agent string.</p> <h2 id="engage_and_share_feedback" data-text="Engage and share feedback" tabindex="-1">Engage and share feedback</h2> <ul> <li><strong>Origin trial</strong>: <a href="https://github.com/miketaylr/user-agent-reduction/issues">Share your feedback on previous origin trials</a>.</li> <li><strong>Demo</strong>: Try our <a href="https://uar-ot.glitch.me/">demo of User-Agent reduction</a>.</li> <li><strong>GitHub</strong>: Read the <a href="https://github.com/WICG/ua-client-hints">UA-CH explainer</a>, <a href="https://github.com/WICG/ua-client-hints/issues">raise questions and follow discussion</a>.</li> <li><strong>Developer support</strong>: Ask questions and join discussions on the <a href="https://github.com/GoogleChromeLabs/privacy-sandbox-dev-support">Privacy Sandbox Developer Support repo</a>.</li> </ul> <h2 id="find_out_more" data-text="Find out more" tabindex="-1">Find out more</h2> <ul> <li><a href="https://web.dev/user-agent-client-hints/">Improving user privacy and developer experience</a>: an overview for web developers</li> <li><a href="https://web.dev/migrate-to-ua-ch/">Migrate from UA string to UA-CH</a>: a tutorial for web developers</li> <li><a href="https://web.dev/digging-into-the-privacy-sandbox">Digging into the Privacy Sandbox</a></li> </ul> </div> <devsite-recommendations display="in-page" hidden yield> </devsite-recommendations> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-feedback position="footer" project-name="Privacy Sandbox" product-id="5335444" bucket="" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" class="nocontent" disable-product-feedback project-icon="https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo.png" > <button> Send feedback </button> </devsite-feedback> <devsite-recommendations id="recommendations-link" yield></devsite-recommendations> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-09-09 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-thumb-rating-feedback"> <devsite-feedback position="thumb-rating" project-name="Privacy Sandbox" product-id="5335444" bucket="" context="" version="t-devsite-webserver-20241114-r00-rc02.464922260396498922" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="thumb-rating" class="nocontent" disable-product-feedback project-icon="https://developers.google.com/static/privacy-sandbox/assets/images/privacy-sandbox-logo.png" > <button> Need to tell us more? </button> </devsite-feedback> </template> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-09-09 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Get support</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://github.com/privacysandbox/privacy-sandbox-dev-support" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Ask a question on our GitHub support repo </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://goo.gle/privacy-sandbox-feedback" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Submit project feedback </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Get updates</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/privacy-sandbox/blog" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Developer blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://privacysandbox.com/news/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Project news </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Resources</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://privacysandbox.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Project site </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://privacysandbox.com/open-web/#the-privacy-sandbox-timeline" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Privacy Sandbox timeline </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Tools</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://goo.gle/psat" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Privacy Sandbox Analysis Tool </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://privacy-sandbox-demos.dev/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Privacy Sandbox demos </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//ai.google.dev/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google AI Link" > Google AI </a> </li> <li class="devsite-footer-sites-item"> <a href="/products" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/terms/site-terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the Google for Developers newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="/newsletter/subscribe" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> <devsite-concierge data-info-panel data-ai-panel data-api-explorer-panel > </devsite-concierge> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{"dimensions": {"dimension3": false, "dimension5": "en", "dimension11": false, "dimension1": "Signed out", "dimension4": "Privacy Sandbox", "dimension6": "en"}, "gaid": "UA-24532603-1", "metrics": {"ratings_value": "metric1", "ratings_count": "metric2"}, "purpose": 1}]</script> <script type="application/json" tag-management>{"at": "True", "ga4": [{"id": "G-272J68FCRF", "purpose": 1}], "ga4p": [{"id": "G-272J68FCRF", "purpose": 1}], "gtm": [{"id": "GTM-WPJH8HP6", "purpose": 0}], "parameters": {"internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "article", "projectName": "Privacy Sandbox", "signedIn": "False", "tenant": "developers", "recommendations": {"sourcePage": "", "sourceType": 0, "sourceRank": 0, "sourceIdenticalDescriptions": 0, "sourceTitleWords": 0, "sourceDescriptionWords": 0, "experiment": ""}, "experiment": {"ids": ""}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="UkFJEvzHyghxqeiLPr/iRct/Hvp921"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/js/app_loader.js', '[1,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers","https://developers-dot-devsite-v2-prod.appspot.com",1,null,["/_pwa/developers/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/developers/images/favicon-new.png","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,116,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","developers.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["Profiles__enable_public_developer_profiles","Concierge__enable_concierge_restricted","Cloud__enable_cloud_shell","Search__enable_page_map","DevPro__enable_cloud_innovators_plus","TpcFeatures__enable_required_headers","MiscFeatureFlags__developers_footer_dark_image","Search__enable_suggestions_from_borg","Cloud__enable_cloud_facet_chat","Search__enable_dynamic_content_confidential_banner","MiscFeatureFlags__emergency_css","MiscFeatureFlags__developers_footer_image","TpcFeatures__enable_mirror_tenant_redirects","MiscFeatureFlags__enable_firebase_utm","BookNav__enable_tenant_cache_key","Cloud__enable_llm_concierge_chat","Search__enable_ai_search_summaries","Concierge__enable_pushui","MiscFeatureFlags__enable_variable_operator","Profiles__enable_page_saving","Profiles__enable_profile_collections","Profiles__enable_release_notes_notifications","Cloud__enable_cloud_dlp_service","Experiments__reqs_query_experiments","DevPro__enable_developer_subscriptions","Cloud__enable_cloudx_experiment_ids","Cloud__enable_cloud_shell_fte_user_flow","Profiles__enable_completecodelab_endpoint","CloudShell__cloud_code_overflow_menu","MiscFeatureFlags__enable_view_transitions","Profiles__require_profile_eligibility_for_signin","MiscFeatureFlags__enable_project_variables","Profiles__enable_dashboard_curated_recommendations","Cloud__enable_legacy_calculator_redirect","Significatio__enable_by_tenant","Profiles__enable_developer_profiles_callout","Cloud__enable_cloudx_ping","Search__enable_ai_eligibility_checks","Concierge__enable_concierge","CloudShell__cloud_shell_button","EngEduTelemetry__enable_engedu_telemetry","Search__enable_ai_search_summaries_restricted","Profiles__enable_complete_playlist_endpoint","Analytics__enable_clearcut_logging","Cloud__enable_free_trial_server_call","MiscFeatureFlags__enable_explain_this_code","Profiles__enable_recognition_badges","Profiles__enable_awarding_url"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[1,"developers","Google for Developers","developers.google.com",null,"developers-dot-devsite-v2-prod.appspot.com",null,null,[1,1,[1],null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1,20],"/recommendations/information"],null,null,null,[1,1,1],[1,1,null,1,1]],null,[null,null,null,null,null,null,"/images/lockup-new.svg","/images/touchicon-180-new.png",null,null,null,null,1,null,null,null,null,null,null,null,null,1,null,null,null,"/images/lockup-dark-theme-new.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,20,22,23,29,32,36],null,[[null,null,null,[3,7,10,2,39,17,4,32,24,11,12,13,34,15,25],null,null,[1,[["docType","Choose a content type",[["Tutorial",null,null,null,null,null,null,null,null,"Tutorial"],["Guide",null,null,null,null,null,null,null,null,"Guide"],["Sample",null,null,null,null,null,null,null,null,"Sample"]]],["product","Choose a product",[["Android",null,null,null,null,null,null,null,null,"Android"],["ARCore",null,null,null,null,null,null,null,null,"ARCore"],["ChromeOS",null,null,null,null,null,null,null,null,"ChromeOS"],["Firebase",null,null,null,null,null,null,null,null,"Firebase"],["Flutter",null,null,null,null,null,null,null,null,"Flutter"],["Assistant",null,null,null,null,null,null,null,null,"Google Assistant"],["GoogleCloud",null,null,null,null,null,null,null,null,"Google Cloud"],["GoogleMapsPlatform",null,null,null,null,null,null,null,null,"Google Maps Platform"],["GooglePay",null,null,null,null,null,null,null,null,"Google Pay & Google Wallet"],["GooglePlay",null,null,null,null,null,null,null,null,"Google Play"],["Tensorflow",null,null,null,null,null,null,null,null,"TensorFlow"]]],["category","Choose a topic",[["AiAndMachineLearning",null,null,null,null,null,null,null,null,"AI and Machine Learning"],["Data",null,null,null,null,null,null,null,null,"Data"],["Enterprise",null,null,null,null,null,null,null,null,"Enterprise"],["Gaming",null,null,null,null,null,null,null,null,"Gaming"],["Mobile",null,null,null,null,null,null,null,null,"Mobile"],["Web",null,null,null,null,null,null,null,null,"Web"]]]]]],[1,1],null,1],[[["UA-24532603-1"],["UA-22084204-5"],null,null,["UA-24532603-5"],null,null,[["G-272J68FCRF"],null,null,[["G-272J68FCRF",2]]],[["UA-24532603-1",2]],null,[["UA-24532603-5",2]],null,1],[[15,12],[5,4],[14,11],[1,1],[16,13],[6,5],[13,10],[12,9],[3,2],[11,8],[4,3]],[[2,2],[1,1]]],null,4,null,null,null,null,null,null,null,null,null,null,null,null,null,"developers.devsite.google"],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m"]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>