<b>User agent parsing ломается не в браузере, а в вашей логике сопоставления</b>
UA-парсинг часто считают простой задачей: строка есть, библиотека разберёт. На практике ошибки начинаются на стыке классификации и антифрода — когда по одному полю пытаются решить device, OS, engine, app/webview и совместимость.
Типовые подводные камни:
— библиотека режет UA по старым сигнатурам и путает Chromium-ветки;
— mobile desktop mode уходит в неверный device family;
— webview и in-app browser выглядят как обычный браузер;
— iPadOS маскируется под macOS, а часть Android-сборок даёт мусорный OS version.
Проверять нужно не только парсер, но и downstream-правила: совпадает ли UA с screen metrics, touch support, platform, accept-language, viewport и TLS fingerprint. Если один слой говорит “iPhone”, а другой отдаёт desktop-паттерн, трекинг и антифрод начинают расходиться.
Практика нормализации простая: храните raw UA отдельно, парсенный результат — отдельно, а решения строьте на наборе сигналов, не на одном флаге. Для кастомных правил держите whitelist спорных кейсов: webview, in-app, tablet, embedded browser. И всегда тестируйте на реальных строках, а не на синтетике из документации.
Правильный парсинг UA — это не точность библиотеки, а дисциплина сверки сигналов: raw input, parsed output и контекст запроса должны сходиться в одну картину.
Tracker Lab
@tracker_lab
<b>User agent parsing ломается не в браузере, а в вашей логике сопоставления</b>
Этот пост опубликован в Telegram-канале Tracker Lab. Подписаться можно по ссылке: @tracker_lab.