Все статьи
Числа и сеть

User-Agent: определение браузера и устройства

Что такое User-Agent, структура, определение браузера, ОС, устройства, использование в аналитике.

4 апреля 2025
7 мин чтения
ConvertHub
#user-agent#браузер#аналитика

Введение

Каждый раз, когда браузер открывает веб-страницу, он отправляет на сервер строку, которая рассказывает о себе: какой это браузер, какая операционная система, какое устройство и множество дополнительных технических деталей. Эта строка называется User-Agent и передаётся в одноимённом HTTP-заголовке. Несмотря на то что сегодня официальная политика — сокращать объём передаваемой информации, User-Agent остаётся одним из ключевых источников данных для аналитики, A/B-тестирования, адаптации интерфейса и обнаружения ботов.

В этой статье мы разберём, как устроена строка User-Agent, какие компоненты в ней можно распознать, почему её парсинг — это нетривиальная задача и как правильно определять браузер, ОС и устройство. Также мы рассмотрим современную замену — Client Hints — и обсудим, когда полагаться на User-Agent уже не стоит.

Что такое User-Agent

User-Agent — это HTTP-заголовок, который клиентское приложение (браузер, поисковый бот, мобильное приложение) отправляет с каждым запросом. Исторически строка формировалась так, чтобы сервер мог адаптировать ответ под возможности клиента: отдать мобильную версию, отказаться от неподдерживаемых CSS-свойств, изменить раскладку страницы.

Со временем строка User-Agent обросла «легаси» — совместимостью со старыми сайтами, которые проверяли наличие конкретных подстрок. Поэтому современные браузеры включают в User-Agent упоминания множества движков и платформ, чтобы не сломать старые снифферы.

Структура строки User-Agent

Унифицированного формата не существует, но де-факто строка состоит из нескольких продуктов, разделённых пробелами. Каждый продукт записывается в виде name/version и может быть заключён в скобки, где часто указываются уточняющие детали — операционная система, движок, устройство.

// Chrome на Windows 11
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

// Firefox на macOS
Mozilla/5.0 (Macintosh; Intel Mac OS X 14.2; rv:121.0) Gecko/20100101 Firefox/121.0

// Safari на iPhone
Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1

// Googlebot
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Токен Mozilla/5.0 в начале — это историческая совместимость: в 1990-е сайты проверяли его, чтобы отсеять старые браузеры. Сегодня эту строку включают все современные браузеры, и по ней нельзя сделать вывод о производителе.

Компоненты User-Agent

КомпонентПримерЧто означает
Mozilla-токенMozilla/5.0Совместимость с историческим форматом; присутствует почти всегда
ОС и платформаWindows NT 10.0; Win64; x64Операционная система, разрядность, архитектура
Движок рендерингаAppleWebKit/537.36WebKit, Blink, Gecko — движок браузера
БраузерChrome/120.0.0.0Название и версия браузера
УстройствоiPhone; CPU iPhone OS 17_2Модель устройства (чаще всего только для мобильных)

Определение браузера

Главная сложность парсинга User-Agent — порядок токенов зависит от браузера. В Chrome основной токен стоит в конце, а в Safari — в середине строки. Поэтому для корректного определения нужно проверять несколько сигналов и учитывать порядок их следования.

function detectBrowser(ua) {
  ua = ua.toLowerCase();

  // Edge (на Chromium) — проверить раньше Chrome
  if (ua.includes('edg/')) return { name: 'Edge',    engine: 'Blink' };
  // Opera на Chromium
  if (ua.includes('opr/')) return { name: 'Opera',   engine: 'Blink' };
  // Chrome / Chromium
  if (ua.includes('chrome/')) return { name: 'Chrome', engine: 'Blink' };
  // Firefox
  if (ua.includes('firefox/')) return { name: 'Firefox', engine: 'Gecko' };
  // Safari (после Chrome, чтобы не спутать)
  if (ua.includes('safari/')) return { name: 'Safari', engine: 'WebKit' };

  return { name: 'Unknown', engine: 'Unknown' };
}

Порядок проверок критичен: Safari и Edge тоже содержат строку «Chrome», а Edge содержит «Safari». Поэтому проверки идут от специфичного к общему — иначе браузер будет определён неверно.

Определение операционной системы

function detectOS(ua) {
  if (/windows nt 10/i.test(ua))    return 'Windows 10/11';
  if (/windows nt 6.3/i.test(ua))  return 'Windows 8.1';
  if (/mac os x/i.test(ua))         return 'macOS';
  if (/iphone os/i.test(ua))        return 'iOS';
  if (/android/i.test(ua))          return 'Android';
  if (/linux/i.test(ua))            return 'Linux';
  return 'Unknown';
}

По User-Agent нельзя различить Windows 10 и Windows 11 — обе отдают одинаковую строкуWindows NT 10.0. Для точного определения ОС нужно использовать Client Hints (Sec-CH-UA-Platform-Version).

Определение устройства: мобильное, планшет, десктоп

function detectDevice(ua) {
  ua = ua.toLowerCase();
  if (/ipad|tablet|playbook|silk/i.test(ua)) return 'tablet';
  if (/mobile|iphone|android.*mobile|windows phone/i.test(ua)) return 'mobile';
  if (/android/i.test(ua) && !/mobile/i.test(ua)) return 'tablet';
  return 'desktop';
}

На iPad с iOS 13+ браузер по умолчанию запрашивает «десктопную» версию сайта, поэтому его User-Agent выглядит как на macOS. Чтобы отличить iPad от Mac, дополнительно проверяют наличие токенаMacintosh вместе с touch в User-Agent Client Hints.

Использование User-Agent в аналитике

Системы веб-аналитики (Яндекс.Метрика, Google Analytics) парсят User-Agent серверно и формируют отчёты по браузерам, устройствам и операционным системам. Эти данные помогают:

  • понять, какие платформы преобладают у аудитории и оптимизировать под них в первую очередь;
  • обнаружить аномальный трафик — например, всплеск запросов с одного User-Agent от бота;
  • планировать поддержку браузеров: если доля Safari ниже 1 %, можно отложить внедрение фич с ограниченной поддержкой;
  • настраивать A/B-тесты — показывать разные варианты интерфейса разным сегментам пользователей.

Боты и краулеры в User-Agent

Поисковые боты и социальные пауки обычно честно сообщают о себе. Это позволяет отделить их от обычных пользователей и не считать в конверсиях:

БотТокен в User-Agent
GooglebotGooglebot/2.1
YandexBotYandexBot/3.0
Bingbotbingbot/2.0
DuckDuckBotDuckDuckBot/1.1
Facebook Botfacebookexternalhit/1.1
Twitter BotTwitterbot/1.0
LinkedIn BotLinkedInBot/1.0

Однако не все боты честны — скрейперы и парсеры могут подделывать User-Agent, имитируя обычный браузер. Для защиты от них нужны дополнительные методы: анализ поведения, частоты запросов, отпечатки TLS, CAPTCHA.

Современная альтернатива: User-Agent Client Hints

Из-за проблем с приватностью и сложности парсинга индустрия переходит на User-Agent Client Hints — структурированные HTTP-заголовки, которые браузер передаёт по запросу сервера. Сервер объявляет интерес через Accept-CH, и браузер в следующих запросах присылает конкретные данные:

// Ответ сервера запрашивает нужные подсказки
Accept-CH: Sec-CH-UA, Sec-CH-UA-Platform, Sec-CH-UA-Mobile

// Следующий запрос от браузера
Sec-CH-UA: "Chromium";v="120", "Not.A/Brand";v="24", "Google Chrome";v="120"
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Mobile: ?0

Client Hints решают две проблемы: упрощают парсинг (значения приходят в структурированном виде) и уменьшают пассивный fingerprinting — браузер не передаёт всю информацию по умолчанию. Сегодня их поддерживают все браузеры на Chromium; Firefox и Safari пока реализуют частично.

Типичные ошибки при работе с User-Agent

  • Проверка «если есть Chrome — значит Chrome» — строки Chrome есть также в Edge, Opera, Brave и других браузерах на Chromium.
  • Игнорирование версий — поддержка CSS-фичи может появиться в Chrome 100, но отсутствовать в Chrome 90. Лучше использовать feature detection, чем сверять версии.
  • Хранение «сырого» User-Agent в логах навсегда — он содержит персональные данные и может подпадать под GDPR; применяйте агрегацию или сокращённое хранение.
  • Блокировка по User-Agent — это легко обойти подменой строки; используйте как дополнительный, а не единственный сигнал.
  • Полагаться на User-Agent для критичных решений — например, для выдачи разных тарифов или контента; лучше использовать feature detection через JavaScript.

Заключение

User-Agent — это важный, но не всегда надёжный источник информации о клиенте. Его парсинг требует аккуратности: нужно учитывать исторические токены совместимости, порядок проверки браузеров и особенности мобильных платформ. Для новых проектов стоит сразу планировать переход на Client Hints, а User-Agent использовать как дополнительный источник данных.

Чтобы быстро разобрать строку User-Agent и увидеть браузер, ОС, устройство и движок, используйте нашUser-Agent parser — он работает в браузере, не требует установки и поддерживает тысячи различных строк, включая мобильные браузеры и поисковых ботов.

Попробуйте эти инструменты

Похожие статьи