前言

域名每年要钱, 服务器(如果是静态托管)也要钱, 有人会问: 个人博客靠什么覆盖成本?

常见的路径有三条:

  1. 流量主 —— 最常见, 靠展示广告
  2. 联盟推广 —— 靠推广产品拿佣金
  3. 知识付费/赞助 —— 靠内容本身

这篇先写最实际的: 展示广告怎么接。同时也会说清楚收益的现实预期 —— 不吹数字,免得你按错误的期望去规划。

先算一笔账

假设你的硬成本是:

  • 域名: 95 元/年
  • 服务器/CDN: 静态托管可以是 0, 用云服务器约 100-300 元/年
  • 合计约 200-400 元/年, 折合 每天 0.5-1.1 元

那么问题变成: 需要多少流量才能覆盖?

AdSense 的收益量级

AdSense 的收益和 CPM(每千次展示收益) 直接相关, 而 CPM 差异极大:

地区 CPM(美元/千次) 说明
美国、加拿大、西欧 10 - 30 最高, 竞争激烈
日本、韩国、新加坡 8 - 20 较高
港澳台 5 - 15 中上
中国大陆 1 - 4 受 AdSense 在中国大陆的投放限制影响
东南亚、南亚 0.3 - 1.5 最低

再叠加一个关键指标: RPM(每千次页面浏览的实际收益), 因为不是每个访客都会看到广告(要看展示率和点击率)。

RPM 通常只有 CPM 的 1/5 到 1/10。 举例,CPM 假设 20 美元, RPM 大概 2-4 美元。

需要多少流量

按国内流量、RPM 约 0.3 美元(约 2 元人民币)算:

日均 PV 月 RPM 收入 覆盖 300 元/年
100 6 元 需要 50 个月
500 30 元 需要 10 个月
1000 60 元 需要 5 个月
5000 300 元 需要 1 个月

结论很清楚: 靠 AdSense 覆盖成本, 需要日均几百到一两千 PV。 这不是个小数目。

如果你的站点是国内技术博客, 走百度联盟(百度的 RPM 对国内流量给得相对合理)会比 AdSense 稍好一些, 但量级是一样的。

顺便一提: 我自己的站点还挂了又拍云的联盟推广链接(CDN 和云存储), 这种”顺带推荐”的转化率不高, 但成本是零, 可以作为补充。

AdSense 接入流程

第一步: 申请账号

地址: https://www.google.com/adsense/

需要准备:

  • 站点必须已经上线, 域名可访问
  • 站点内容要够, 一般要求 20-30 篇有实质内容的文章
  • 一个 Google 账号
  • 收款信息(国内常见是招商银行/中国银行的双币账户, 或电汇)

第二步: 验证域名

在 AdSense 后台添加站点, 填写:

  • 网站地址: https://zsyyblog.com
  • 流量来源: 填”您在博客中撰写的内容”这类

然后它会给你一段验证代码, 放到网站 <head> 里。

Hexo 里怎么放? 两种方式, 选一种就行:

方式一(推荐): 用 Butterfly 内置的 google_adsense 配置

Butterfly 主题本身就预留了 AdSense 的加载位置(layout/includes/head/google_adsense.pug), 直接在 _config.butterfly.yml 里填发布商 ID 即可, 不用手写代码:

1
2
3
google_adsense:
enable: true
client: ca-pub-你的发布商ID

主题会自动把脚本注入到 <head>。

方式二: 手动用 inject 注入

如果不想用内置配置(比如想同时接多个广告平台), 自己注入:

1
2
3
4
inject:
head:
- |
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-你的发布商ID" crossorigin="anonymous"></script>

不要两个方式同时用, 脚本会被加载两次, 导致广告重复展示或报错。

第三步: 配广告位

验证通过后, 后台会生成多个广告位(代码形如):

1
2
3
4
5
6
7
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
data-ad-slot="YYYYYYYYYY"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

关键点:

  • data-ad-client —— 你的发布商 ID
  • data-ad-slot —— 广告位 ID(在后台创建广告单元时拿到)
  • data-ad-format="auto" —— 自适应尺寸, 强烈建议保留
  • data-full-width-responsive="true" —— 移动端适配

每创建一个广告单元, 就有一个新的 slot ID。 可以在同一个网站下建多个(比如”文章底部”、”侧边栏”、”首页顶部”), 分别配置不同内容。

第四步: 放到文章里

Butterfly 把广告分成两块配置, 别搞混。

4.1 全局开关: google_adsense

这块负责加载 AdSense 的 JS 脚本, 在 _config.butterfly.yml:

1
2
3
4
5
6
google_adsense:
enable: true
auto_ads: true
js: https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
client: ca-pub-你的发布商ID
enable_page_level_ads: true

字段说明:

字段 说明
enable 总开关, 填了 client 记得打开
auto_ads 开启自动广告, 由 Google 自动决定广告位置
js 脚本地址, 一般不用改
client 你的发布商 ID
enable_page_level_ads 页面级自动广告

auto_ads: true 是最省事的方式。 Google 的自动广告会自己挑位置, 新手直接用这个, 不用手动插代码。

但自动广告的样式不可控, 有时位置很怪。想精细控制就关掉它, 用下面的手动广告位。

4.2 手动广告位: ad

这块是你自己贴的广告代码, 主题会把它插到指定位置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ad:
index: | # 首页, 每三篇文章插一次
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-你的ID"
data-ad-slot="你的广告位ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

aside: | # 侧边栏
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-你的ID"
data-ad-slot="你的侧边栏广告位ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

post: | # 文章页, 上一篇/下一篇之前
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-你的ID"
data-ad-slot="你的文章页广告位ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

注意这三个位置的准确含义(看主题模板源码最准):

位置 实际插入点
ad.index 首页文章列表, 每 3 篇插一次
ad.aside 侧边栏
ad.post 文章页, 上一篇/下一篇导航之前

不确定的话直接翻模板看:

1
2
3
4
5
# 文章页广告插在哪
grep -B3 -A5 "ad.post" themes/butterfly/layout/post.pug

# 首页广告插在哪
grep -B3 -A5 "ad.index" themes/butterfly/layout/includes/mixins/indexPostUI.pug

踩坑提醒: ad 段下面的三个字段默认都是空的, 必须整段贴 HTML 才会生效。填了 enable: true 之类的主题并不支持, 贴上去会被当成广告 HTML 直接输出到页面上。

第五步: 手动插入自定义广告位

内置的三个位置不够用时(比如想放文章末尾), 用 inject 自己插:

1
2
3
4
5
6
7
8
9
10
11
12
inject:
bottom:
- |
<div style="margin:20px 0;">
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-你的ID"
data-ad-slot="你的广告位ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
</div>

注意: inject 只有 head 和 bottom 两个键, **没有 post-bottom**。上面这段是全站生效的, 如果只想要文章页有广告, 还是在 post.pug 里加更精准。

另外 inject 的内容是纯字符串(源码里 data.join('')), 不能在里面写模板变量。上面这段广告代码的 ID 是固定的, 所以没问题; 但如果你想动态取当前文章的 ID, 就得改主题模板。

广告放在哪里最合适

这不是随便放的, 位置直接决定点击率。

推荐位置

位置 效果 说明
文章末尾 最好 读者已经读完, 注意力集中
文章中段 好 打断阅读体验, 需谨慎
侧边栏 中 常年可见, 但位置固定易被忽略
首页顶部 中 首屏, 存在”点击诱饵”嫌疑
评论区上方 好 互动意愿强的位置
弹窗/浮层 短期高, 长期伤体验 不建议

一个重要原则

Google 对”误点”非常敏感。 如果广告做得像网站原生按钮, 用户以为是点别的东西, 点错了 —— 这算”无效点击”。

后果: AdSense 会警告, 严重时直接封号, 严重的会封整个 AdSense 账号(所有站点一起完)。

所以:

  • 广告要有明确的”广告”标识
  • 不要做”继续阅读”这种伪装成功能按钮的样式
  • 不要用会自动跳转的浮层广告
  • 不要自己点自己的广告

百度联盟接入

与 AdSense 的差异

方面 AdSense 百度联盟
结算 美元, 需绑国际账户 人民币, 绑国内银行卡
审核 相对宽松 相对严格
流量要求 需一定内容量 需备案(国内域名)
覆盖 全球 主要是百度联盟的推广范围
收益 国外流量高 国内流量相对合理

已备案的国内站点, 百度联盟往往比 AdSense 更实际。

配置流程

  1. 访问 https://union.baidu.com/ 注册
  2. 提交网站信息 + 备案号
  3. 等待审核(通常 1-3 天)
  4. 审核通过后创建广告位, 拿到推广位 ID
  5. 在页面里放推广代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div id="BAIDU_ADC_xxx" class="baidu_ad"></div>
<script>
var _HMT = _HMT || [];
(function(){
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?你的百度统计代码";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script>
(function(){
var i = document.createElement("script");
i.src = "https://cpro.baidu.com/cpro/ui.js?siteid=你的站点ID&callback=__cpro__&use=3600&referer=http://你的域名/";
...
})();
</script>

具体的推广代码从百度联盟后台直接复制, 不用手写。

被封号的几个雷区

这个话题值得单独说, 因为很多新手是”莫名其妙”被封的。

1. 点击率异常高

CTR(点击率)如果长期超过 10% 左右, 会被判定为无效点击。正常文章博客的 CTR 通常在 1-5%。

2. 误点设计

前面说过,这是最常见的原因。

3. 内容不足以申请

刚建站、没几篇文章就挂广告, 审核可能不通过; 或者通过后没有真实流量, 收益太低, 账号反而处于”低质”状态。

4. 流量来源不健康

买来的垃圾流量是最大的雷。 短期能刷出可观收益, 但被检测到后基本是永久封禁, 账号里的所有站点一起没。

5. 广告和内容不匹配

技术博客里放游戏广告、或者放高利贷类广告, 会被判定为”低质量内容变现”, 影响账号信誉。

6. 用多个账号规避

被封后开新号继续挂, 系统会通过设备、IP、支付账户关联识别, 结果是全部封禁。这是最不划算的”聪明做法”。

提升收益的实际手段

广告收益的天花板不高, 想提高只能从这几个方向:

提高 PV 而不是 CTR

CTR 提升空间有限(而且提太高有风险), 但流量增长是线性收益。

具体做法: 提升搜索排名(SEO)、做 RSS 分发(见 518 篇)、在技术社区分享。

提高 RPM 而不只是 PV

RPM 取决于访问者所在地区和广告类型。欧美访客的 RPM 是国内访客的 5-10 倍。

如果你的内容是中文技术教程, 目标读者天然在国内。想接高价值广告, 可以考虑:

  • 写英文版(用翻译工具 + 人工润色)
  • 面向海外华人的内容

混合变现

只靠展示广告太单薄, 可以叠加:

方式 难度 见效 说明
联盟推广 低 中 云服务/CDN/主机厂商, 按成交付费
赞助 中 低但单笔高 页脚赞助位, 适合有稳定粉丝的
付费内容 高 高 需要足够的内容深度和信任度
买断广告位 中 稳定 一次性卖断某个月的位置

对技术博客来说, 联盟推广其实比展示广告更划算 —— 因为它不打扰阅读, 成交佣金还比 RPM 高。接云服务、域名、主机这类推广, 和内容天然相关。

上线前的检查清单

准备提交审核前, 逐条确认:

  • 站点能正常访问, HTTPS 有效
  • 至少 20-30 篇有实质内容的文章
  • 没有空分类、空标签页
  • 移动端显示正常(现在大部分流量来自移动)
  • 广告位置不会误触
  • 隐私政策页面(欧美站点必备, AdSense 要求)
  • 备案号展示(国内备案要求)

隐私政策页面可以用 Butterfly 自带的页面功能建一个, 简单说明用了哪些 Cookie 和第三方服务即可。

小结

  1. 先想清楚收益预期 —— 覆盖域名费需要日均几百到一两千 PV, 别指望几百 IP 就能赚钱
  2. AdSense 适合有海外流量或英文内容的站, 百度联盟适合已备案的国内站
  3. 广告位置优先选文章末尾, 收益最好且不伤体验
  4. 千万别碰”无效点击” —— 那是封号的主要原因, 而且会连累所有关联站点
  5. 别买垃圾流量 —— 短期收益长期封号
  6. 展示广告之外, 联盟推广对技术博客更划算

最后一条我的体会尤其深: 技术博客的用户信任度是最值钱的资产。 为了几十块钱的展示收益, 把用户体验做烂, 是很不划算的买卖。联盟推广、原创内容、良好的阅读体验, 这些才是能长期做下去的路子。

参考链接: