AdSense ads.txt未找到怎么办?原因与解决方法(Cloudflare实测)

如果你最近也在做 Google AdSense 审核,可能会遇到一种很让人头疼的情况:明明前几天 ads.txt 还是“已授权”,网站也能正常访问,过了几天却突然变成“未找到”。

我自己的站点 apepine.com 也遇到过类似情况。最开始我以为是 ads.txt 文件没放对,后来一通排查下来,才发现事情没有那么简单。很多时候,问题并不是文件真的丢了,而是 Google 在抓取的时候,没有稳定拿到它。

最常见的原因有这几类:文件在抓取时临时不可用(例如返回 404、5xx,或是“软 404”)、根域名没有正确指向 ads.txt、www / 非 wwwhttp / https 没有做好重定向、robots.txt 阻止了抓取,或者文件里有格式错误、空格、逗号、编码问题。AdSense 还明确说,抓取会从根域名开始,并且要求 ads.txt 返回 HTTP 200;如果响应头是 404,文件会被视为不存在。

可以直接按这个顺序排查:先在浏览器里分别打开 https://你的域名/ads.txthttp://你的域名/ads.txt,确认都能正常显示并返回 200;再检查 robots.txt 有没有挡住 /ads.txt;然后对照 AdSense 里的发布商 ID,确认文件内容只有正确那一行,且没有多余空格或错误字符。官方也强调,ads.txt 必须放在根目录,且发布商 ID 要与 AdSense 账号一致。

注意:官方说明,ads.txt 的变更反映到 AdSense 里可能要几天,低流量站点甚至可能要一个月

这篇文章我把整个排查过程、容易忽略的坑,以及最后最有效的解决方法整理出来。希望对正在经历同样问题的你有帮助。

一、先说结论:ads.txt “未找到” 不一定真的是没找到

很多人看到 AdSense 里显示“未找到”,第一反应就是:

  • 文件是不是没上传成功?
  • 路径是不是错了?
  • 代码是不是写错了?

这些都要查,但真正的情况往往更复杂。对于使用 Cloudflare、CDN、缓存规则或者防护规则的网站来说,Google 看到的结果,和你本地浏览器看到的结果,可能并不是同一个。

也就是说,你自己打开 https://你的域名/ads.txt 没问题,不代表 Google 每次来抓也都没问题。

二、我遇到的真实现象

我的站点一开始显示 ads.txt 已授权,说明 Google 已经成功读取过文件。可是在审核第 8 天,状态突然变成了“未找到”。这很奇怪,因为我并没有删除文件,网站也没有停机。

我后来去服务器上验证,发现:

  • https://apepine.com/ads.txt 可以正常访问
  • 返回状态码是 200 OK
  • 内容也确实是正确的 ads.txt

这说明文件本身没有问题。

那问题出在哪?

很可能出在中间层,比如:

  • Cloudflare 缓存
  • 安全规则
  • 某些边缘节点返回异常
  • 短时间内抓取结果不稳定

这类问题最麻烦的地方在于:你自己看不出来,但搜索引擎和广告平台会受影响。

三、先别急着改文件,先做这 4 个检查

1. 直接访问 ads.txt

在浏览器里打开:

https://你的域名/ads.txt

如果能直接看到文件内容,说明基础访问没问题。

2. 用命令行检查状态码

在服务器或本地终端运行:

curl -I https://你的域名/ads.txt

正常情况下,你应该看到:HTTP/2 200
如果是 301、302、304、403、404,或者别的异常状态,就要继续往下查。

使用本地电脑的命令提示符窗口查看,输入win+r,调出输入框,输入cmd,回车,然后粘贴命令,如图:

如图,在服务器运行:

3. 看 Cloudflare 有没有拦截

如果你的网站使用了 Cloudflare,要特别注意:

  • 缓存规则是否影响了 /ads.txt
  • 安全防护是否误伤了 Google 抓取
  • 某些页面规则有没有把这个路径单独处理掉

4. 检查 ads.txt 内容本身

文件内容要符合 Google 的规范,常见格式大概是这样:

google.com, pub-xxxxxxxxxxxxxxxx, DIRECT, f08c47fec0942fa0

注意几点:

  • 要放在网站根目录
  • 文件名必须是 ads.txt
  • 不能写成 ads.txt.txt
  • 不要有多余空格、乱码、BOM 头

四、为什么 Cloudflare 很容易让 ads.txt 出问题

有些站长喜欢用 Cloudflare,我个人也很喜欢,我的博客猿猿松就是托管在Cloudflare,因为它速度快,也能挡掉不少垃圾流量。但对 ads.txt 这种文件来说,Cloudflare 也可能带来麻烦。

原因很简单:ads.txt 是一个很小、很关键、但又不该被“优化”的文件。它需要稳定、直接、可抓取。如果缓存机制或者安全规则偶尔把它拦住,Google 这次没拿到,就可能记录成“未找到”。

尤其是下面这些情况,最容易出问题:

  • 站点刚改过规则
  • CDN 节点尚未同步
  • 访问来源被判定为异常
  • 浏览器拿到的是缓存结果,但 Google 抓取时看到的是另一种响应

所以,ads.txt 的原则只有一个:尽量让它简单、稳定、直接返回 200。

五、最推荐的做法:给 /ads.txt 单独做一条规则

这一步非常重要。你不一定非做不可,但如果你的网站用了 Cloudflare,我真的建议你做。

规则 :绕过缓存

在 Cloudflare 里新建一条 Cache Rule,条件设置成:

URI 路径 等于 /ads.txt

然后把动作设置为:Bypass cache

这样做的目的是让 /ads.txt 尽量不受缓存影响,直接回源。

小白具体操作:

1.登录 Cloudflare,进入你这个站点。

2.去 Cache Rules 页面。Cloudflare 官方步骤就是:进 Cache Rules,点 Create rule

3.规则名字随便填,建议写:ads.txt bypass

4.在 When incoming requests match 里选 Custom filter expression

5.在表达式里把条件设成“路径等于 /ads.txt”。Cloudflare 官方说明这里可以用表达式构建器选择字段、运算符和值;可用运算符里就包括 equals

6.在 Then 里找到 Cache eligibility,选 Bypass cache。官方说明这个选项的意思就是:匹配到的请求不缓存。

7.点 Deploy。Cloudflare 官方文档写的是,想保存就点 Deploy;不想立刻上线可以先 Save as Draft。

如图:

8.成功显示如图:

六、总结

最简单的判断标准:

浏览器打开 https://apepine.com/ads.txt,能直接看到文件内容。

你服务器上执行 curl -I https://apepine.com/ads.txt,返回 200 OK

Cloudflare 里规则显示 Deployed
如果你的 curl 还是 200,而且 /ads.txt 规则已经部署,通常就说明站点端已经稳定了。

发表评论