搜索引擎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 的产出。它们是一个正向循环: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 后台「按网站」开关决定。
- 选择「仅自动广告」或「混合投放」时,需在 AdSense 后台
Ads → By site中开启该站点的自动广告。 - 选择「仅手动广告单元」时,需在 AdSense 后台关闭该站点的自动广告;否则即使 BlogLoom 配置
autoAds=false,Google 仍可能通过同一加载器自动插入广告。 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 选择单一配置项方案:3.3、广告位规划与布局原则
广告放哪,直接决定「体验」和「收益」。参考眼动 F 型浏览路径,放在读者自然经过的阅读动线上,比「多塞几个格子」有效得多。
布局原则:
- 数量克制: 3
4 个高质量位置,通常优于 67 个鸡肋位。 - 预留尺寸防 CLS: 广告容器给
min-height或aspect-ratio,避免加载后正文乱跳。 - 融入而非伪装: 配色接近站点主题可以;绝不能做成「下载按钮」「播放键」或伪装成正文(见 3.5)。
- 移动端优先: 用自适应单元(
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,与后端一致):
client非空时必须匹配^ca-pub-\d+$;- 若「启用 + (自动广告 或 至少一个启用的广告位)」,则
client不能为空 → 否则提示「启用自动广告或手动广告位前请填写发布商 ID」; - 每个广告位必须有
position; position不能重复;- 启用的广告位必须能成功解析出
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 下发给后台下拉,保证「前端选项 = 后端白名单」,不会出现「后台能选、后端拒绝」的错位。
规则:
- 点击「新增广告位」时,从
['articleTop','articleBottom','articleInArticle','articleSidebarToc','listTop']取第一个尚未使用的位置作为默认值; - 最多 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 的右侧目录之后、仅文章页渲染:
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、先明确一个底线:阅读优先
技术博客的读者是来「读内容」的,广告一旦压过内容,掉的是留存,最终也会掉收益。因此先立三条底线:- 首屏留白给内容:标题下第一个广告位不得挤占首屏正文,保证「进门先看到文章」。
- 阅读动线上克制:一篇文章最多 2~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、不影响阅读的三条红线
- 意图一致:
autoAds=true时,AdSense 后台「按网站」必须同步开启;配置只表示意图,最终由 Google 裁决。 - 位置不重叠:手动位已覆盖的位置,不要再依赖 Auto ads 在同区插入,避免同屏重复。
- 总量不过载:
autoAds=true叠加多个手动位时,手动位控制在 2~3 个;过密会伤阅读、增 CLS,甚至触碰审核红线(见 3.5)。
6.1.5、推荐的起步配置
articleTop 手动位」,跑出数据后再用手动位逐步接管高价值位置——先保证能读,再谈收益。
6.2、申请前自查(8 项)
6.3、申请与站点验证
① https://adsense.google.com/ 登录注册 ② 填账号信息(国家/时区/收款姓名地址,须真实)
③ Sites → 添加站点 changlu.cloud(只填域名)
注意:这里只能够填写主域名,对应的话我是blog.changlu.cloud,这里只能够去配置主域名了:
④ 选验证方式来进行网站审核,这里我选择了:ads.txt
此时我们进入blogloom后台来进行配置即可,其中发布商ID需要补充ca-:
⑤ 点 Verify(实时校验)
此时已通过认证:
⑥ 进入审核(数天~两周),期间勿频繁改结构
等待吧:
⑦ 通过 → Ready → 广告开始展示(≤1h);被拒 → 按拒信整改,等 7~14 天再申
为什么选 ads.txt: 三种验证方式(AdSense 代码段 / Ads.txt 代码段 / 元标记)任选其一即可。ads.txt 反正后面投放也必须有,一次配置两处到位,且不依赖首页是否展示广告。BlogLoom 后台把发布商 ID 填成 ca-pub-8054136469344898、「ads.txt 配置」留空、总开关开启,保存后 /ads.txt 即自动输出:
注意: 总开关不能关(否则 /ads.txt 为空);必须公网 HTTPS 根路径可访问;内容留空自动生成,别手改。
6.4、核心步骤一:在 Google AdSense 开启自动广告
前提: 站点已通过审核(Sites 状态 Ready)。自动广告在 Google 侧开启,BlogLoom 侧只是「投放意图」开关,两边必须一致。操作:
- 登录 Google AdSense;
- 左侧进入 Ads → By site;
- 找到你的站点
changlu.cloud,打开 Auto ads(自动广告) 开关; - (可选)进入 Auto ads 设置,按需开关具体格式(In-page / Anchor / Vignette 等);
- 完成后再回到 BlogLoom 后台,把第 2 段「自动广告」开关一起打开(见 6.7)——两边一致。
重点: Google 侧的自动广告开关才是最终裁决,BlogLoom 的 autoAds 只是声明意图。不一致会出现「平台开了、实际没投」或「平台关了、Google 还插」两种情况。
📷 截图位 ①: AdSense → Ads → By site,开启自动广告的界面
右上角开启,点击应用到网站:
同时自动优化也开启:
保存:
6.5、核心步骤二:配置并验证 ads.txt
ads.txt 建议尽早配置:它声明站点授权 Google 销售广告库存,越早被 Google 抓到,流失的广告预算越少。
BlogLoom 侧:
-
后台「广告平台关联 → ③ ads.txt 配置」,留空即按发布商 ID 自动生成;需自定义再填写;
-
点「验证并下载」:内容非空则下载
ads.txt并提示成功;为空则提示「请先配置发布商 ID」; -
若站点由 BlogLoom 托管,
/ads.txt会随配置自动生效,无需手动上传;否则把下载的文件传到域名根目录。
此时已通过认证:
同时在blogloom中也要进行开启:
注意这块审批时间大概2-4周左右:
6.6、核心步骤三:创建手动广告单元(展示广告 · 纵向)
这里以「在文章右侧目录下方挂一个纵向广告」为示范。 操作:
注意: 复制的是完整代码,不用自己找 data-ad-slot——下一步粘贴后系统会自动识别。若想尝试「信息流 / 文章内嵌 / 多重」,分别选对应类型即可(见 2.1)。
选择展示广告:
选择纵向保存即可:
点击进行复制代码:
点击复制代码:
6.7、核心步骤四:回到平台完成广告位配置
把上一步拿到的代码填进 BlogLoom 后台「广告平台关联」:- 总开关: 打开「启用 AdSense」;
- ① 发布商配置: 填
ca-pub-数字(粘贴广告位代码时若为空会自动回填); - ② 自动广告: 与 Google 侧保持一致(见 6.4);
- ③ ads.txt 配置: 一般留空(见 6.5);
- ④ 广告位配置:
- 点「新增广告位」;
- 投放位置 选「文章详情·右侧目录下方」(挂纵向广告);
- 把上一步的完整代码粘进「Google 代码」框,失焦后出现「已识别:slot=…」;
- 需要更多位置就继续「新增广告位」,并在下拉里改选对应位置(不可重复,最多 5 个);
- 保存配置 → 前台刷新即生效。
注意: 位置由「投放位置」下拉决定;新增时会自动分配一个默认位置,可随时改选。「右侧目录下方」在移动端右栏隐藏,只桌面端可见。在blogloom中进行新增广告位:
默认这个文章详情右侧目录下面为:
随便找篇文章打开源代码即可:
6.8、广告位生效
todo6.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。
八、总结
回到最开始那个场景——流量来了,怎么变现。本文把这条链路完整走了一遍:- 投放策略:阅读优先,起步「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