最近,我一直在重新评估博客的广告变现方式。
在尝试万维广告、Media.net,并重新复盘百度联盟的历史数据之后,我逐渐意识到一个现实问题:
对于以中国大陆流量为主的独立技术博客来说,想找到一家明显优于 Google AdSense、支持中文内容、接受中小流量网站,并且广告体验还比较正常的平台,并不容易。
与其继续寻找一个不确定的新平台,不如先重新评估现有的 AdSense。
过去,我一直采用手动广告位:
- 首页使用固定广告位;
- 文章详情页在指定位置插入文章内广告;
- 通过 WPCode 管理广告代码;
- 尽量避免广告影响代码块和文章排版。
这种方式比较可控,但也有一个明显问题:
广告位置完全依赖人工设计,无法根据不同文章长度、屏幕尺寸和页面结构动态调整。
尤其是一些很长的技术文章,正文中可能只有一个手动广告位;而另一些页面,广告又未必处在最有价值的位置。
因此,这一次我决定做一个新的尝试:
停用现有手动广告位,仅保留 AdSense 全站基础代码,然后启用自动广告。
我的底线也比较明确:
- 广告可以自动插入文章详情页;
- 可以接受锚定广告和穿插广告;
- 可以接受相对积极的广告密度;
- 但广告不能插入代码块内部;
- 也不能严重破坏技术文章的阅读结构。
一、为什么这次愿意尝试自动广告
以前我对自动广告比较谨慎,主要担心以下问题:
- 广告数量失控;
- 广告插入代码块;
- 技术文章被切割得过于零碎;
- 移动端页面体验变差;
- 自动广告与已有手动广告重复展示。
但目前网站的实际情况也发生了变化。
一方面,网站已经积累了大量内容,页面结构非常复杂:
- Code Block Pro;
- SyntaxHighlighter;
- Gutenberg 原生代码块;
- 经典编辑器中的
<pre>和<code>; - 图片、列表、表格;
- 系列文章目录;
- 大量历史文章遗留格式。
想继续依靠人工,为每一种页面结构设计最优广告位置,时间成本越来越高。
另一方面,绝大部分访问都直接进入文章详情页。如果只在首页、侧边栏或文章末尾放广告,很多访客可能只产生一次很有限的广告展示。
所以,这次测试的目标不是“尽可能少放广告”,而是:
在不插入代码块的前提下,让 AdSense 尽可能充分利用文章详情页的广告库存。
二、第一步:停用所有手动广告位
我首先在 WPCode 中停用了所有手动广告代码。
手动广告代码通常包含下面这些结构:
<ins class="adsbygoogle"
data-ad-client="ca-pub-xxxxxxxxxxxxxxxx"
data-ad-slot="xxxxxxxxxx">
</ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
其中,data-ad-slot 对应某一个固定广告位。
停用这些代码后,WPCode 中只保留了一段 AdSense 全站基础脚本:
<script async
src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-xxxxxxxxxxxxxxxx"
crossorigin="anonymous">
</script>

这段代码的设置为:
- Code Type:HTML Snippet;
- Insert Method:Auto Insert;
- Location:Site Wide Header;
- 状态:Active。
它本身不是具体广告位,只负责在全站加载 AdSense 脚本,因此自动广告仍然需要保留它。
三、停用代码后,旧广告仍然出现在网页源代码中
停用手动广告代码后,我进入 AdSense 自动广告预览页面,发现页面底部仍然显示:
现有 AdSense 广告
进一步查看文章详情页的网页源代码,仍然能够搜索到旧广告位:
<ins class="adsbygoogle"
style="display:block; text-align:center;"
data-ad-layout="in-article"
data-ad-format="fluid"
data-ad-client="ca-pub-xxxxxxxxxxxxxxxx"
data-ad-slot="8627057919">
</ins>

由于在 WordPress 文章代码编辑器中搜索不到这个广告位 ID,可以确认:
广告代码并没有写入文章正文。
剩下最可能的原因是缓存。
我的网站同时使用:
- W3 Total Cache 页面缓存;
- W3TC Redis 对象缓存;
- EdgeOne 边缘缓存;
- 中文站与英文站分别使用不同域名。
因此,停用 WPCode 代码并不意味着所有历史 HTML 会立即消失。
四、清理中文站和英文站的服务器端缓存
为了排除 W3TC 页面缓存和对象缓存,我在服务器上统一清理了中文站和英文站:
cd /data/wwwroot/www.shuijingwanwq.com
all_ok=1
for host in \
"www.shuijingwanwq.com" \
"en.shuijingwanwq.com"
do
echo
echo "========== 清理 $host =========="
page_cache_dir="wp-content/cache/page_enhanced/$host"
echo "1. 清理对象缓存"
if /root/bin/w3tc-flush-host-object-cache "$host"; then
echo "对象缓存清理命令:成功"
else
echo "对象缓存清理命令:失败"
all_ok=0
fi
echo "2. 删除对象缓存操作后可能重新生成的页面缓存"
rm -rf -- "$page_cache_dir"
if [[ ! -e "$page_cache_dir" ]]; then
echo "页面缓存清理验证:通过"
else
echo "页面缓存清理验证:失败"
all_ok=0
fi
done
echo
if [[ "$all_ok" -eq 1 ]]; then
echo "www 与 en 的服务器端页面缓存、对象缓存均已清理。"
else
echo "存在清理异常,但当前 SSH 会话不会退出。"
fi
最终输出显示:
www 与 en 的服务器端页面缓存、对象缓存均已清理。

五、分别验证源站和 EdgeOne 公网响应
清理服务器端缓存后,我没有只依赖浏览器刷新,而是分别请求:
- 绕过 EdgeOne 的源站;
- 正常经过 EdgeOne 的公网地址。
测试文章为:
https://www.shuijingwanwq.com/2026/07/22/19885/
执行命令:
cd /data/wwwroot/www.shuijingwanwq.com
path='/2026/07/22/19885/'
slot='8627057919'
test_id="$(date +%s)"
echo "========== 1. 直接访问源站,绕过 EdgeOne =========="
curl -k -sS \
--resolve "www.shuijingwanwq.com:443:127.0.0.1" \
-H 'Cache-Control: no-cache' \
"https://www.shuijingwanwq.com${path}?swq_ad_test=${test_id}" \
| grep -n -C 3 -- "$slot" \
|| echo "源站未发现旧广告位:$slot"
echo
echo "========== 2. 通过公网访问,经过 EdgeOne =========="
curl -sS \
-H 'Cache-Control: no-cache' \
"https://www.shuijingwanwq.com${path}?swq_ad_test=${test_id}" \
| grep -n -C 3 -- "$slot" \
|| echo "公网页面未发现旧广告位:$slot"
结果为:
源站未发现旧广告位:8627057919
公网页面未发现旧广告位:8627057919
随后,在浏览器中使用一个新的随机参数查看网页源代码,也已经搜索不到旧广告位。
这说明:
- WPCode 已经停止插入手动广告;
- W3TC 页面缓存已更新;
- 源站 HTML 中没有手动广告;
- EdgeOne 公网响应中也没有手动广告。
六、首页同样没有手动广告,但预览仍显示“现有广告”
由于 AdSense 默认预览的是首页,而首页和文章详情页原本使用的广告位并不相同,所以还需要单独检查首页。
我分别保存了源站首页和公网首页:
cd /data/wwwroot/www.shuijingwanwq.com
origin_file="/tmp/swq-home-origin.html"
public_file="/tmp/swq-home-public.html"
curl -k -sS \
--resolve "www.shuijingwanwq.com:443:127.0.0.1" \
-H 'Cache-Control: no-cache' \
"https://www.shuijingwanwq.com/" \
-o "$origin_file"
curl -sS \
"https://www.shuijingwanwq.com/" \
-o "$public_file"
for file in "$origin_file" "$public_file"
do
echo
echo "========== 检查:$file =========="
echo "--- data-ad-slot ---"
grep -oE 'data-ad-slot=["'\''][^"'\'']+["'\'']' "$file" \
| sort -u \
|| true
echo
echo "--- 手动广告单元相关行 ---"
grep -nE 'class=["'\''][^"'\'']*adsbygoogle|data-ad-slot=|data-ad-layout=|data-ad-format=' "$file" \
| head -n 40 \
|| true
done
结果显示:
- 源站首页没有
data-ad-slot; - 公网首页没有
data-ad-slot; - 两边都没有
<ins class="adsbygoogle">; - 也没有
data-ad-layout和data-ad-format。
也就是说,实际网站已经没有手动广告。
但是,AdSense 预览界面中仍然保留着“现有 AdSense 广告”的占位。

这可能与以下原因有关:
- AdSense 预览缓存;
- Google 抓取节点与当前测试节点不同;
- EdgeOne 不同边缘节点的缓存更新时间不同;
- AdSense 对页面历史广告结构的识别存在延迟。
由于源站、公网和浏览器的新请求都已经确认没有手动广告,我最终决定不再继续消耗时间排查这个预览提示。
七、正式开启自动广告总开关
完成手动广告清理后,我打开了 AdSense 的自动广告总开关。

开启后,当前账号提供了以下三类广告格式:
- 意向驱动的广告格式;
- 重叠式广告格式;
- 页内广告格式。
接下来,需要逐项配置,而不是直接使用默认设置。
八、关闭意向驱动的广告格式
意向驱动广告会主动修改网页现有内容,包括:
- 在现有文字中插入广告意向链接;
- 在页面上放置广告意向锚点;
- 在段落末尾添加广告意向条状标签。

对于普通资讯网站,这种方式可能可以增加广告互动。
但技术博客中包含大量:
- 技术术语;
- 产品名称;
- 插件名称;
- 命令;
- 路径;
- API 名称;
- 代码说明。
如果系统自动把这些内容变成广告链接,很容易干扰阅读,也可能使技术文章看起来不够专业。
因此,我关闭了整个意向驱动广告格式:
意向驱动的广告格式:0/1
九、重叠式广告:底部锚定广告与高频穿插广告
重叠式广告不会插入正文,而是覆盖在页面内容上方,因此对代码块结构影响较小。
这一部分包含:
- 锚定广告;
- 侧边栏广告;
- 穿插广告。

1. 锚定广告
我保留了锚定广告,并设置为:
- 允许使用动态锚定广告;
- 允许在宽度大于 1000 像素的桌面屏幕展示;
- 广告位置仅限底部。
之所以选择底部,是因为顶部广告容易靠近:
- 网站标题;
- 搜索框;
- 语言切换;
- 导航菜单。
底部锚定广告相对不容易破坏页面结构,也不会插入代码块。
2. 侧边栏广告
侧边栏广告暂时关闭。
虽然我的网站桌面端流量占比很高,但页面本身已经有侧边栏、小工具和内容导航。首次测试先不开启,可以避免页面左右区域过于拥挤。
3. 穿插广告
我决定开启穿插广告。
我的考虑是:
如果用户愿意点击网站中的另一个链接,说明他有继续阅读其他文章的意愿。在页面切换过程中展示一次穿插广告,相比直接打断当前文章正文,更容易接受。
穿插广告最终配置为:
- 穿插广告:开启;
- 展示频次:1 分钟;
- 额外触发条件:关闭;
- 宽度大于 1000 像素的桌面屏幕:开启。

这里需要说明:
1 分钟并不代表用户每点击一个链接,就一定出现一次广告。
它表示同一用户两次穿插广告之间的最短间隔。最终是否展示,仍由 AdSense 根据广告库存、用户状态和页面导航情况决定。
我选择 1 分钟,是因为这次测试本身就是收益优先,不打算从过于保守的频次开始。
十、页内广告全部开启
页内广告是这次测试最重要的部分。
因为网站绝大多数流量都直接进入文章详情页。如果关闭页内广告,只保留锚定广告和穿插广告,很多只阅读一篇文章便离开的访客,可能只产生一次锚定广告展示,甚至没有穿插广告。
这样很可能还不如原来的手动文章内广告。
因此,我开启了全部三种页内格式:
- 横幅广告;
- 多重广告;
- 相关搜索。

横幅广告
横幅广告是文章正文中最主要的自动广告格式。
它会根据页面主要内容寻找适合的广告位置,也是自动广告替代原手动文章内广告的核心。
多重广告
多重广告会以网格形式展示原生广告。
它比较适合出现在:
- 文章阅读结束附近;
- 系列目录之间;
- 长内容中的独立区域。
相关搜索
相关搜索主要支持英文页面。
中文站未必会展示,但英文站 en.shuijingwanwq.com 有机会增加新的广告入口,因此我也保留开启。
相关搜索不是简单按展示产生收入,而是引导用户进入相关搜索页面,再通过后续广告互动变现。
它更像英文站的增量补充,而不是主要广告形式。
十一、初始 200px 间距导致系列目录广告过密
最初,我将页内广告设置为:
- 页面广告数量上限:中高位置;
- 最小广告间距:200px;
- 在文章页面寻找更多广告位置:开启;
- 允许 Google 优化现有广告:关闭。

为了验证代码块和历史文章结构,我选择了一篇 2018 年的长文章:
https://www.shuijingwanwq.com/2018/04/13/2597/
这篇文章包含:
- 一个包含 13 个标题的系列目录;
- 多个长代码块;
- 图片;
- 大量连续技术步骤;
- 历史文章格式。
在桌面端预览中,整篇文章预计出现 14 个页内广告。
代码块内部没有被插入广告,这一点非常理想。

但是,系列标题列表中的广告密度明显过高。
13 个系列标题中,系统预估插入了 7 个广告,几乎每隔一两个标题就出现一个广告。

十二、逐个排除区域并不现实
AdSense 预览支持点击广告旁边的禁止图标,将某个区域加入“排除的区域”。
但实际操作后发现,每两个系列标题之间都会被识别成一个独立区域。

如果逐一排除,需要维护大量区域:
- 区域 1;
- 区域 2;
- 区域 3;
- ……
- 区域 10。
而且这种规则可能只适用于布局相似的页面。
网站中存在大量不同主题、不同编辑器、不同历史结构的文章。依靠逐个区域排除,并不是一个可维护的长期方案。
因此,我放弃逐一排除,改为调整全局最小广告间距。
十三、将最小广告间距调整为 530px
经过多次预览,我最终把最小广告间距从:
200px
提高到:
530px

调整后的桌面端效果为:
- 整篇文章页内广告从 14 个减少到 10 个;
- 13 个系列标题中出现 3 个广告;
- 大约每 4~5 个标题出现一次广告;
- 广告没有进入代码块内部;
- 正文中仍然保留了足够的广告展示机会。

这个结果基本符合预期:
不再过度拥挤,但也没有为了安全而把文章详情页广告全部关闭。
530px 并不是一个适用于所有网站的通用答案,它只是根据我的页面结构和预览结果得到的折中值。
十四、移动端广告比桌面端更密,但暂时接受
切换到移动端预览后,同一篇文章预计出现 15 个页内广告,比桌面端的 10 个更多。

从截图来看,移动端广告密度确实偏高。
不过,我的网站绝大多数访客来自桌面端,移动端占比较低。同时,这是一篇非常长的历史文章,15 个广告是整页候选总量,并不是首屏同时显示。
更重要的是:
- 广告没有插入代码块;
- 没有遮挡正文;
- 页面结构没有明显错乱;
- 锚定广告位于底部;
- 穿插广告只在页面跳转时触发。
因此,我暂时接受这一移动端表现,先通过实际运行数据观察,而不是继续为了少量移动流量降低全站广告密度。
十五、最终自动广告配置
本次正式应用的配置如下。
自动广告总开关
开启
意向驱动的广告格式
关闭
重叠式广告格式
锚定广告:
- 开启;
- 动态锚定广告开启;
- 桌面宽屏展示开启;
- 仅限底部。
侧边栏广告:
关闭
穿插广告:
- 开启;
- 频次 1 分钟;
- 额外触发条件关闭;
- 桌面宽屏展示开启。
页内广告格式
- 横幅广告:开启;
- 多重广告:开启;
- 相关搜索:开启。
高级设置:
- 页面广告数量上限:中高;
- 最小广告间距:530px;
- 在文章页面寻找更多广告展示位置:开启;
- 允许 Google 优化现有广告:关闭。
十六、为什么选择“立即应用”,而不是运行实验
点击“应用到网站”后,AdSense 提供了两个选项:
- 立即应用;
- 首先运行实验。
实验模式会拿出网站 50% 的流量,最长运行 90 天,用来对比新旧设置。

但我的手动广告代码已经全部停用。
如果运行实验,旧设置组的一部分流量可能没有正常的手动广告,而新设置组才启用自动广告。这样得到的结果并不是公平比较:
- 一组是自动广告;
- 另一组可能几乎没有广告。
因此,我选择:
立即应用
然后点击保存。
图18:选择立即应用,将自动广告配置直接应用到全站。
这次不需要再次修改 WPCode,也不需要因为 AdSense 配置变化而清理 W3TC 或 EdgeOne 缓存。
页面中的基础脚本已经存在,自动广告配置会由 AdSense 动态加载。
十七、这次测试真正解决的是什么
这次调整并不只是“把手动广告换成自动广告”。
它解决了几个长期问题。
1. 不再人工维护多个固定广告位
首页、文章页和不同历史模板不再需要分别维护不同的 data-ad-slot。
2. 长文章可以获得更多广告机会
系统可以根据文章长度和结构自动寻找位置,而不是所有文章都只有一个固定广告。
3. 代码块风险得到初步验证
至少在这篇包含长代码块的历史文章中,广告没有插入代码块内部。
这证明 AdSense 对当前代码结构具备一定识别能力。
4. 通过间距解决局部广告过密
与其维护十几个排除区域,不如使用 530px 全局最小间距控制整体密度,维护成本更低。
5. 广告形式更加多样
目前同时具备:
- 文章页横幅广告;
- 多重广告;
- 英文站相关搜索;
- 底部锚定广告;
- 页面切换时的穿插广告。
这比过去单一的手动文章内广告更有测试价值。
十八、仍然需要继续观察的问题
自动广告正式启用后,并不代表工作已经完成。
接下来至少需要观察以下几项。
1. 是否存在其他历史代码格式被错误插入广告
当前测试页面没有出现代码块内广告,但网站还有:
- SyntaxHighlighter;
- 原生 Gutenberg Code;
- Code Block Pro;
- 经典
<pre>; - 其他旧版代码插件。
需要继续抽查不同历史文章。
2. 实际广告数量是否和预览一致
预览展示的是候选广告位置,真实访问中不一定每个位置都会填充广告。
最终数量会受到:
- 广告库存;
- 用户地区;
- 设备;
- 页面内容;
- 广告屏蔽;
- AdSense 实时策略;
等因素影响。
3. 穿插广告是否过于频繁
虽然频次设置为 1 分钟,但实际是否每次站内跳转都出现,需要通过真实访问观察。
如果明显影响回访或连续阅读,再调整为 5 分钟或更长。
4. 移动端体验是否可以接受
移动端预览中的广告数量较高。
虽然移动流量占比较低,但仍需要检查:
- 是否遮挡正文;
- 是否导致布局跳动;
- 是否影响代码横向滚动;
- 是否出现过多连续广告。
5. 收益是否真的高于手动广告
这是最终最重要的问题。
本文不公开具体 AdSense 收入数据,但后续会通过运行一段时间后的数据,对比:
- 页面 RPM;
- 广告展示次数;
- 广告请求覆盖;
- 锚定广告表现;
- 穿插广告表现;
- 中文站与英文站差异;
- 自动广告启用前后的整体变化。
十九、阶段性结论
经过这次调整,我最终没有放弃 Google AdSense,也没有立即切换到更加激进的第三方自动广告平台。
相反,我先把 AdSense 本身改造成了一套自动化广告方案。
整个过程包括:
- 停用所有手动广告位;
- 保留全站 AdSense 基础脚本;
- 清理 W3TC 页面缓存和对象缓存;
- 验证源站和 EdgeOne 已无旧广告;
- 开启自动广告;
- 关闭意向驱动广告;
- 启用底部锚定广告;
- 启用 1 分钟频次的穿插广告;
- 开启全部页内广告格式;
- 验证广告没有进入代码块;
- 将最小广告间距从 200px 调整为 530px;
- 选择立即应用到网站。
最终方案可以概括为:
广告密度偏积极,但尽量不修改正文语义,也不插入代码块内部。
这并不是最终答案,只是一轮新的实际测试。
下一步,需要等待真实数据和真实访客体验来判断:
自动广告究竟能否在不明显伤害技术文章阅读体验的前提下,比过去的手动广告产生更好的结果。
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


发表回复