背景
2020年3月时用另外一个Google账号给本站点申请过一次AdSense,当时账号和站点很轻松的通过了审核。 后来因为付款资料问题,老AdSense账号就被我主动注销,最近(25年10月)打算再次给本站接入AdSense,后续开源项目的文档站和控制台也想放点广告,能回收一点服务器成本就好。 原以为把代码放上去,等审核就行了,没想到后面一折腾就是一整年。
历经一整年时间,账号本身申请了13次,本站点提交审核10次,现在终于通过了,决定把之前折腾的过程整理一下。有些改动确实修好了网站的问题,有些只是当时猜测可能有用,最后究竟是哪一项让审核通过的,我也不知道。
更新您的AdSense申请
这封邮件我已经很熟悉了。收到以后打开AdSense首页,就会看到下面这个提示。

账号未获得批准,使用AdSense之前需要修复一些问题,下面再让你遵守发布商计划政策。但是具体哪个地方有问题,它没有说清楚。
最开始还会认真去看政策,后来第五次、第八次、第十次收到一样的邮件,心态就越来越爆炸。改完了,提交,过几天又拒绝,然后继续猜。
翻了不少国内外的帖子,说什么的都有。有个Facebook群组说付款那一项必须有绿色对勾才行,看语言应该是印度的群组,因为说的是hindi语。即刻的“出海人的日常”圈子里面也有人提到这个绿色对勾,还有人说是账号问题,换个账号申请就好了。
但是AdSense Help Center里面,又有个社区经理说这是印度人为了违规售卖账号编出来的谣言。看完更迷糊了,到底听谁的?
我确实怀疑过账号,甚至打算再不过就把AdMob和关联的AdSense一起注销掉,重新注册。好在最后没有这么做。
后面只好边改边记录,每次提交前记一下改了什么。不然下一次被拒,连自己已经试过哪些东西都记不清了。
先看看爬虫到底来没来
网站部署在Cloudflare Pages上,DNS也用的CF,所以我写了个Cloudflare Workers脚本,把爬虫的User-Agent、IP和访问页面记到D1数据库里面。遇到特别关注的爬虫就发邮件通知我。
监控了两个月,Mediapartners-Google一次都没看到,只有Google-Display-Ads-Bot来过几次。于是我又跑去研究Googlebot的访问记录,以为内容审核可能是它负责的,结果也没看出什么规律。
Google的AdSense抓取工具说明里面提到了这两个User-Agent,还说明了一个容易忽略的地方:只在User-agent: *下面禁止抓取,不一定能挡住AdSense抓取工具,要针对对应的User-Agent设置规则。
所以只看通用规则还不够,广告爬虫自己的规则也得检查。至于审核的时候具体是谁负责什么,单凭我的日志看不出来,后面也在这个地方猜错过。
清理一下以前发出去的文章
以前在简书发过和博客一模一样的文章,GitHub的README也放了不少相同内容。当时怀疑是不是这些内容让Google分不清原文在哪里,于是把简书旧文章下架了,README改成简介,再放链接到博客。
B站那边因为账号已经注销,没办法处理,就先放着了。
这里并不能确定重复发布就是被拒的原因,只是那时候能想到的方向都试了一下。同一篇文章发到多个平台,并不代表一定会被AdSense拒绝。
联系方式和隐私政策
这些页面我的博客一直都有,不过申请的时候还是重新检查了一遍。
页脚能找到联系方式,隐私政策里面写清楚使用了哪些服务、怎么处理数据,以及广告相关的说明。GDPR和使用条款也检查了一下,避免页面有了,内容却和网站实际使用的东西对不上。
这部分没什么特别的技巧,主要就是确认链接能打开,内容也不是随便复制一份模板就扔在那里。
SEO、加载速度,还有死链
申请AdSense期间也顺便处理了网站的SEO和性能问题,详细过程在这两篇里面:
首页的H1、H2层级整理了一下,每篇文章的title和description也分别检查了。还有个比较低级的错误,AdSense脚本参数里面少了ca-前缀,代码放上去了,但是参数不对。
之前还写过一些屏蔽AdSense脚本的逻辑,排查时把可能影响审核检查的部分清理了。哪些页面需要加载广告代码,得看实际用途,不能为了省一点加载时间把该加载的地方也挡掉。
原来真的有很多死链
起初我一直觉得自己的博客没有死链。后来被拒的次数越来越多,专门去扫了一遍,用的是Broken Link Checker。
结果还真有,而且不少。
图片的问题来自之前一次批量替换域名,我把raw.githubusercontent.com换成了github.com,替换完一直没发现有些图片已经打不开了。页面的问题主要是主题分页生成了错误链接,还有一些文章删掉了,旧链接却留在其他地方。
先把站内这些链接修好,再去GSC检查已经收录但返回404的页面,需要清理旧搜索结果的就提交删除申请。GSC的删除申请只是处理搜索结果,网站里面的坏链接还是得自己修。
AdMob的PIN信到了
2026年1月底,我完成了AdMob那边的PIN验证。广告收益达到地址验证门槛后,Google会寄一封带PIN码的信,用来验证收款地址,这和博客能不能通过站点审核并没有很大的关系,但是和AdSense账号本身能不能通过审核有没有关系不好说。
从寄出到收到只用了14天。之前还担心赶上过年,要是寄丢了就麻烦了,没想到还挺快。

PIN已经验证完,AdSense首页的收款状态却仍然停在We've got your info。

同一个Google账号申请AdMob就很顺利,账号大概一天通过,提交的APP也是一天左右通过。开通AdMob时已经分配了发布商ID,但网站这边还是一直没过。
我还把自己其他的Google账号关联到了这个AdMob上,想排查是不是哪个账号以前开通过AdSense,因为关联账号有个要求就是被关联账号本身未开通AdSense,结果发现都能被关联, 说明并不是重复账号的原因。
找客服问了一下
2026年2月初,找到了一个能给AdSense客服发邮件的入口,满怀期待发过去,结果秒回拒绝。
不甘心,又发了一封,请他们人工看一下。这次确实有人回复,大意是没有足够的信号(insufficient signals)。我当时理解为访问量或者抓取记录还不够,但客服没有解释具体指什么,也就只能这么猜。
至少收到了一句和拒绝模板不一样的话,稍微安心了一点。不过过了几天,还是那封“更新您的AdSense申请”。
这次决定先停一下,等下个月初再申请,中间继续更新博客。安安稳稳过个年,别想这个事情了。
Mediapartners-Google终于来了,然后还是没过
2月23日,偶然发现后台多了一个绑定银行卡的选项。之前确实没看到过,具体什么时候出现的也不知道,也可能是过了PIN验证多出来的?

3月1日从淮北回来,立刻又提交了一次。第二天早上收到监控脚本的邮件,Mediapartners-Google一晚上访问了1800多次。打开AdSense首页,收款状态也变成了“资料已完整”。


之前从未见过它,这次突然来了这么多,当时还以为终于有戏了。
结果还是拒绝。

不过这次提示变成了“低价值内容”,总算有个具体点的方向,不用继续围着账号猜了。
付款绿色对勾到底有没有用
我当时把付款资料变完整和爬虫开始访问联系到了一起,还猜测Mediapartners-Google负责内容审核,Google-Display-Ads-Bot负责检查ads.txt。
但是日志只能说明这几件事发生的时间接近,不能证明它们之间有这样的关系。Mediapartners-Google是分析页面内容、匹配广告的抓取工具,它来了也不代表一定会通过,我自己紧接着就又被拒了。
所以付款资料该填的还是填,后台有待处理事项就处理,但“绑了银行卡才会开始内容审核”这个说法,我没有证据。也不能因为之前开通过AdMob,就认定AdSense处于什么“半激活”状态。
robots.txt也查出了问题
拿到“低价值内容”的提示后,我去翻了爬虫访问记录。里面有很多content.json、archives/、categories/和tags/。当时还在用Hexo,content.json是站内搜索的数据文件,剩下的主要是列表页。
明明记得禁止了content.json,为什么它还在访问?
原来的配置是这样的:
User-agent: *
Allow: /
Disallow: /content.json
User-agent: Mediapartners-Google
Allow: /
User-agent: Google-Display-Ads-Bot
Allow: /
Sitemap: https://chaosgoo.com/sitemap.xml
我最初以为是Allow写在前面,把后面的Disallow覆盖了。这个理解不对,规则不是按书写顺序决定优先级,通常要看哪一条匹配得更具体。
这里应该注意的是,我单独给Mediapartners-Google写了一组规则,里面却只有Allow: /,没有禁止content.json。不能指望它自动沿用User-agent: *里面的限制。
当时改成了下面这样:
User-agent: *
Disallow: /content.json
Allow: /
# 专门为 Google 广告程序放行
User-agent: Mediapartners-Google
Disallow: /content.json
Disallow: /tags/
Disallow: /en/
Allow: /archives/
Allow: /posts/
Allow: /
User-agent: Google-Display-Ads-Bot
Allow: /archives/
Allow: /posts/
Allow: /
Disallow: /en/
User-agent: AdsBot-Google
Disallow: /content.json
Disallow: /tags/
Disallow: /en/
Allow: /
Sitemap: https://chaosgoo.com/sitemap-index.xml
这只是当时试过的配置,不建议直接照抄。那时候我想减少数据文件和列表页的抓取,还把英文页面挡了,后来重新检查站点时已经不再屏蔽这些内容路径。翻译页面不等于低价值内容,需要投放广告的正文也应该能被广告爬虫访问。
让AI帮忙检查访问记录
我用谷歌家的Antigravity,把数据库文件和博客源码放到工作区,告诉它被拒的原因,让它结合访问记录找找有没有可疑页面。
它指出一个页面和“关于”高度重合,还有个很久以前留下的友情链接页,里面只有两条链接。自己看了一下,确实没什么保留的必要,就删了。
还有一些英文页面,当时怀疑和中文版本太接近。虽然配置了hreflang,还是先从sitemap移除,并在robots.txt加了限制。现在看,这也是一次没有验证清楚的尝试,hreflang是说明语言版本关系的,并不是用来保证AdSense审核通过的。
处理完以后,去GSC提交了“自述”和“友情链接”页面的删除申请,等了两天,再次提交审核。
连GitHub仓库也怀疑过
博客源码之前放在公开的GitHub仓库里面,文章源文件也在里面。我担心Google索引了这些文件,把它们和博客当成重复内容,于是把仓库改成了Private。
但这同样只是我的猜测,没有证据说明公开仓库就是被拒的原因。很多博客本来就是开源的,不需要看到我这么做就跟着把仓库关掉。
清理旧的搜索结果
GitHub不是我的网站,没办法通过自己的GSC移除它的搜索结果。Google还有一个刷新过时内容的工具,页面已经改变或不再公开时,可以在那里提交请求。
我选了“刷新某个已更改的网页在Google中的过期搜索结果”,然后填入仓库地址。
申请次数也用完了
后面还发现一件事,没重新提交审核的时候,Mediapartners-Google也会来抓内容。所以看到它访问,真的不能直接判断审核进度。
再后来,连提交按钮都用不了了,后台提示:
您尝试申请网站审核的次数已达上限,因此您目前无法申请对您的网站进行审核。到2026年4月24日这一天,您可以再次尝试。
只好等。这个日期是我当时后台给出的提示,不是所有账号都按同样的时间恢复,具体还是看自己后台。 不过后面结合申请时间,推断出一个最多申请2次,随后就会进入申请冷却。
终于通过了
现在终于收到了一封不一样的邮件,网站已经准备好展示AdSense广告了。

前面草稿一直留着,就等这张图。总算能补上了。
不过没法说改完robots.txt就通过了,前面改过它,后面也继续被拒过。整个过程中修了不少问题,也试了不少现在看不太靠谱的办法,不能把最后通过全部算在某一次改动上。
如果你也一直被拒
可以先检查那些能确认的问题:广告代码里的发布商ID是否正确,正文能不能打开,图片有没有坏,站内链接是不是指向404,robots.txt和Cloudflare有没有挡住正常抓取。联系方式、隐私政策也顺手看一下,不要只是有个链接,点进去却什么都没有。
付款资料和账号状态按后台提示处理就好。网上“换个账号就行”“必须先有绿色对勾”的说法,我当时看了不少,最后也没弄明白它们到底适用于什么情况,不建议照着折腾。
还有就是别像我一样反复点提交,最后把申请次数用完了。先把发现的问题修好,记一下改过什么,隔一段时间再申请。中间该写文章写文章,不然很容易每天只盯着拒绝邮件,博客反而不更新了。
这篇主要是留个记录。如果你也是同样的提示,希望里面修死链、查代码和爬虫规则的部分能帮上忙。至于我猜错的那些地方,也一起留在这里,免得下一次自己又忘了。