A User-Agent string is a history of compatibility claims rather than a description. Chrome’s contains Mozilla/5.0, AppleWebKit/537.36, “like Gecko” and Safari/537.36 because servers once checked for each of them, and Edge, Opera and Samsung Internet add their own token (Edg/, OPR/, SamsungBrowser/) to Chrome’s. So the rules here run in a fixed order, from the specific token to the one it imitates: bots first, because Googlebot’s smartphone string contains a complete Chrome-on-Android string; then Edge, Opera, Samsung Internet and the other Chromium browsers; then Chrome; and Safari only when nothing else matched, since every Chromium string also says Safari. On iOS the browser token (CriOS, FxiOS, EdgiOS) names the app while the engine is WebKit. An Android string with “; wv” is an app’s WebView, and an iPhone string with no Safari/ token is an in-app browser.
Since 2022 the string has been deliberately vaguer. Chromium’s User-Agent reduction sends the version as MAJOR.0.0.0 from Chrome 101 and, from Chrome 107 on desktop and 110 on Android, a fixed platform: Windows NT 10.0 on every Windows, Intel Mac OS X 10_15_7 on every Mac, and Android 10 with the model K on every Android device. Safari has sent 10_15_7 for years, Firefox caps macOS at 10.15, and Safari 26 stopped updating the iOS version. None of those is reported here as a fact; each is shown as “reported as …, frozen”. Windows 11 is a case of its own: it reports Windows NT 10.0 in every browser, and Microsoft’s documented test is the Sec-CH-UA-Platform-Version Client Hint, where 13.0.0 or higher means Windows 11.
The real values live in User-Agent Client Hints. A server asks for them with an Accept-CH response header and receives Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform-Version and Sec-CH-UA-Model on later requests; a page reads them with navigator.userAgentData.getHighEntropyValues(). The “Use my browser’s” button does that where the browser supports it, and shows the brand list with its GREASE entry, a deliberately fake brand such as “Not_A Brand” that stops servers matching the list exactly. Some things no parser can learn from the string: an iPad in desktop mode sends the macOS Safari string unchanged, Brave on the desktop sends Chrome’s, and any client can send anything, so a Googlebot claim means nothing until a reverse DNS lookup confirms it.