Skip to main content

搜索引擎SEO优化调研学习03、Google AdSense 广告接入配置指南

本文定位: 把《搜索引擎SEO优化调研学习02》里分散在 4.4 广告接入需求与原理分析 与 5.3 广告接入(Google AdSense) 两块内容,抽出来整理成一篇可独立阅读、可直接照做的 AdSense 配置指南。 与早期方案相比,本文的操作部分已对齐 BlogLoom 当前真实实现:后台是「总开关 + 四段式表单」,广告位直接粘贴 Google 代码由系统自动识别,技术位置由系统内部维护,ads.txt 通过「验证并下载」按钮生成。

一、背景引入:流量有了,收益从哪来

1.1、一个真实场景:文章被收录了,然后呢?

在 02 篇里,我们花了很大力气让 BlogLoom 从「爬虫眼里的空壳」变成「能被收录的博客」:服务端直出、sitemap、robots、canonical、结构化数据…… 文章慢慢被 Google 收录,也来了自然流量。这时候一个很自然的问题出现了:
流量来了,怎么让它变成收益?
对于个人技术博客,最常见、门槛最低的答案就是——Google AdSense。

1.2、为什么先接 Google AdSense?——四种变现方式对比

广告与变现平台有很多:Google AdSense、国内广告联盟(如百度联盟)、CPS 带货、品牌赞助……为什么第一阶段只选 Google AdSense? 核心判断: AdSense 是「接入成本最低、对内容破坏最小、又能覆盖全球技术流量」的起步方案。先把 AdSense 跑通,就等于验证了「内容 → 流量 → 收益」这条路是通的。

1.3、AdSense 与 SEO 的正向循环

很多人以为「做 SEO」和「接广告」是两件事,其实 AdSense 审核恰恰依赖一阶段 SEO 的产出。它们是一个正向循环:
重点: AdSense 不是「申请了就批」。它有一套内容与合规红线(见 3.5),其中很大一部分(隐私政策、可抓取、sitemap、站点结构清晰)正是 02 篇已经做完的事。换句话说:SEO 改造做扎实,AdSense 过审会顺很多。

1.4、本文范围与阅读指引

范围说明: 广告属于变现阶段,不在「收录最小闭环」里。但 BlogLoom 已经在代码层把 AdSense 的配置、装配、注入、ads.txt 全部落地,所以本文按「原理 → 需求 → 配置规则 → 代码 → 实操 → 验证」的顺序完整讲清。
阅读顺序建议:

二、核心概念讲解:先搞懂这些再动手

写代码、配后台之前,先把概念理清,否则很容易出现「代码贴了,广告却不显示」的情况。

2.1、三样东西:加载器、广告单元、自动广告

AdSense 在页面层面的构成,其实只有三样东西: 官方说明:「要把 AdSense 代码放在每个页面的 <head> 和 </head> 之间」,才能覆盖全站、让 Auto ads 生效(About the AdSense code)。 关键更新: 官方已说明 Auto ads 现在可以通过任意 AdSense 广告单元代码生效,不再强制要求单独粘贴 Auto ads 代码——只放一个「广告单元」代码,也能吃到 Auto ads 的自动投放。 ① 加载器代码形态:
② 广告单元代码形态:
参数含义(官方 自适应广告代码参数): 重点:
  • 加载器只需一次(<head>),每出现一个 <ins> 广告位,就要紧跟一次 push({});少 push 不显示,多 push 会报错。
  • 自适应广告的父容器要有稳定宽度;父容器为 width:auto 或运行时才算宽,可能出现移动端布局异常。

2.2、两级 ID:发布商 ID 与广告位 ID

这是最容易搞混、也最该先搞清的一点。AdSense 里的标识分两级: 「是否有多个」要分开看: 结论:
  • 发布商 ID 永远只配一个,它是总开关。
  • 广告位想放几个就建几个,数量完全由你定。
  • 多个 slot 不是「同一广告单元的多个参数」,而是互相独立的广告单元(各自独立报表、独立样式)。
BlogLoom 的设计取舍: 后台只维护一个配置项 adsense(一组 JSON),发布商 ID、广告位列表、ads.txt 全在这一个 JSON 里——不新增表、不新增字段。

2.3、投放方式:按网站、按广告单元、混合投放

在 AdSense 里,「按网站」和「按广告单元」不是二选一,它们可以独立使用,也可以同时使用:
关键边界: adsbygoogle.js 是自动广告和手动广告共用的加载器,脚本 URL 本身没有 autoAds=true/false 参数。autoAds 表示 BlogLoom 的投放意图,Google 是否真正自动插入广告,最终仍由 AdSense 后台「按网站」开关决定。
因此需要同步完成以下操作:
  1. 选择「仅自动广告」或「混合投放」时,需在 AdSense 后台 Ads → By site 中开启该站点的自动广告。
  2. 选择「仅手动广告单元」时,需在 AdSense 后台关闭该站点的自动广告;否则即使 BlogLoom 配置 autoAds=false,Google 仍可能通过同一加载器自动插入广告。
  3. slots 可以为空,也可以配置多个;每个 slot 对应一个独立广告单元。

2.4、ads.txt:站点级「授权售卖」声明

ads.txt 是 IAB Tech Lab 规范(官方说明):非强制,但不放会损失部分预算——很多广告主只对「已验证 ads.txt」的广告请求出价。文件放域名根目录,只接 Google 时内容一行:
pub-0000000000000000 是发布商 ID(去掉 ca- 前缀);f08c47fec0942fa0 是 Google 固定认证标识。这与本项目 robots/sitemap/rss 的站点级文件机制同构(见 02 篇 5.1.3)。

2.5、站点验证:AdSense 代码 或 meta 标签

官方(站点管理改进):新增 meta tag 验证,「不想在首页展示广告时,可用 meta 标签替代 AdSense 代码片段验证」。 BlogLoom 首页是 SPA,已有 SpaIndexController 向 SPA 入口注入 meta 的能力,可直接沿用 meta 标签方案:

2.6、关键概念对照表


三、核心功能需求分析调研

本章回答「要做什么、为什么这么做、有哪些约束」,是后面「配置规则」与「代码实现」的出发点。

3.1、需求总览(功能点清单)

3.2、后台如何承载需求:为什么是「一个 JSON + 一个开关」

需求方最容易想到的是「发布商 ID、自动广告、ads.txt、广告位」拆成四个独立配置项。但这样会带来一连串问题:数据库要加字段、接口要加参数、增删广告位要改代码。 于是 BlogLoom 选择单一配置项方案:
设计理由: 后台只维护一个 JSON,前端表单本质是「一组表单 + 一段校验」,后端只当字符串存取、解析时做兜底;新增/删除位置、临时关广告、改发布商 ID 都只动这一处,不新增表、不新增字段、不改代码。

3.3、广告位规划与布局原则

广告放哪,直接决定「体验」和「收益」。参考眼动 F 型浏览路径,放在读者自然经过的阅读动线上,比「多塞几个格子」有效得多。 布局原则:
  1. 数量克制: 34 个高质量位置,通常优于 67 个鸡肋位。
  2. 预留尺寸防 CLS: 广告容器给 min-height 或 aspect-ratio,避免加载后正文乱跳。
  3. 融入而非伪装: 配色接近站点主题可以;绝不能做成「下载按钮」「播放键」或伪装成正文(见 3.5)。
  4. 移动端优先: 用自适应单元(data-full-width-responsive="true"),少用手动固定大尺寸撑爆首屏。

3.4、广告位与页面的对应关系

核心场景是文章页:它既是收录主体,也是读者停留最久的地方;SPA 页广告属于锦上添花。
现状说明: 目前实际渲染的位置为 articleTop、articleBottom(正文内),以及桌面端右栏「本文目录」下方的 articleSidebarToc(SSR 与 SPA 均已接入);articleInArticle、listTop 已在校验白名单中预留,属于进阶项,一阶段可先不做。

3.5、合规与审核要点(红线)

AdSense 审核的本质是判断「你是不是在做对用户有用的网站」。 ① 申请前的站点条件(与 SEO 改造强相关):
注意: 隐私政策页是审核里最容易漏的一项,需写明:使用了 Cookie、接入了 Google AdSense 等第三方、第三方可能基于用户兴趣投放广告。
② 广告实现红线(官方 广告投放政策): ③ 内容质量(决定能不能过审):
  • 原创、垂直、有信息量:同一细分领域 8~15 篇能解决具体问题的原创长文,比「50 篇模板短文」更稳。
  • 不是机翻/洗稿:多平台搬运、机翻当原创,属于高危重复内容。
  • 有稳定更新节奏:几周内持续更新,比「同一天批量发完」更像认真运营。
  • 被拒后:读懂拒信关键词 → 做可见的整改(补隐私政策、删违规、修 404、改导航)→ 等 7~14 天再申请,不要连续刷申请。

3.6、收益与指标:看什么、怎么算

经验参考(非承诺): 内容站 CTR 常见 1~3%,长期低于 0.5% 通常意味着位置或匹配有问题;RPM 波动大,看周趋势而非单日。 结算门槛: 账户余额累计满 100 美元才触发支付;需完成身份验证(PIN 码)与收款方式(国内电汇需 SWIFT/BIC)。
重要:广告费的主要变量不是「广告位数量」,而是「内容主题 × 流量质量 × 页面浏览深度」。 技术博客 CPC 通常不低,把性能与收录做扎实、让文章被更多人看到,比多塞几个广告位更划算。

3.7、常见问题排查(广告不显示)

调试: 浏览器 Network 过滤 adsbygoogle 看 SDK 是否加载;Console 看 push() 报错。广告竞价有延迟(通常几秒内),刚打开空白属正常。

四、功能需求与 UI 配置规则

本章是开发与验收的统一口径:把「后台长什么样、每个字段什么规则、开关怎么组合、粘贴代码怎么识别」写成明确规则。

4.1、配置总模型

后台配置最终落成一份 JSON,字段定义如下: 广告位对象 AdSlot:

4.2、后台四段式表单(UI 结构)

后台页面:SEO优化 → 广告平台关联,组件 AdvertisingPlatform.vue。整体由「一个总开关 + 四个编号区块」组成:
四段与需求映射:

4.3、字段与规则明细(逐字段)

位置白名单(后端单一数据源,经 GET /admin/seo/adsense/positions 下发): 保存前置校验(前端 validate,与后端一致):
  1. client 非空时必须匹配 ^ca-pub-\d+$;
  2. 若「启用 + (自动广告 或 至少一个启用的广告位)」,则 client 不能为空 → 否则提示「启用自动广告或手动广告位前请填写发布商 ID」;
  3. 每个广告位必须有 position;
  4. position 不能重复;
  5. 启用的广告位必须能成功解析出 slot。
重点: 前端校验与后端 AdsenseConfigController.validate() 规则同构,后端做最终兜底——即使绕过前端,非法配置也会被拒绝,不会写库。

4.4、开关组合行为矩阵

这是配置逻辑的核心,验收时可直接对照: 加载器注入条件(三条件同时满足):
注意 enabled 的空值语义: 后端多处以 Boolean.FALSE.equals(enabled) 判断——即 enabled == null 视为启用,只有显式 false 才关闭。前端初始值固定为 false,避免误开。

4.5、广告位代码解析规则(粘贴即识别)

用户在「④ 广告位配置」只需粘贴 Google 提供的完整广告单元代码,系统在 blur(失焦)时自动解析,不会原样执行粘贴的脚本。 解析流程(parseSlotCode):
解析结果反馈: 页面显示 已识别:slot=… format=… layout=…,让用户即时确认。
设计理由: 用户面对的是 AdSense 后台复制出来的完整代码,不需要理解 slot/format/layout/alignment 分别是什么。系统替他解析成结构化字段,既能精确渲染,又不会执行来路不明的脚本——安全与易用兼得。

4.6、位置选择规则

位置不再「用户看不到、选不到」,而是后台可下拉选择;新增广告位时系统仍会按顺序给一个默认位置,用户可以改。 位置元数据由后端统一维护,通过 GET /admin/seo/adsense/positions 下发给后台下拉,保证「前端选项 = 后端白名单」,不会出现「后台能选、后端拒绝」的错位。 规则:
  1. 点击「新增广告位」时,从 ['articleTop','articleBottom','articleInArticle','articleSidebarToc','listTop'] 取第一个尚未使用的位置作为默认值;
  2. 最多 5 个广告位;全部用完后提示「已达到当前支持的广告位数量上限」;
  3. 每个广告位可在「投放位置」下拉中改为任意未占用的位置;
  4. 删除某个广告位后,该位置释放,可再次被分配;
  5. 位置不可重复,前端与后端双重校验。
注意: articleSidebarToc 只在桌面端右栏渲染(移动端右栏整体隐藏),建议配合 vertical(纵向)或 autorelaxed(多重)形态的广告单元。 设计说明: 位置选择是「有约束的自由」——用户能选,但选项是固定的、且与后端白名单同源;这样既满足「在目录下方挂纵向广告」这类精确需求,又不会因为乱填位置导致渲染不到。

4.7、ads.txt「验证并下载」规则

「③ ads.txt 配置」右侧的「验证并下载」按钮,逻辑如下:
后端生成规则(SeoFileServiceImpl.adsTxt()):
注意: 「验证并下载」是给你本地核对 + 上传托管环境用的。若站点本身由 BlogLoom 提供 /ads.txt 端点,内容会随配置自动生效,无需手动上传;按钮的价值在于「所见即所得」地确认格式正确。

4.8、前后端一致性规则

为保证「后台所见 = 前台所得」,两端共用同一套语义:
重点: 后端 /site 接口把 adsense 作为已解析的对象返回(而非字符串),前端无需再 JSON.parse,两端天然共享同一份配置。

五、核心代码设计实现

本章讲「代码长什么样、数据怎么流」。整体分后端与前端两部分。

5.1、总体结构

5.2、数据模型与存储

常量(SiteSettingConstants.java):
配置载体(module/seo/domain/AdsenseConfig.java):
广告位(module/seo/domain/AdSlot.java):
存储: 复用 site_setting 表(name_en='adsense'、type=1、value=<JSON>),无需建表、无需新增字段;该行在首次保存时由 upsertBasicSetting 自动创建。 解析兜底(关键): getAdsenseConfig() 必须容错——JSON 为空、格式错、client 为空时都返回「空配置」,这样下游「拿不到就不输出」:
读取语义(SiteSettingServiceImpl):

5.3、后端装配:SeoMetaBuilder

每个 SSR 页面模型都会从 SeoMetaBuilder.baseMeta() 拿到广告信息:
SeoMeta 对应字段:
只读一次: 装配时读一次配置,把 client 作为加载器开关、把过滤后的 slots 转成 position → AdSlot 的 map;模板只消费这个 map,不感知原始 JSON。

5.4、后台接口:AdsenseConfigController

路由: /admin/seo/adsense 白名单与校验:
保存(saveAdsenseConfig): upsertBasicSetting(ADSENSE, "AdSense 广告配置", json) → deleteSiteInfoCache(),保证下一次 /site 与页面渲染立即生效。

5.5、SSR 页面注入(Thymeleaf)

① 加载器注入公共 head(templates/seo/fragments/seo-head.html,配了 ID 才输出):
② 文章模板按位置渲染广告位(templates/seo/blog.html,取不到 slot 就不渲染):
articleBottom 同构。注意: th:if 里先判断 client 非空 且 该位置有 slot,二者缺一不渲染——这正是「取不到就不输出」的兜底。 右栏位(articleSidebarToc) 渲染在 seo/blog.html 的右侧目录 <aside class="article-toc-column"> 内、「本文目录」盒子之后:
该位只在桌面端可见(整列 m-mobile-hide),建议配 format=vertical(纵向展示)或 autorelaxed(多重)广告单元。

5.6、SPA 页面注入(Vue)

① 加载器工具(blog-view-ui/src/util/adsense.js):
② 注入时机(Index.vue): 拉取 /site 后调用 initAdsense(this.siteInfo.adsense),配置一经保存即动态生效,无需重新构建前端。 ③ 广告位组件(AdsenseSlot.vue): 按 position 从 slots 中找到启用的广告位再渲染 <ins>,mounted/watch 时调用 pushAdsense。 ④ 用于文章页(Blog.vue):
右栏位 在布局组件 Index.vue 的右侧目录之后、仅文章页渲染:
⑤ SPA 根 HTML 兜底(SpaIndexController): 当 getAdsenseClient() 非空时,服务端还会往 SPA 入口 <head> 注入一次加载器,避免 JS 尚未执行时缺少脚本。
合规底线: 只允许「用户切换路由后 push 新的广告位」;代码已用 data-pushed 去重,禁止定时器反复刷同一广告位,否则违反 3.5 的自动刷新政策。

5.7、ads.txt 站点级文件

对外端点(SeoFileController):
生成逻辑(SeoFileServiceImpl):
后台查看 / 下载(SeoConfigController): contentOf("ads") → seoFileService.adsTxt();fileNameOf("ads") → ads.txt;contentTypeOf("ads") → text/plain。前端「验证并下载」即调用其中的下载端点。

5.8、配置 → 成品对照(文章页)

后台配置(唯一入口 site_setting.adsense):
后端组装:
渲染出的 /blog/513 HTML(精简):
页面实际看到的样子:
变体:
  • 只配 articleTop → 页面只有标题下一个广告位,其它位置不渲染(th:if 兜底)。
  • 某位 enabled:false → 该位在 getAdsenseSlotsByPosition() 组装时被过滤,源码里不出现。
  • client 留空(或整段 JSON 清空)→ <head> 无加载器、所有广告位不渲染、ads.txt 为空 = 全站关广告,无需改代码。

六、实战配置步骤

本章顺序: 先规划「自动 / 手动怎么挂」,再按真实落地顺序走:① AdSense 开启自动广告 → ② 配置并验证 ads.txt → ③ 创建手动广告单元(展示广告·纵向)→ ④ 回到平台完成广告位配置,最后看结算与监控。文中已预留截图位,可直接补齐。

6.1、投放策略规划:自动广告与手动广告怎么挂

正式配置前,先想清楚一个问题:自动广告和手动广告,到底怎么搭配,既不浪费收益,又不打扰阅读?

6.1.1、先明确一个底线:阅读优先

技术博客的读者是来「读内容」的,广告一旦压过内容,掉的是留存,最终也会掉收益。因此先立三条底线:
  1. 首屏留白给内容:标题下第一个广告位不得挤占首屏正文,保证「进门先看到文章」。
  2. 阅读动线上克制:一篇文章最多 2~3 个手动位,够用即止,宁缺毋滥。
  3. 防跳动(CLS):广告容器预留 min-height(BlogLoom 默认 90px / 移动端 72px),避免广告加载后正文乱跳。

6.1.2、自动 vs 手动:怎么分工

核心判断: 文章页既是收录主体,也是读者停留最久的地方,值得用手动位守好「标题下 + 正文结束」两个高价值动线;其余位置交给 Auto ads 兜底。这样既拿到覆盖,又保住可控与阅读体验。

6.1.3、分阶段挂载

注意: 新增时会依次给默认位置:articleTop → articleBottom → articleInArticle → articleSidebarToc → listTop,最多 5 个;可在每个广告位的「投放位置」下拉里改选。起步只加 1 个,别急着填满。

6.1.4、不影响阅读的三条红线

  1. 意图一致:autoAds=true 时,AdSense 后台「按网站」必须同步开启;配置只表示意图,最终由 Google 裁决。
  2. 位置不重叠:手动位已覆盖的位置,不要再依赖 Auto ads 在同区插入,避免同屏重复。
  3. 总量不过载:autoAds=true 叠加多个手动位时,手动位控制在 2~3 个;过密会伤阅读、增 CLS,甚至触碰审核红线(见 3.5)。

6.1.5、推荐的起步配置

一句话: 起步「Auto ads + 一个 articleTop 手动位」,跑出数据后再用手动位逐步接管高价值位置——先保证能读,再谈收益。

6.2、申请前自查(8 项)

6.3、申请与站点验证

① https://adsense.google.com/ 登录注册 ② 填账号信息(国家/时区/收款姓名地址,须真实) img ③ Sites → 添加站点 changlu.cloud(只填域名) 注意:这里只能够填写主域名,对应的话我是blog.changlu.cloud,这里只能够去配置主域名了: image-20261012021915652 ④ 选验证方式来进行网站审核,这里我选择了:ads.txt image-20261012021832898 此时我们进入blogloom后台来进行配置即可,其中发布商ID需要补充ca-: image-20261012023941460 ⑤ 点 Verify(实时校验) image-20261012024026965 此时已通过认证: image-20261012024039343 ⑥ 进入审核(数天~两周),期间勿频繁改结构 image-20261012024051832 等待吧: image-20261012024106995 ⑦ 通过 → Ready → 广告开始展示(≤1h);被拒 → 按拒信整改,等 7~14 天再申 为什么选 ads.txt: 三种验证方式(AdSense 代码段 / Ads.txt 代码段 / 元标记)任选其一即可。ads.txt 反正后面投放也必须有,一次配置两处到位,且不依赖首页是否展示广告。BlogLoom 后台把发布商 ID 填成 ca-pub-8054136469344898、「ads.txt 配置」留空、总开关开启,保存后 /ads.txt 即自动输出:
回 AdSense 点 Verify,Google 抓取到该行即为通过。
注意: 总开关不能关(否则 /ads.txt 为空);必须公网 HTTPS 根路径可访问;内容留空自动生成,别手改。

6.4、核心步骤一:在 Google AdSense 开启自动广告

前提: 站点已通过审核(Sites 状态 Ready)。自动广告在 Google 侧开启,BlogLoom 侧只是「投放意图」开关,两边必须一致。
操作:
  1. 登录 Google AdSense;
  2. 左侧进入 Ads → By site;
  3. 找到你的站点 changlu.cloud,打开 Auto ads(自动广告) 开关;
  4. (可选)进入 Auto ads 设置,按需开关具体格式(In-page / Anchor / Vignette 等);
  5. 完成后再回到 BlogLoom 后台,把第 2 段「自动广告」开关一起打开(见 6.7)——两边一致。
重点: Google 侧的自动广告开关才是最终裁决,BlogLoom 的 autoAds 只是声明意图。不一致会出现「平台开了、实际没投」或「平台关了、Google 还插」两种情况。
📷 截图位 ①: AdSense → Ads → By site,开启自动广告的界面
image-20261012024140444 右上角开启,点击应用到网站: image-20261012024253695 同时自动优化也开启: image-20261012024515004 保存: image-20261012024309484

6.5、核心步骤二:配置并验证 ads.txt

ads.txt 建议尽早配置:它声明站点授权 Google 销售广告库存,越早被 Google 抓到,流失的广告预算越少。 BlogLoom 侧:
  1. 后台「广告平台关联 → ③ ads.txt 配置」,留空即按发布商 ID 自动生成;需自定义再填写; image-20261012023941460
  2. 点「验证并下载」:内容非空则下载 ads.txt 并提示成功;为空则提示「请先配置发布商 ID」;
  3. 若站点由 BlogLoom 托管,/ads.txt 会随配置自动生效,无需手动上传;否则把下载的文件传到域名根目录。
Google 侧确认:
见上面6.3步骤即可: image-20261012024026965 此时已通过认证: image-20261012024039343 同时在blogloom中也要进行开启: image-20261012024538975 注意这块审批时间大概2-4周左右: image-20261013131701425

6.6、核心步骤三:创建手动广告单元(展示广告 · 纵向)

这里以「在文章右侧目录下方挂一个纵向广告」为示范。 操作:
注意: 复制的是完整代码,不用自己找 data-ad-slot——下一步粘贴后系统会自动识别。若想尝试「信息流 / 文章内嵌 / 多重」,分别选对应类型即可(见 2.1)。
选择展示广告: image-20261012024602310 选择纵向保存即可: image-20261012024635842 点击进行复制代码: image-20261012024702793 点击复制代码: image-20261012024732445

6.7、核心步骤四:回到平台完成广告位配置

把上一步拿到的代码填进 BlogLoom 后台「广告平台关联」:
  1. 总开关: 打开「启用 AdSense」;
  2. ① 发布商配置: 填 ca-pub-数字(粘贴广告位代码时若为空会自动回填);
  3. ② 自动广告: 与 Google 侧保持一致(见 6.4);
  4. ③ ads.txt 配置: 一般留空(见 6.5);
  5. ④ 广告位配置:
    • 点「新增广告位」;
    • 投放位置 选「文章详情·右侧目录下方」(挂纵向广告);
    • 把上一步的完整代码粘进「Google 代码」框,失焦后出现「已识别:slot=…」;
    • 需要更多位置就继续「新增广告位」,并在下拉里改选对应位置(不可重复,最多 5 个);
  6. 保存配置 → 前台刷新即生效。
注意: 位置由「投放位置」下拉决定;新增时会自动分配一个默认位置,可随时改选。「右侧目录下方」在移动端右栏隐藏,只桌面端可见。
在blogloom中进行新增广告位: image-20261012024808794 默认这个文章详情右侧目录下面为: image-20261012024846173 随便找篇文章打开源代码即可: image-20261012025103267

6.8、广告位生效

todo

6.9、结算与监控

6.9.1、结算门槛与前置验证(缺一不可)

重点: 四项缺一不可,任一项未完成,AdSense 会暂停付款并在付款页提示「需要操作」,核对无误后才会继续打款。

6.9.2、国内提现(电汇)配置

国内 AdSense 收益通过 银行转账(电汇 / Wire Transfer)、以 美元(USD) 打款。配置步骤:
注意: 不要用他人账户或不明第三方「代收」,易触发风控、冻结甚至无法入账。
📷 截图位 ⑧: AdSense「Payments → 管理付款方式」添加银行转账(电汇)界面

6.9.3、到账、结汇与税务

  • 打款时间: 达标后,Google 通常在每月 21~26 日发起付款,电汇到账一般 3~7 个工作日。
  • 手续费: Google 可能扣电汇费,中转行 / 收款行可能再扣一笔;金额小的时候不划算。
  • 结汇: 个人每年有 5 万美元便利化结汇额度;银行可能要求说明资金用途(如「广告服务费/稿费」)并出示 AdSense 付款凭证。
  • 合规申报: 广告收入属应税所得,按当地规定申报;保留 AdSense 付款记录与相关协议备查。
📷 截图位 ⑨: 收款银行到账 / 结汇界面(可选)

6.8.4、收益指标与监控节奏

  • 核心指标: Page RPM / Impressions RPM / CTR / CPC(含义见 3.6),看周趋势而非单日。
  • 监控节奏: 每周固定看广告展示、点击、RPM;出现「无效流量」「政策提醒」邮件立即处理(见 3.5)。

七、验证测试

7.1、功能验收(浏览器 / 后台)

7.2、curl 验证

7.3、单元测试

集成测试 SeoEndpointIntegrationTest#shouldRenderAdsenseAndExposeAdsTxtWhenConfigured() 覆盖:
  • 文章页 HTML 含加载器、data-ad-slot="1111111111"、data-ad-slot="2222222222";
  • /ads.txt 等于 google.com, pub-1234567890123456, DIRECT, f08c47fec0942fa0\n。

八、总结

回到最开始那个场景——流量来了,怎么变现。本文把这条链路完整走了一遍:
一句话总结:BlogLoom 把 AdSense 做成了「后台一个总开关 + 四段式表单」——用户只粘贴 Google 代码、决定启停,技术位置由系统内部维护;配置存成一份 JSON,后端解析兜底、SSR/SPA 双端注入、ads.txt 自动生成。这样既满足 AdSense 的合规与投放要求,又做到「改配置不改代码」。 重点回顾:
  • 投放策略:阅读优先,起步「Auto ads + 一个 articleTop 手动位」,跑出数据再逐步加位(见 6.1)。
  • 发布商 ID 全站唯一,广告位可以多个;autoAds 只是意图,AdSense 后台「按网站」才是最终裁决。
  • 加载器注入三条件:enabled != false 且 client 非空 且(autoAds=true 或存在启用 slot)。
  • 位置后台可下拉选择(含「右侧目录下方」纵向位),与后端白名单同源,最多 5 个。
  • 配置损坏 = 不注入、不报错,绝不影响正文阅读。

参考资料

[1]. About the AdSense code(AdSense 代码说明) [2]. 代码放置位置(<head>) [3]. 站点管理改进(meta 验证 / ads.txt) [4]. 自适应广告代码参数 [5]. 广告投放政策 [6]. ads.txt 指南 [7]. ads.txt 技术规范(Google for Developers) [8]. 广告代码(AFP 参数参考) [9]. SPA 接入 AdSense 实践 [10]. 申请与审核经验(2026) [11]. 布局与 CTR 优化(2026) [12]. BlogLoom 开源项目(GitHub)
整理者:长路 创建时间:2026.10.12 更新时间:2026.10.12