ads.txt и app-ads.txt: формат строки и где разместить файл
Кто вправе продавать рекламу на сайте или в приложении, владелец сообщает публично — текстовым файлом. Для сайтов это ads.txt (Authorized Digital Sellers) в корне домена, для приложений — app-ads.txt на сайте разработчика. Каждая строка называет рекламную систему и номер аккаунта в ней. Покупатель сверяет с файлом пару «система + аккаунт» из запроса ставки и отсеивает продажи без разрешения.
Из чего состоит строка
# app-ads.txt разработчика games.example
ssp.example, 4815162342, DIRECT, a1b2c3d4e5f6
exchange.example, pub-0099, RESELLER
CONTACT=adops@games.example
OWNERDOMAIN=games.example
| Поле | Что содержит |
|---|---|
| 1 | Домен рекламной системы — тот, к которому подключены покупатели |
| 2 | ID аккаунта продавца в этой системе |
| 3 | Тип связи: DIRECT или RESELLER |
| 4 | Необязательный ID системы в органе сертификации, сейчас это TAG |
Строки вида ИМЯ=значение — переменные. CONTACT дает контакт владельца файла, SUBDOMAIN отсылает к файлу на поддомене. Версия 1.1 (2022) добавила OWNERDOMAIN — домен компании-владельца — и MANAGERDOMAIN — домен основного партнера по монетизации.
Значение поля 2 должно совпадать с seller_id в файле sellers.json этой системы и с sid ее узла в цепочке schain. На этом совпадении держится вся проверка.
Куда положить файл
Сайт. Адрес вида https://example.ru/ads.txt на корневом домене, ответ в формате text/plain. Редиректы внутри того же корневого домена допустимы, а на чужой домен спецификация разрешает лишь один переход — чтобы файл мог храниться у подрядчика.
Приложение. Путь к файлу краулер строит сам:
- Из запроса или каталога берет ссылку на страницу приложения в магазине (
app.storeurl) или bundle ID. - Со страницы магазина считывает сайт разработчика.
- Отбрасывает у хоста префиксы
www.иm.и дописывает/app-ads.txt.
Если в карточке указан https://www.games.example/about, файл будут искать по адресу https://games.example/app-ads.txt. Если сайт разработчика живет на поддомене, сначала проверяют поддомен, затем корневой домен.
Зачем это нужно
Без такого файла мошенник может выдать дешевый трафик за известное приложение: подставить чужой bundle в запрос — популярная схема рекламного фрода. Переписать чужой app-ads.txt он не может, поэтому строки, которых нет в файле владельца, выдают подмену. Продавцу файл возвращает спрос: часть DSP не ставит на неподтвержденный инвентарь вовсе.
Частые ошибки
- Новый партнер без строки. Медиацию расширили, а app-ads.txt не обновили — запросы идут, ставок нет. Сверка файла входит в чек-лист монетизации.
- Не тот домен в поле 1. Корпоративный сайт компании вместо домена рекламной системы.
- Файл не на том сайте. Лежит на лендинге, а в карточке магазина указан другой адрес.
- HTML вместо текста. Сайт отдает страницу-заглушку с кодом 200, и краулер видит мусор.
Проверка ads.txt в Ibiza
Биржа Ibiza периодически скачивает ads.txt подключенных сайтов и ищет строку со своим доменом и seller_id площадки; по результату площадка получает статус «подтверждена» или «не подтверждена». Для приложений автоматической проверки app-ads.txt пока нет, их статус остается «не проверено».
Частые вопросы
Где разместить app-ads.txt, если у приложения нет сайта?
Сайт все равно понадобится: его адрес указывают в карточке приложения в магазине, а файл кладут в корень этого домена. Без ссылки на сайт в карточке краулер покупателя файл не найдет.
Чем DIRECT отличается от RESELLER?
DIRECT — аккаунт в рекламной системе принадлежит владельцу площадки, и он сам им управляет. RESELLER — владелец разрешил посреднику продавать свой инвентарь через аккаунт посредника.
Что будет, если SSP нет в моем app-ads.txt?
Покупатели, проверяющие авторизацию, сочтут такие запросы неразрешенной продажей и многие не будут на них ставить. В OpenRTB для этого случая предусмотрен код отказа 12.