返回

申请AdSense的折腾记录:被拒几十次,终于通过了

发布于:  at  06:06 下午
⏱️ 约 6765 字 • 预计阅读 17 分钟

Read in English

博客申请Google AdSense被拒几十次的记录。查爬虫日志、修死链、改robots.txt,也怀疑过账号和付款资料,最后终于收到了网站通过审核的邮件。

背景

2020年3月时用另外一个Google账号给本站点申请过一次AdSense,当时账号和站点很轻松的通过了审核。 后来因为付款资料问题,老AdSense账号就被我主动注销,最近(25年10月)打算再次给本站接入AdSense,后续开源项目的文档站和控制台也想放点广告,能回收一点服务器成本就好。 原以为把代码放上去,等审核就行了,没想到后面一折腾就是一整年。

历经一整年时间,账号本身申请了13次,本站点提交审核10次,现在终于通过了,决定把之前折腾的过程整理一下。有些改动确实修好了网站的问题,有些只是当时猜测可能有用,最后究竟是哪一项让审核通过的,我也不知道。

更新您的AdSense申请

这封邮件我已经很熟悉了。收到以后打开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天。之前还担心赶上过年,要是寄丢了就麻烦了,没想到还挺快。

AdMob地址验证的PIN信件

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

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验证多出来的?

AdSense后台出现添加付款方式的选项

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

AdSense收款资料显示已完整

D1数据库记录的Mediapartners-Google访问情况

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

结果还是拒绝。

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广告了。

chaosgoo.com通过AdSense网站审核的通知

前面草稿一直留着,就等这张图。总算能补上了。

不过没法说改完robots.txt就通过了,前面改过它,后面也继续被拒过。整个过程中修了不少问题,也试了不少现在看不太靠谱的办法,不能把最后通过全部算在某一次改动上。

如果你也一直被拒

可以先检查那些能确认的问题:广告代码里的发布商ID是否正确,正文能不能打开,图片有没有坏,站内链接是不是指向404,robots.txt和Cloudflare有没有挡住正常抓取。联系方式、隐私政策也顺手看一下,不要只是有个链接,点进去却什么都没有。

付款资料和账号状态按后台提示处理就好。网上“换个账号就行”“必须先有绿色对勾”的说法,我当时看了不少,最后也没弄明白它们到底适用于什么情况,不建议照着折腾。

还有就是别像我一样反复点提交,最后把申请次数用完了。先把发现的问题修好,记一下改过什么,隔一段时间再申请。中间该写文章写文章,不然很容易每天只盯着拒绝邮件,博客反而不更新了。

这篇主要是留个记录。如果你也是同样的提示,希望里面修死链、查代码和爬虫规则的部分能帮上忙。至于我猜错的那些地方,也一起留在这里,免得下一次自己又忘了。


在以下平台分享此文章:

下一篇
使用 Media3 给视频添加水印