没有不值得去解决的问题,也没有不值得去学习的技术!

A Tour of Go 课程页广告开始 ABCD 自然流量实验:从 620px 到 336、468、728 与 Responsive

图 1:AdSense 中建立的课程页 A、B、C、D 四个展示广告单元

作者:

博客广告优化实践

图1显示的是广告管理界面,我们选择"展示广告"类型,这是最常用的广告形式,适合在文章底部展示。

(1) 从自动广告到手动管理:基于数据分析的WPCode广告配置迁移指南

WordPress 的 8 个核心模板

(2) 网站广告位规划与 Google AdSense 配置指南

在 WPCode 中,这些广告单元会显示为不同的代码片段:

(3) WordPress 文章内嵌广告优化指南:用 WPCode 实现 Google AdSense 高收益布局

这个修改解决了No slot size for availableWidth=0的错误,确保广告能够正确测量容器宽度并显示。

(4) WordPress 2025主题侧边栏AdSense广告配置指南

桌面端页面底部出现横向滚动条

(5) WordPress 单篇文章页横向滚动条排查:最终发现是 AdSense 动态 iframe 导致的

【图 1:8 月 8 日,手机系统浏览器访问博客时出现“网站存在安全隐患”提示】

(6) 停用 Adsterra Native Banner 6 天后:异常跳转消失,但浏览器安全警告仍在

图 1:AdSense 中建立的课程页 A、B、C、D 四个展示广告单元

(7) A Tour of Go 课程页广告开始 ABCD 自然流量实验:从 620px 到 336、468、728 与 Responsive

从“广告能不能显示”进入“广告位到底应该多宽”

前一阶段,我已经在 A Tour of Go 的课程页面中加入了手动 AdSense 展示广告。

现在的整体广告结构已经基本稳定:

  • AdSense Auto Ads;
  • 课程页面手动展示广告;
  • Angular SPA 页面切换时自动 mount / unmount;
  • 局部 AdSense layout protection;
  • 不再使用全局 DOM observer。

基础问题基本解决以后,新的问题变成了:

课程页这个手动广告位,到底应该给 Responsive AdSense 多大的可用宽度?

而今天开始 ABCD 自然流量实验,并不是单纯为了“试试不同尺寸”。

真正的原因,是之前一次宽度调整以后,我观察到了非常明显的广告展示变化。

原来的广告位最大宽度是 620px

此前课程页的手动广告虽然使用的是 Responsive AdSense,但前端广告容器设置了:

CSS
max-width: 620px;

当时我在自己的电脑上反复测试课程页面,广告实际出现得相当频繁。

我印象比较深的是,那时经常显示尺寸比较小、接近正方形的广告。

点击“下一页”切换课程以后,新页面通常也很容易再次看到广告。

按照我当时自己的人工测试体感:

超过 90% 的课程页面似乎都能看到实际填充的广告。

这里的“超过 90%”并不是 AdSense 后台正式统计出来的 Fill rate,只是我自己连续浏览课程页面时非常直观的感受。

但至少有一点非常明显:

那时候广告很容易出现。

为什么后来删除了 max-width: 620px

广告经常能够出现以后,我又开始注意到另一个问题。

A Tour of Go 的桌面课程页面本身比较宽。

尤其是在我的桌面环境下,课程正文和代码编辑器之外仍然存在不少可以利用的横向空间。

如果 AdSense 总是在中间显示一个比较小的正方形广告,会给我两个感觉。

第一,页面还有不少横向空间,但实际广告只占其中很小一块,看起来似乎有些浪费。

第二,我也开始考虑:

如果允许 AdSense 显示更宽、更大的长方形广告,会不会有机会获得更高的单次广告价值?

所以后来我删除了原来的:

CSS
max-width: 620px;

不再人为限制课程广告容器的最大宽度。

当时的思路其实很简单:

既然页面有足够空间,就尽量把尺寸选择权交给 Responsive AdSense,让它根据实际页面空间、设备和广告库存选择合适的广告。

从逻辑上看,这似乎是一个很合理的方向。

取消宽度限制以后,广告反而很少出现了

但实际修改以后,我很快发现结果并没有想象中那么理想。

在自己的多轮 production 人工测试中,课程页手动广告实际出现的频率明显下降。

以前使用 max-width: 620px 时,我的感觉基本上是:

点击下一页,很容易继续看到广告。

而删除最大宽度限制以后,同样连续切换课程页面,真正能够看到广告的概率体感上甚至不到 5%。

前后的反差非常大。

大致可以描述成:

Plaintext
此前:
Responsive + max-width 620px
人工测试体感:广告出现概率 > 90%

后来:
Responsive + 不限制最大宽度
人工测试体感:广告出现概率 < 5%

不过这里必须强调:

这不是正式统计数据。

这是我自己访问 production 页面、连续点击下一页后形成的体感。

自己的测试流量很少,而且发布者本人反复访问广告,也不能直接等同于真实自然流量。

所以我不能根据这个现象直接得出:

Plaintext
删除 max-width: 620px
=
AdSense 填充率从 90% 降到了 5%

这样的结论并不严谨。

但前后的差异已经大到足以让我认真怀疑:

问题可能不只是屏幕大小,而是当前手动广告位能够提供给 Responsive AdSense 的尺寸空间。

1920×1080 用户并不是少数

我自己的电脑分辨率是:

Plaintext
1920 × 1080

从现有访问统计来看,1920×1080 大约占 40%。

这至少说明:

像我这样处于较宽桌面环境中的用户,并不是非常少的一小部分。

当然,不能简单推导成:

Plaintext
1920×1080 占 40%
=
40% 用户都会遇到和我完全相同的广告情况

即使屏幕分辨率一样,实际环境仍然可能不同,例如:

  • 浏览器窗口不一定最大化;
  • viewport 宽度不同;
  • 浏览器缩放比例可能不同;
  • 页面实际可用区域不同;
  • 广告请求时的库存和竞价环境也不同。

所以屏幕分辨率只能作为一个参考。

但至少它让我觉得:

宽屏桌面环境下,课程广告位变宽以后,广告展示机会是否反而下降,是一个值得认真验证的问题。

更大的广告可能更值钱,但展示少了未必更赚钱

我之前删除 620px 限制,还有一个很现实的考虑:

如果可以展示更大的长方形广告,会不会获得更高的单次广告价值?

这个想法本身并没有问题。

最终广告收入可以非常粗略地理解成:

Plaintext
总收益

有效广告展示数量
×
每次展示的平均价值

假设更大的广告平均价值确实更高,但广告真正展示出来的次数却大幅减少,那么最后的总收益仍然可能下降。

例如:

单次价值即使提高几十个百分点,也未必能够弥补展示数量下降一个数量级。

而我人工测试中观察到的变化,已经大到让我无法继续忽略这一点。

所以现在真正需要回答的已经不是:

“大广告是不是更贵?”

而是:

“不同的广告位宽度,在真实自然流量中会怎样共同影响展示数量、RPM 和最终收益?”

为什么不直接恢复原来的 620px

既然以前 max-width: 620px 时人工测试体验明显更好,一个最简单的处理方案当然是直接恢复:

CSS
max-width: 620px;

但我最终没有这样做。

因为这样实际上还是在凭自己的有限测试做决定。

即使恢复 620px 以后广告再次大量出现,我仍然不知道:

  • 620px 是不是最佳宽度;
  • 更小的广告位会不会拥有更多可填充库存;
  • 中等宽度是否能在广告数量和单次价值之间取得更好的平衡;
  • 更宽的广告是否虽然展示少,但 RPM 更高;
  • unrestricted Responsive 在真实自然流量中是否真的像我的人工测试表现得那么差。

所以这次我没有简单地:

Plaintext
删除 620px
→ 发现效果不好
→ 恢复 620px

而是决定把这个问题真正变成一轮自然流量实验。

建立 A、B、C、D 四个独立广告单元

这一次,我保留当前“不限制最大宽度”的 Responsive 广告作为 D 对照组,同时新增 A、B、C 三个广告单元。

四组分别是:

  • A:336
  • B:468
  • C:728
  • D:Responsive,不限制最大宽度

需要特别说明的是:

A、B、C 并不是固定尺寸 AdSense 广告。

四个广告单元本身全部仍然使用 Responsive。

区别只是在前端限制广告容器的最大可用宽度。

具体配置为:

Plaintext
A:Responsive + max-width 336px
B:Responsive + max-width 468px
C:Responsive + max-width 728px
D:Responsive + unrestricted

也就是说,这次真正测试的不是:

Plaintext
固定尺寸广告
vs
Responsive 广告

而是:

同样使用 Responsive AdSense,当广告位分别只能使用 336px、468px、728px 和不限制宽度时,真实表现会有什么不同。

原来的 620px 正好位于 468 和 728 之间。

所以第一轮实验先把范围拉开一点,看随着广告可用宽度增加,各项指标到底有没有比较明显的趋势。

如果未来真实数据表明最佳区域恰好位于 468~728 之间,那么第二轮再针对 600px、620px 一类的宽度做更细测试,也会比现在直接猜一个数字更有依据。

图 1:AdSense 中建立的课程页 A、B、C、D 四个展示广告单元
图 1:AdSense 中建立的课程页 A、B、C、D 四个展示广告单元

从 AdSense 后台可以看到当前四个独立广告单元:

  • go-dev Tour 课程页展示广告 A 336
  • go-dev Tour 课程页展示广告 B 468
  • go-dev Tour 课程页展示广告 C 728
  • go-dev Tour 课程页展示广告 D Responsive

这样设计还有一个很实际的好处。

后面不需要自己额外建立一套广告收益统计。

直接通过 AdSense 的 Ad unit 报表,就可以分别观察 A、B、C、D 四组的数据。

四组自然流量各占 25%

前端第一次创建课程页广告时,会从 A、B、C、D 中随机选择一个实验组。

四组概率相同:

Plaintext
A:25%
B:25%
C:25%
D:25%

实际广告单元对应关系为:

Plaintext
A → 3362554728 → max-width 336px
B → 1260537939 → max-width 468px
C → 4220340824 → max-width 728px
D → 4728596962 → unrestricted Responsive

四组全部保持:

Plaintext
data-ad-format="auto"
data-full-width-responsive="true"

所以并没有为了这轮实验改用固定尺寸广告。

图 2:ABCD 广告单元、容器最大宽度以及对应实现提交
图 2:ABCD 广告单元、容器最大宽度以及对应实现提交

这次实现最终提交为:

Plaintext
b6551ac feat: 增加课程广告 ABCD 自然流量实验

整个 ABCD 实验只是在现有共享课程广告实现上增加分组能力。

之前已经验证过的广告架构没有重新设计:

  • Auto Ads;
  • Angular SPA mount / unmount;
  • 局部 layout protection;
  • 不使用全局 DOM observer。

SPA 页面切换以后不能重新随机

A Tour of Go 的课程页还有一个比较特殊的问题。

它本质上是 Angular SPA。

点击“下一页”以后,并不会像传统网站那样重新加载完整 HTML,而是在当前应用内部切换课程内容。

如果每次进入下一页都重新随机,那么同一个用户的一次学习过程可能变成:

Plaintext
第 1 页:A
第 2 页:D
第 3 页:B
第 4 页:A

这样虽然总体上可能仍然接近 25% 平均分配,但同一次访问过程中实验条件一直变化,后面的数据会比较难解释。

因此,这次实验不是“每个页面重新随机”,而是:

同一个浏览器标签页的一次访问过程保持同一个实验组。

第一次选中实验组以后,会写入:

Plaintext
sessionStorage

使用的 key 是:

Plaintext
goDevCourseAdExperimentGroup

例如第一次得到 C,那么随后在同一个标签页中点击:

Plaintext
welcome/1
→ welcome/2
→ welcome/3
→ ...

都会继续使用 C。

如果当前环境无法使用 sessionStorage,还有一个当前 window 内存 fallback。

这样既能够进行自然随机分组,又能保证一次 SPA session 内的实验条件稳定。

正式环境中的实际验证

ABCD 实现上线以后,我最后在真实 production 浏览器中进行了轻量验证。

中文站这一次随机到了:

Plaintext
C

对应:

Plaintext
slot = 4220340824
max-width = 728px

首先进入:

Plaintext
/tour/welcome/1

记录当前实验组,然后只点击一次“下一页”,进入:

Plaintext
/tour/welcome/2

为了方便比较,我把切换前后的结果整理到了同一个 Console table 中。

图 3:zh-CN 从 welcome/1 切换到 welcome/2 后仍然保持 C 组
图 3:zh-CN 从 welcome/1 切换到 welcome/2 后仍然保持 C 组

实际结果为:

Plaintext
welcome/1 → C → 4220340824 → max-728
welcome/2 → C → 4220340824 → max-728

可以看到:

  • 页面已经从 welcome/1 变成 welcome/2
  • group 仍然是 C;
  • AdSense slot 没有改变;
  • data-ad-format 仍然是 auto
  • Responsive 配置没有改变;
  • 宽度 class 仍然是 max-728

也就是说:

Angular SPA 切换课程以后,没有重新随机实验组。

而且比较巧的是,这一次截图时页面实际还填充出了一条广告。

不过,是否真正看到 filled 广告并不是这次验证的硬性条件。

AdSense 请求本来就可能:

Plaintext
filled

也可能:

Plaintext
unfilled

这里真正需要确认的是:

  • production 正在运行新的 ABCD 逻辑;
  • 实验组与 AdSense slot 对应正确;
  • SPA 页面切换后实验组保持稳定;
  • 下一页仍然可以正常工作;
  • 页面布局没有明显异常。

这些条件已经满足。

ja-JP 也运行了同一套实验

随后我又对日语站进行了同样的轻量验证。

这一次 ja-JP 随机到了:

Plaintext
A

实际结果是:

Plaintext
welcome/1 → A → 3362554728 → max-336
welcome/2 → A → 3362554728 → max-336

也就是说,当前两个 production locale 都已经开始运行这套 ABCD 实验。

这里对我来说更重要的不是恰好一个抽到了 A、一个抽到了 C。

而是两边都证明:

真实 production 页面正在按照预期分组,而且 SPA 下一页以后不会重新随机。

没有为了验收而人工刷齐四组

Production 验收时,我没有为了证明 A、B、C、D 都能出现,而不断:

  • 新开标签页;
  • 删除 sessionStorage
  • 强制刷新;
  • 重复进入课程页。

这样做没有必要。

四组逻辑已经由自动化测试覆盖。

真实 production 浏览器验收只是确认:

正式环境真正运行的是已经测试过的这套实现。

实际结果已经有:

Plaintext
zh-CN → C
ja-JP → A

而且两边 SPA 下一页以后组别都保持稳定。

这已经能够完成 production 层面的确认。

更重要的是,这是一轮广告实验。

如果继续由我自己不断刷新页面、制造大量广告请求,反而会让自己的测试行为混入接下来真正想观察的自然流量。

所以从这里开始,我会停止主动刷实验组。

接下来真正需要看的,是 AdSense 自然流量数据

技术实现到这里已经基本结束。

后面真正有价值的,是等四个广告单元逐渐积累自然流量。

主要关注:

  • Impressions;
  • Impression RPM;
  • Estimated earnings;
  • 实际广告展示机会;
  • 不同广告单元的长期表现;
  • 数据是否随着样本增长逐渐形成稳定趋势。

这里最值得关注的其实不是单独某一个指标。

假设未来出现:

Plaintext
A 展示很多,但 RPM 较低

而:

Plaintext
C 展示更少,但 RPM 较高

那么真正需要比较的仍然是最终收益,而不是只看哪一组广告更容易出现。

D 组也非常重要。

它相当于继续保留当前 unrestricted Responsive 方案作为对照。

如果未来自然流量数据真的证明:

D 的展示数量明显低于 A/B/C,同时更高的单次价值又不足以弥补展示损失,

那么我才能比较有把握地认为:

此前人工测试中发现的问题,确实可能与广告位可用宽度有关。

反过来,如果 D 在真实自然流量中的表现并没有明显变差,那么也说明自己的人工测试并不能代表真实用户。

无论是哪一种结果,都比直接凭感觉恢复 620px 更有价值。

暂时不会根据一两天数据下结论

目前 A Tour of Go 本身的自然访问规模还不算特别大。

现在又进一步平均分成四组:

Plaintext
25% / 25% / 25% / 25%

所以每一组积累样本都会更慢。

刚开始几天,很可能出现某个广告单元只有几个 impressions,而另一个暂时更多的情况。

这种阶段没有必要马上判断:

Plaintext
336 最好

或者:

Plaintext
728 RPM 最高,所以 728 胜出

数据太少时,几个广告请求就可能造成非常大的百分比波动。

我更希望等四组都积累出一定规模的真实 impressions,再综合观察:

  • 展示数量;
  • RPM;
  • 收益;
  • 随着时间增长是否仍然保持相同趋势。

如果最后数据显示最佳区域可能落在:

Plaintext
468 ~ 728px

之间,那么后面甚至还可以考虑第二轮实验,再针对原来的:

Plaintext
620px

附近做更细的比较。

那时候再测试 600、620 或其他值,就比现在直接恢复 620px 有依据得多。

最后

这一次 ABCD 实验并不是凭空开始的。

它实际上来自一段很具体的变化过程:

Plaintext
原来:
Responsive + max-width 620px

人工测试中经常出现较小的正方形广告

广告出现非常频繁

觉得桌面横向空间没有充分利用

希望获得更宽、可能价值更高的长方形广告

删除 max-width 620px

人工测试中实际广告出现频率明显下降

但自己的测试不能作为正式结论

不直接恢复 620px

建立 ABCD 自然流量实验

当前四组正式配置为:

Plaintext
A:Responsive + max-width 336px
B:Responsive + max-width 468px
C:Responsive + max-width 728px
D:Responsive + unrestricted

自然流量:

Plaintext
25% / 25% / 25% / 25%

中文站和日语站都已经正式运行这套实验。

这次真正想回答的问题并不是:

哪一种广告看起来最大。

甚至也不仅仅是:

哪一种广告最容易填充。

而是:

在课程页面这种特殊布局下,什么样的 Responsive 广告可用宽度,最终能够在展示数量、广告价值和用户体验之间取得更好的平衡。

接下来暂时不再修改广告宽度,也不再人为刷测试请求。

剩下的问题,交给真实自然流量来回答。

停用 Adsterra Native Banner 6 天后:异常跳转消失,但浏览器安全警告仍在

WordPress 网站维护、性能优化与博客运营咨询

本站已持续运营超过 10 年,累计发布 1000+ 篇原创技术文章,长期实践 WordPress 网站建设、CDN / Cloudflare 配置、缓存优化、Google SEO、广告变现和多语言网站运营。

如果你的 WordPress 网站遇到访问慢、缓存异常、插件冲突、广告不显示、SEO 基础结构混乱、CDN 配置不确定等问题,可以联系我做一次远程技术排查。

适合以下用户:
✅ 个人博客站长
✅ WordPress 网站运营者
✅ 独立开发者与内容创作者
✅ SaaS 产品官网运营团队
✅ 希望优化网站速度与稳定性的站点

服务内容:
✅ WordPress 速度优化
✅ Cloudflare / CDN / 缓存配置排查
✅ 插件冲突与页面异常排查
✅ AdSense 广告显示问题排查
✅ SEO 基础结构检查
✅ 博客运营与商业化咨询

如需了解方案或交流相关问题,请直接联系我,并注明:WordPress 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com