Обзор библиотеки Header Bidding от «Яндекса»
Дата публикации: 2025-02-13 | Источник: PubMag
Header Bidding (HB) — технология, позволяющая издателям максимизировать доход через проведение конкурентных аукционов между SSP и DSP в реальном времени. «Яндекс» создал собственную закрытую реализацию Header Bidding (header-bidding.js) с внутренними механизмами, которые не раскрываются публично. Система глубоко интегрирована с AdFox и другими сервисами «Яндекса», при этом поддерживает работу с внешними SSP.
Материал получился объёмным, но я планирую раскрыть эту тему ещё подробнее в будущих публикациях.
Архитектура
«Яндекс» реализовал библиотеку HB как модульную систему со следующими компонентами:
- Конфигуратор аукциона
YaHeaderBiddingSettings— отвечает за хранение настроек рекламных блоков, SSP и таймаутов. - Механизм конкурентных ставок
callBids— управляет запросами к SSP и обработкой их ответов. - Адаптеры для SSP — специализированные модули для взаимодействия с различными рекламными платформами (SSP).
- Механизм обработки ставок
resolveBids— аккумулирует ставки, определяет победителя и передаёт данные в рекламный блок. - Подсистема логирования и отладки — обеспечивает отслеживание ошибок и диагностику проблем.
- Cookie Matching — обеспечивает синхронизацию идентификаторов пользователей между платформами.
Конфигурация
Скрипт Header Bidding инициализируется через глобальный объект YaHeaderBiddingSettings, который содержит следующие основные настройки:
- Ad Units — описание рекламных блоков и связанных с ними SSP.
- Bidders Map — таблица соответствия адаптеров и их конфигураций.
- Таймауты — ограничения по времени выполнения запросов.
- Callbacks — механизмы обработки результатов.
Сбор ставок
Функция callBids() — ключевой компонент механики аукциона. Она управляет запросами к SSP и обработкой ставок, выполняя следующие действия:
- Отправляет HTTP-запросы ко всем SSP.
- Через
fetchBids()получает ответы (CPM, креатив, идентификатор и метаданные от каждой SSP). - Собирает все ставки в массив с помощью
getBidsReceived()иgetLastBidsReceived().
Выбор победителя
Затем собранные данные передаются на серверную часть AdFox (этим управляет объект managerForAdfox, из-за чего ставки «Яндекса» остаются скрытыми. По сути, managerForAdfox работает как «черный ящик» — AdFox получает через него всю информацию и может влиять на выбор победителя по своим внутренним критериям. После обработки AdFox отправляет обратно на клиент информацию о победителе аукциона.
Рендеринг объявлений
- Если выигрывает AdFox → ставка отправляется обратно в AdFox, где реклама загружается через его скрипты.
- Если выигрывает сторонний SSP → реклама вставляется в контейнер через
iframeили JavaScript.
Cookie Matching
Механизм Cookie Matching в Header Bidding «Яндекса» идентифицирует пользователей для точного таргетинга рекламы. Cookie Matching выполняется до начала аукциона: при загрузке страницы браузер отправляет запрос к https://matchid.adfox.yandex.ru/getcookie, где AdFox проверяет наличие уникального идентификатора (например, yandexuid, cryptouid). Эти идентификаторы передаются в SSP для повышения CPM и персонализации рекламы.
Интеграция с другими сервисами «Яндекса»
Библиотека Header Bidding интегрируется с сервисами «Яндекса» в единую рекламную экосистему:
- AdFox — центральный компонент системы, управляющий аукционами, агрегирующий ставки и распределяющий трафик между SSP.
- Яндекс.Метрика — собирает пользовательские данные и оценивает эффективность рекламных показов через параметры запросов и Cookie Matching.
- Яндекс.Директ — кажется, что в коде есть взаимодействие с сервисом, но для чего это делается не совсем понятно.
- Яндекс.Крипта — анализирует аудиторные данные для оптимизации таргетинга и персонализации рекламы. Здесь также подробности интеграции не очевидны, но присутствуют в явном виде
cryptouid - Яндекс ID и Cookie Matching — синхронизирует идентификаторы пользователей между рекламными системами «Яндекса» для улучшения кросс-платформенного таргетинга.
SSP-платформы, упоминаемые в коде библиотеки (на февраль 2025 года в алфавитном порядке):
- AdFox (
adfox) - AdMixer (
admixer) - Adspend (
adspend) - Adtelligent (
adtelligentAdapter) - AdWile (
adwile) - Adspector (
adspector) - Alfasense (
alfasense) - Astralab (
astralab) - Atraffic (
atraffic) - Between Digital (
betweendigital) - Bidvol (
bidvol) - Buzzoola (
buzzoola) - Clio (
clio) - Criteo (
criteo) - DGT SSP (
dgt) - Dynotech (
dynotech) - Facebook (
facebook) - Fotostrana (
fotostrana) - GetIntent (
getIntent) - Gnezdo (
gnezdo) - HeadHunter (HH.ru) (
hhru) - Hybrid (
hybrid) - Hyper (
hyper) - Kadam (
kadam) - Mail.ru (MyTarget) (
mail) - MediaSniper (
mediasniper) - MediaToday (
mediaToday) - MTS DSP (
mts) - NativeRent (
nativerent) - NeMedia (
nemedia) - OhMyBid (
ohmybid) - OTM (
otm) - Otclick (
otclick) - Qvant DSP (Maxima Telecom) (
maximaTelecom) - RedLlama (
redllama) - Relap (
relap) - Roxot (
roxot) - Sape (
sape) - Segmento (
segmento) - SMI2 (
smi2) - Soloway (AdRiver) (
soloway) - Solta (
solta) - Sparrow (
sparrow) - Upravel DSP (
upravel) - UMG (
umg) - Viqeo (
viqeo) - VideoHead (
videohead) - VideoNow (
videonow)
Выводы
На клиентской стороне библиотека Header Bidding от «Яндекса» обеспечивает прозрачный аукцион, где победитель определяется исключительно по максимальному CPM без манипуляций со ставками и преференций отдельным SSP. Клиентский код не содержит механизмов искусственного занижения ставок или подмены победителя. Однако финальная обработка ставок происходит на серверной стороне через интеграцию с AdFox, где возможны дополнительные корректировки, не отраженные в клиентском коде.
Данный анализ основан на публично доступном коде библиотеки Header Bidding от «Яндекса», который загружается в браузеры пользователей и доступен для изучения через инструменты разработчика. Вся информация получена исключительно из открытых источников и не содержит конфиденциальных или внутренних данных компании «Яндекс».