app-ads.txt 是一个体积很小、地位很高的纯文本文件。它替广告平台回答一个问题:谁有权出售你的应用里的广告库存?它是网页端 ads.txt 在应用生态里的对应标准,AdMob 与绝大多数主流广告网络都用它把一款已上架的应用,重新绑回真正拥有这份库存的发布商账号。把文件发布出去,是一个十分钟的活;让它真正通过验证,才是卡住大多数开发者的地方——因为它的失败是静默的:没有报错、没有邮件,只是你的应用始终拿不到那份本该属于它的「已验证」状态。

这份清单按真实操作顺序展开,全部基于 Google 官方 AdMob 帮助文档:搭好开发者网站、在商店列表里把它关联上、把 app-ads.txt 发布到域名根目录、用浏览器确认这个 URL 能打开、让 AdMob 爬虫找到它、读懂验证状态,并在卖家名单变化时保持文件最新。贯穿始终的只有一条规则:域名、商店列表与发布商 ID,必须指向同一个真实的发布商。


一、app-ads.txt 到底是什么,以及它为什么存在

这份文件由 IAB Tech Lab 定义,是 ads.txt 在应用生态里的延伸。它的用意既简单又偏防守:与其让买方去相信一条自称来自你应用的竞价请求,不如让买方去核对一份由发布商自己掌控的公开授权名单。不在这份名单上的卖家,出价请求就可以被过滤掉——这正是伪装应用与未授权转售难以变现的原因。

对 AdMob 而言,这份文件是 Google 确认「申请变现的发布商账号」与「商店列表背后的开发者」是同一个人的方式。文件发布正确,你的 AdMob 账号里会得到已验证状态;文件缺失或格式不对,应用即便还在出广告,也始终处于未验证状态。这个落差,就是这份清单存在的理由。

二、前提:一个与商店列表关联的开发者网站

AdMob 不会去猜你的域名。它读取的是你应用商店列表里的开发者网站,并从中推导出主机名。如果这个字段是空的,或者指向一个社交主页、一个占位域名、一个表单搭建器的链接,那么爬虫就无处可查——此时无论你怎么发文件都无济于事。

如果你目前还没有一个能在根目录上传文件的网站,这并不是死结——Firebase Hosting 是官方给出的可选做法之一,可以用来托管你的 app-ads.txt 文件。

三、第一步:把文件发布在域名根目录

文件必须能通过列表推导出的主机名、以根目录形式访问,也就是:

https://<hostname>/app-ads.txt
http://<hostname>/app-ads.txt

所谓「根目录」,指的是紧跟顶级域名之后的位置——对 example.com 而言,文件要放在 example.com/app-ads.txt,而不是某个项目子目录里。在做别的任何事之前,先用浏览器把这个 URL 打开:如果文件内容能直接显示,爬虫大概率就能找到它;如果浏览器弹的是登录墙、需要 JavaScript 才渲染、或者直接变成下载,那先解决这些,再谈验证。

四、第二步:发布商 ID 与那一行的确切格式

文件里每一行代表一个授权卖家,格式由 IAB 规范固定:

<广告系统域名>, <发布商账号 ID>, <关系>, <认证机构 ID>

Google 那一行用你的 AdMob 发布商 ID(账号里的 pub-… 值)作为账号 ID,关系写 DIRECT,认证机构 ID 用 Google 的 TAG 编号:

google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0

这一行不需要你手敲。AdMob 会提供一段已经嵌好你发布商 ID 的个性化代码片段;而「发布商 ID 必须包含且格式正确」是官方明确的验证前提。用纯文本编辑器(记事本、TextEdit,或任意文本编辑器,不要用富文本文档)新建文件,粘贴这段片段,再为你合作的每一个其他广告网络各加一行——每个网络都会公布自己的 app-ads.txt 信息。文件若不符合 IAB 格式,无论你的 ID 多正确都不会通过验证。

五、第三步:搞清 AdMob 爬虫是怎么找文件的

爬虫根据你列表里开发者网站的主机名来构造 URL,并遵循一套固定顺序。先弄懂规则,能挡掉一整类「文件明明就在那儿」的困惑。

六、第四步:等待抓取,必要时手动请求一次

AdMob 会例行抓取你最新的文件,而完成抓取与验证最多可能需要 24 小时。如果你正等着一份刚发布的文件,可以请求它更快地看一眼:

  1. 登录 AdMob,打开 应用(Apps),再点 查看所有应用。
  2. 打开 app-ads.txt 页,展开你想检查的那款应用所在行。
  3. 点击 检查更新(Check for updates)。

两个细节能让等待更省心。手动重新抓取会更新所有共用同一份 app-ads.txt 文件的应用状态,所以你基本不需要逐款请求。另外,这个按钮有时会不可用——此时例行抓取仍在进行,请老老实实等满 24 小时,而不是反复去改文件。

七、第五步:读懂验证状态,并从状态反推问题

AdMob 里的 app-ads.txt 页会显示每款应用的状态与抓取详情。请把它当作唯一的事实来源,而不是上周的一张截图。如果文件没被找到或未通过验证,状态详情会指向原因,Google 也提供了专门的排障路径。

最常见的原因,按出现频率排序:商店列表的开发者网站字段为空或不可用;文件放在某个路径里而不是根目录;发布商 ID 缺失或格式错误;robots.txt 挡住了爬虫;或者列表刚改过,AdMob 还没来得及重新读取。

八、十二项 app-ads.txt 验证清单

按顺序跑完下面十二项。每一项都对应上文的一条规则,也都是爬虫会默默替你打分的点。

  1. 存在一个开发者网站,且你掌控着它的域名。
  2. 该 URL 已写进商店列表——Play 的开发者网站,或 App Store 的营销网址——并能在应用的支持区看到。
  3. app-ads.txt 位于域名根目录,即 https://<hostname>/app-ads.txt。
  4. 这个 URL 能在浏览器里直接显示文件内容。
  5. 文件是纯文本,而不是排版文档或图片。
  6. 你的 AdMob 发布商 ID 已在其中,且符合 IAB 的行格式,包含 Google 那一行。
  7. 你使用的每个其他广告网络,都各有一行。
  8. 文件在爬虫真正检查的根域或一级子域上可达——而不是只在更深的子域上可达。
  9. robots.txt 放行 AdMob 爬虫。
  10. 若你改过列表里的网站,已给 AdMob 留足最多 24 小时去感知。
  11. 需要更快抓取时,已点过 检查更新,并等满了 24 小时窗口。
  12. 卖家名单变化时,你重新核对状态并保持文件最新。

九、KappS 的协助范围

app-ads.txt 只是决定一款变现应用能否真正拿到钱的那条长链上的一环:开发者账号、付款资料、税务信息与发布商身份,必须彼此对上。KappS 帮开发者在这条链上准备并提交合规材料,好让某一处验证——无论是 app-ads.txt、身份还是税务——不会在日后悄悄把钱卡住。落到实处,就是检查商店列表、域名与发布商 ID 是否描述着同一个真实发布商,并在爬虫或审核人员发现之前,把对不上的地方修好。

我们不做的事,是凭空制造授权。app-ads.txt 存在的意义,恰恰是曝光那些并非自己所声称身份的发布商;把一个你无权代表的卖家列进去属于造假,它会把账号和收款一起置于风险之中,也不是我们提供的服务。唯一能长久通过验证的方式,就是真的成为这款应用背后的发布商。

资料来源(Google 官方帮助):AdMob Help — Set up an app-ads.txt file for your app;Understand app-ads.txt file statuses;Troubleshoot app-ads.txt issues;About the content crawler(support.google.com/admob)。IAB Tech Lab — app-ads.txt 规范。