Что такое app-ads.txt и где он должен находиться
Файл в одном абзаце, формат строки поле за полем, единственное правило о его расположении, от которого зависит, работает ли всё это, и что делать без сайта.
app-ads.txt — это текстовый файл со списком рекламных компаний, которым разрешено продавать рекламный инвентарь вашего приложения. Он лежит по адресу /app-ads.txt на сайте, указанном в странице вашего приложения в магазине, и сети запрашивают его, чтобы проверить, что продавцы авторизованы. Поддомен платформы подходит: AdMob проверяет файлы на поддоменах AppFoyer. Нет рекламы — файл не нужен.
Сделайте это за несколько минут
AppFoyer размещает страницы, о которых это руководство, — политику конфиденциальности, условия использования, поддержку, удаление аккаунта и app-ads.txt — на отдельном поддомене, без собственного домена и сервера. Одно приложение — бесплатно, и ничто из того, что требует магазин, никогда не бывает платным.
Проверено 12 октября 2026 г. Правила магазинов меняются, иногда без предупреждения. Всё ниже ссылается на официальную документацию, и авторитетна именно она, а не эта страница. Если они расходятся, прав магазин. Это руководство переведено с английского; цитаты из документации магазинов приведены в оригинале на английском.
app-ads.txt — это текстовый файл со списком рекламных компаний, которым разрешено продавать
рекламный инвентарь вашего приложения. Он находится по адресу /app-ads.txt на сайте, который вы
указали в странице приложения в магазине, и рекламные сети запрашивают его, чтобы проверить, что тот,
кто предлагает ваш инвентарь, действительно авторизован вами. Без него покупатель никак не может это
подтвердить, и именно ради этого стандарт и существует.
Если ваше приложение не показывает рекламу, этот файл вам вообще не нужен. Если показывает, на него уходит около десяти минут — и девять из них на то, чтобы правильно выбрать расположение, а это единственная часть, которая регулярно идёт не так.
Какую проблему он решает
Рекламный инвентарь перепродаётся. Где-то между вашим приложением и рекламодателем есть биржи,
реселлеры и посредники, и пока не появились ads.txt и его вариант для приложений, у покупателя не
было дешёвого способа отличить «это действительно инвентарь того приложения» от «кто-то утверждает,
что продаёт его». Мошенничество работало, потому что это утверждение нельзя было проверить.
Решение намеренно простое: издатель публикует список тех, кому разрешено продавать от его имени, по адресу, который контролирует только издатель. Покупатель запрашивает файл и сравнивает. Это весь механизм, и именно поэтому адрес важнее содержимого — файл, который мог положить туда кто угодно, ничего бы не доказывал.
Формат строки
Один авторизованный продавец на строку, три обязательных поля и одно необязательное, через запятую:
google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0
| Поле | Значение |
|---|---|
google.com | Домен рекламной системы — собственный канонический домен сети, а не ваш. |
pub-0000000000000000 | Ваш идентификатор издателя в этой сети. Скопируйте его из её панели управления. |
DIRECT или RESELLER | DIRECT, если у вас прямой договор с сетью; RESELLER, если вы разрешили ей перепродажу. |
f08c47fec0942fa0 | Необязательный идентификатор центра сертификации, если сеть его публикует. |
Всё после # — комментарий. Строки, начинающиеся с contact=, subdomain=,
inventorypartnerdomain= и подобных, — это переменные, а не записи о продавцах, и их не трогают.
Две ошибки объясняют большинство сломанных файлов: пропущенная запятая, из-за которой вся строка не разбирается, и вставленный с форума поддержки чужой идентификатор издателя, который разрешает незнакомцу продавать ваш инвентарь. Панель каждой сети показывает точную строку, которая ей нужна, — используйте её, а не шаблон.
Где он должен находиться — часть, которая решает всё
Краулер не знает имени вашего пакета и не ищет вас по приложению. Он читает URL сайта разработчика
из страницы вашего приложения в магазине и запрашивает /app-ads.txt в корне этого домена.
Ошибётесь с URL в странице магазина — и совершенно правильный файл будет невидим.
AdMob документирует правила поиска, и их стоит один раз прочитать, а не угадывать:
- Корневой каталог означает “the directory following the top level domain” («каталог, следующий за
доменом верхнего уровня») —
example.com/app-ads.txt, а неexample.com/some/path/app-ads.txt. - Краулеры “probe up to one subdomain level from the developer website when constructing an
app-ads.txt URL” («проверяют до одного уровня поддомена от сайта разработчика при построении URL
app-ads.txt»). Для страницы в магазине, указывающей на
support.help.example.com/game, собственный пример AdMob показывает попытки запроситьhelp.example.com/app-ads.txtиexample.com/app-ads.txt. www.иm.исключены как расположения поддоменов, поэтому сводятся к самому домену.
Помимо адреса, отдача файла должна быть скучно правильной: HTTP 200, Content-Type: text/plain,
никакого перенаправления перед ним, никакого входа в аккаунт, никакого JavaScript для его отрисовки,
ничего в robots.txt, что его блокирует. Файл, который появляется только после перенаправления с
http на https или с основного домена на www, — частая и совершенно незаметная ошибка.
Проверьте его так, как это сделал бы краулер:
curl -i https://your-domain.example/app-ads.txt
Вам нужны 200 OK, text/plain, отсутствие заголовка Location: и ваши строки в теле ответа.
«Но у меня нет сайта»
Для независимого разработчика это обычная ситуация, и именно поэтому у стольких приложений файла нет вообще.
Требуется хост под вашим контролем, который отдаёт файл, — а не маркетинговый сайт, домен компании или лендинг. AdMob говорит об этом прямо: “If you don’t have a suitable website that allows the uploading of an app-ads.txt file at the root level, you can use Firebase Hosting to host your app-ads.txt file.” («Если у вас нет подходящего сайта, на который можно загрузить файл app-ads.txt на корневом уровне, вы можете разместить файл app-ads.txt на Firebase Hosting».) Хостинг на платформе — это ожидаемый вариант, а не обходной путь. Варианты разобраны в руководстве для тех, у кого нет сайта.
Что бы вы ни использовали, две вещи должны оставаться верными дольше, чем неделю после запуска: адрес должен оставаться прежним, потому что он указан в странице магазина, о которой вы больше не будете думать, и файл должен по-прежнему отдаваться как простой текст, без перенаправления, которое появится перед ним, как только кто-нибудь «улучшит» настройку.
Когда вы что-то меняете, ничего не происходит сразу
Рекламные сети повторно сканируют файлы по своему расписанию. AdMob указывает, что “it can take up to 24 hours for AdMob to crawl and verify your app-ads.txt files” («сканирование и проверка ваших файлов app-ads.txt в AdMob может занять до 24 часов»), а другие сети работают медленнее. Файл, загруженный час назад и всё ещё считающийся отсутствующим, почти всегда просто ещё не проверен — прежде чем что-либо менять, загляните в руководство по ошибке «not found».
Что здесь делает AppFoyer
Страница вашего приложения отдаёт app-ads.txt на собственном поддомене — простой текст, 200, без
перенаправления, с заголовками, которых требует спецификация, — а редактор проверяет каждую строку по
мере ввода, поэтому пропущенная запятая обнаруживается до того, как её увидит краулер. Этот поддомен
вы указываете как сайт разработчика в странице приложения в магазине, на один уровень ниже
appfoyer.page.
AdMob проверяет файл там: в октябре 2026 года он сообщил “app-ads.txt file found and verified” («файл app-ads.txt найден и проверен») для приложений, у которых сайтом разработчика указан адрес AppFoyer. Собственных результатов сканирования от других рекламных сетей у нас пока нет.
Официальные источники
- Настройка app-ads.txt — AdMob Help. Правила краулера и пример с поддоменом, процитированные выше, взяты с этой страницы.
- Спецификация ads.txt / app-ads.txt — IAB Tech Lab. Сама спецификация и авторитетный источник по грамматике строки.