广告变现接入:AdSense、Adsterra 和其他联盟

目录

做工具站和内容站,迟早会有人问:能不能挂点广告?这篇把常见的几家广告联盟放在一起比:各家门槛多少、给什么样的广告、结算方式、对体验和 SEO 的影响,以及从注册到收到第一笔钱要怎么走。

文中的门槛和费率 2026 年变了好几次(Ezoic、Journey、Raptive 都改过),网上很多标着「2026」的文章用的还是旧规则。下面的数字以各家官方页面为准,截至 2026 年 10 月。申请前请再看一遍官网。


一、先说结论

  • 新站先申请 AdSense。 没有流量门槛,主要看内容。没通过就先补内容,再重新申请
  • Adsterra 和 Monetag 是兜底选项,不是升级选项。 审核快、什么流量都收,但钱主要来自 Popunder、Social Bar 这些强打扰的形式,广告质量也低
  • 做正经产品的站不要用 Popunder。 Chrome 会按 Better Ads Standards 对违规站点过滤全站广告,Google 的广告也一样被过滤。用户还会把弹窗算到你的品牌头上
  • 开发者受众优先考虑 EthicalAds 或 Carbon。 每页只有一个小广告位,不伤调性,但要申请,流量也要够
  • 流量起来以后换高级联盟。 Journey by Mediavine 从 2026 年 1 月起只要每月 1,000 个 tier 1 session;Raptive 要每月 2.5 万 PV。Ezoic 从 2026 年 2 月起要求每月 25 万活跃用户,小站已经进不去了
  • 核心功能页和付费转化页不放广告。 广告只放在博客、教程、SEO 落地页上。广告挣的钱,通常抵不上转化率掉下去的损失

二、各家对比

平台 准入门槛 主要广告形式 分成 / 收益 结算 适合
Google AdSense 没有流量门槛,审内容质量和政策 展示、自动广告、信息流、文章内 不公开分成;欧美流量单价较高 美元账户满 $100 月结;收入到 $10 时邮寄 PIN 验证地址 几乎所有内容站、工具站的第一选择
Adsterra 没有流量门槛,审核快 Popunder、Social Bar、Interstitial、Native Banner、Display Banner、Direct Link 不公开分成;CPM 差别很大,看 GEO 和形式 NET-15,每月两次;Paxum / WebMoney 起付 $5,PayPal $25,USDT $100,电汇 $1,000 被 AdSense 拒的新站,非 tier 1 流量为主的站
Monetag(PropellerAds 的发布商业务) 没有流量门槛,24 小时内审核 Popunder、Push、In-Page Push、Vignette、SmartLink;MultiTag 一段代码混合多种形式 官方说法不一致(80% 或 90%+) 每周结算,官方写起付 $5 和 Adsterra 同类,可以拿来比价
Media.net(Yahoo / Bing 上下文广告) 要申请,主要收英语、tier 1 流量,没有公开的流量门槛 上下文广告、展示广告 不公开 第三方资料说 $100 起付、NET-30,可能已变 美英流量占比高的内容站,作为 AdSense 的补充
Ezoic 每月 25 万活跃用户(2026-02-19 起);小站只能申请 Incubator,每月选 20 个 多家竞价、AI 排广告位 收益比 AdSense 高,但页面变重 — 已经有规模的站
Journey by Mediavine 每月 1,000 个 tier 1 session(2026-01-15 起,以前是 1 万);Grow 插件跑满 30 天 高级程序化广告 发布商拿 70%;12 个月广告收入满 $5,000 自动升级到 Mediavine 正式会员 — 欧美读者为主的内容站,门槛最低的高级联盟
Mediavine 正式会员 年广告收入 $5,000(以前是 5 万 session/月) 同上 更高分成 — 同上
Raptive(原 AdThrive) 每月 2.5 万 PV(2025-10-16 起,以前是 10 万);2.5 万到 10 万 PV 的站要 50% 流量来自美、英、加、澳、新,域名满 6 个月 高级程序化广告 发布商拿 75%,NET-45 — 欧美流量的长文内容站
EthicalAds 开发者站,大约每月 5 万 PV(非硬性) 每页一个文字加图片的广告,不追踪用户 发布商拿 70%;北美和西欧流量过半时 CPM 约 $2.25–2.75 月结,满 $50;PayPal、GitHub Sponsors、Open Collective、银行转账 开发者工具、文档站、开源项目
Carbon Ads(BuySellAds 运营) 邀请制,看受众匹配度、PV、站点是否活跃 每页一个小型原生广告位,要求独占 不公开 PayPal 月结 设计、开发、SaaS 受众的站

几个容易搞混的点:

  • CPM 和 RPM 不是一个东西。 CPM 是每千次广告展示的收入,RPM 是每千次页面浏览的收入。一个页面放三个广告位,CPM 不变,RPM 会涨。比较不同平台时看 RPM,它能直接和你的 PV 对上
  • Adsterra 公布的高 CPM 是特定组合下的数字。 比如德国、Windows、社交流量、Popunder,CPM 二三十美元。第三方实测 tier 1 Popunder 大约 $1.5–12,Banner 大约 $0.5–2.5。有一个巴西汽车站跑 Native Banner,第一个月 127 万次展示,实际 CPM 只有 $0.57,比它的费率表低
  • Ezoic「不限流量」的说法已经过期。 2021 年 6 月到 2026 年 2 月确实不限,现在要 25 万月活。2026-02-19 之前接入的老站沿用旧规则,但如果拆掉 Ezoic 超过 7 天,就会失去这个资格

三、Adsterra 和 AdSense 的区别

AdSense Adsterra
审核 审内容。新站、内容少的站常被拒,理由多是 low value content 基本当天通过
广告来源 Google Ads 的广告主,品牌广告多 联盟营销、工具、VPN、博彩、下载类较多,质量参差不齐
主要赚钱的形式 展示广告、自动广告 Popunder 和 Social Bar 单价最高;Banner 和 Native 便宜
对体验的影响 正常位置放置就影响不大;自动广告要控制密度 Popunder 会弹新标签页,Social Bar 像系统通知,用户感知很强
对 SEO 的影响 主要是 LCP 和 CLS(广告位没有预留高度时会挤动页面) 除了性能,还有 Chrome 过滤广告和用户跳出的风险
结算 满 $100,月结,电汇 起付线低,每月两次,支持 PayPal、Paxum、USDT
中国个人能不能用 能,填 W-8BEN,电汇到国内银行卡 能,PayPal 或 USDT 比较常见

能不能一起用? 能。AdSense 不要求独占,但有两条要注意:

  1. 其他广告不能长得像 Google 广告,也不能和 Google 广告位挤在一起
  2. 页面不能有干扰性的弹窗和误导性的广告。Popunder、伪装成系统通知的广告、关不掉的弹窗,都可能同时违反 AdSense 政策和 Chrome 的规则

所以两家一起用时,Adsterra 只用 Native Banner 和 Display Banner。

Chrome 的广告过滤

很多人不知道的一条:Chrome 从 2018 年起会按 Coalition for Better Ads 的标准检查网站。弹窗广告、带声音的自动播放视频、开屏倒计时广告、大面积的粘性广告,都在违规清单里。

流程是这样的:Google 抽样检查,结果显示在 Search Console 的 Ad Experience Report 里;被判不合格的站有 30 天整改期,过了期限 Chrome 会过滤这个站的所有广告,不只是违规的那种。另有一份 Abusive Experiences Report,专门查伪装成播放按钮的链接、假的系统警告、关不掉的关闭按钮、自动跳转到广告。这些问题同样会导致全站广告被过滤。

2026 年 1 月,联盟发布了九年来第一次实质性的修订,违规清单变长了,也更看重广告密度。接了 Popunder 类广告以后,每周去 GSC 看一下这两份报告。


四、怎么选

按阶段来:

阶段 推荐做法
刚上线,内容不到 20 篇 先不挂广告。把时间花在内容和收录上(见 SEO 落地)
有二三十篇原创内容,有隐私政策、关于、联系页 申请 AdSense
AdSense 被拒 补内容,过一两个月再申请。急着要收入的话,先在博客页上挂 Adsterra 的 Native Banner 过渡
开发者受众,月 PV 几万 申请 EthicalAds 或 Carbon,替换掉博客和文档页上的其他广告
每月 1,000 个以上 tier 1 session 申请 Journey by Mediavine
每月 2.5 万 PV 以上,欧美流量过半 也可以申请 Raptive,和 Journey 比一下 RPM

几条硬规则:

  • 工具本身的使用页面不放广告,至少不放会遮挡操作的广告
  • 订阅、价格、注册页面不放广告
  • Popunder 只适合纯流量站,比如下载站、影视站,这类站不在乎品牌。产品站别用
  • EthicalAds 要求是页面上唯一的广告,Carbon 也要求独占。想混用的话按页面或按访客分流,不要在同一页上放两家

五、接入流程

1. Google AdSense

上线前准备

  • 至少二三十篇原创、有实际内容的文章或页面
  • 隐私政策页(要写明使用 Cookie 和第三方广告)、关于页、联系页
  • 导航清楚,没有空页面、「建设中」页面
  • 站点能被 Google 正常抓取(先接好 GSC,见 GSC 与 Bing 的接入操作)

步骤

  1. 用 Google 账号注册 adsense.google.com,添加网站
  2. 把 AdSense 给的代码放进全站的 <head>
  3. 在网站根目录放 ads.txt,内容只有一行,把 pub- 后面换成你自己的发布商 ID:
    google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0
    上线后用 curl https://你的域名/ads.txt 确认能打开
  4. 设置欧洲同意弹窗:从 2024 年 1 月 16 日起(瑞士从 2024 年 7 月 31 日起),给欧洲经济区、英国、瑞士用户展示个性化广告,必须使用 Google 认证、接入 IAB TCF 的 CMP。普通的 Cookie 横幅不算。最省事的办法是用 AdSense 后台「隐私和消息」里自带的那个
  5. 在后台点「请求审核」,一般几天到几周出结果
  6. 审核通过后,选自动广告,或者自己建广告单元放到指定位置。新站建议先用自动广告跑两周,再根据数据换成手动广告位
  7. 填税务信息(中国个人填 W-8BEN),收入到 $10 时会收到邮寄的 PIN 码。PIN 码要在 4 个月内输入,输错 3 次或者超时都会停止展示广告
  8. 绑定银行账户,美元账户满 $100 自动付款

Astro 接入

---
// src/layouts/BaseLayout.astro
const ADSENSE_CLIENT = 'ca-pub-0000000000000000'
---
<html>
  <head>
    <script
      async
      src={`https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=${ADSENSE_CLIENT}`}
      crossorigin="anonymous"
    ></script>
  </head>
  <body><slot /></body>
</html>

手动广告位:

---
// src/components/AdUnit.astro
const { slot } = Astro.props
---
<ins
  class="adsbygoogle"
  style="display:block;min-height:280px"
  data-ad-client="ca-pub-0000000000000000"
  data-ad-slot={slot}
  data-ad-format="auto"
  data-full-width-responsive="true"
></ins>
<script is:inline>(adsbygoogle = window.adsbygoogle || []).push({})</script>

min-height 是为了给广告预留位置。不预留的话,广告加载出来时会把正文往下挤,CLS 变差。

Next.js 接入

// app/layout.tsx
import Script from 'next/script'

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html>
      <head>
        <Script
          async
          src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0000000000000000"
          crossOrigin="anonymous"
          strategy="afterInteractive"
        />
      </head>
      <body>{children}</body>
    </html>
  )
}
// components/AdUnit.tsx
'use client'
import { useEffect } from 'react'
import { usePathname } from 'next/navigation'

export function AdUnit({ slot }: { slot: string }) {
  const pathname = usePathname()
  useEffect(() => {
    try {
      ;((window as any).adsbygoogle = (window as any).adsbygoogle || []).push({})
    } catch {}
  }, [pathname])

  return (
    <ins
      key={pathname}
      className="adsbygoogle"
      style={{ display: 'block', minHeight: 280 }}
      data-ad-client="ca-pub-0000000000000000"
      data-ad-slot={slot}
      data-ad-format="auto"
      data-full-width-responsive="true"
    />
  )
}

SPA 切换路由时页面不会重新加载,广告位要用 key 重新挂载,然后再 push 一次,不然换页以后广告是空的。

2. Adsterra

  1. 打开 adsterra.com,注册时选 Publisher
  2. 在后台的 Websites 里点 Add Website:填域名,选网站分类,选广告形式。可以只选 Native Banner 和 Banner
  3. 审核一般几分钟到 24 小时
  4. 审核通过后,在对应广告位上点 Get Code 拿到代码:
    • Native Banner:一段 <script> 加一个 <div id="container-…">,放在文章中间或末尾
    • Display Banner(728×90、300×250、320×50 等):一段 script,放在固定的广告位上
    • Social Bar、Popunder:一段 script,放在 </body> 前面(产品站不建议用)
  5. 把代码放到网站上。SPA 同样要在换路由时重新挂载
  6. 在 Statistics 里按广告位、国家、设备看展示量和 CPM
  7. 在 Payments 里填收款方式,完成 KYC。每月 1–15 日的收入在下个月 1 日左右付款,16 日到月底的收入在下个月 16 日左右付款,不用手动申请

Astro 接入 Native Banner

---
// src/components/AdsterraNative.astro
// 下面两个值换成后台 Get Code 给的
const src = '//pl00000000.example.com/xxxxxxxx/invoke.js'
const containerId = 'container-xxxxxxxx'
---
<div style="min-height:250px">
  <script async data-cfasync="false" src={src}></script>
  <div id={containerId}></div>
</div>

Next.js 接入 Native Banner

'use client'
import Script from 'next/script'
import { usePathname } from 'next/navigation'

export function AdsterraNative() {
  const pathname = usePathname()
  return (
    <div key={pathname} style={{ minHeight: 250 }}>
      <Script
        id={`adsterra-${pathname}`}
        async
        data-cfasync="false"
        src="//pl00000000.example.com/xxxxxxxx/invoke.js"
        strategy="lazyOnload"
      />
      <div id="container-xxxxxxxx" />
    </div>
  )
}

3. EthicalAds

  1. 在 ethicalads.io 提交申请,写清楚站点的受众和月 PV
  2. 通过后在后台拿到 publisher ID
  3. 接入:
    <script async src="https://media.ethicalads.io/media/client/ethicalads.min.js"></script>
    <div data-ea-publisher="your-publisher-id" data-ea-type="image"></div>
  4. 广告位放在正文的上方、侧边或下方,不要插在正文中间
  5. 月结,满 $50 付款

Carbon Ads 流程类似:在 carbonads.net/join 提交站点,等邀请,通过后拿到一段 script。

4. Journey 和 Raptive

这两家都要先装它们的脚本或插件,用来核对流量:

  • Journey:先装 Grow(Mediavine 的插件),跑满 30 天,在这 30 天里攒够 1,000 个来自美、英、加、澳的 session,然后申请
  • Raptive:要连 Google Analytics 核对流量,域名至少满 6 个月

通过后,它们会给你一份完整的 ads.txt(几百行),替换掉原来的;然后接入它们的广告脚本,原来的 AdSense 代码要删掉。广告位一般由对方帮你调。


六、收入怎么算

1. 后台的几列是什么意思

Adsterra 的统计表默认是这几列(AdSense 的叫法略有不同,对应关系在右边):

Adsterra 含义 公式 AdSense 里对应的
Impressions 广告展示了几次 — 展示次数
Clicks 广告被点了几次 — 点击次数
CTR 点击率 点击 ÷ 展示 展示点击率
CPM 平均每 1,000 次展示挣多少钱。这是事后算出来的平均值(也叫 eCPM),不是事先约定的单价。按点击计费的广告也会折算进来 收入 ÷ 展示 × 1000 展示 RPM
Revenue 收入 展示 × CPM ÷ 1000 估算收入

后台没有、但要自己算的几个数:

指标 公式 用来干什么
页面 RPM 收入 ÷ 页面浏览量(PV)× 1000 每千次浏览挣多少。比较不同平台、不同版位就看它,因为它直接和你的流量挂钩
每页展示数 展示 ÷ PV 一个页面平均展示几次广告。≈ 广告位数 × 填充率
填充率 实际展示 ÷ 广告请求 广告位请求了广告,但没有广告主出价,就是没填上。新站、小语种、低价值地区填充率低
CPC 收入 ÷ 点击 每次点击值多少,只做参考

几个数之间的关系:

收入 = 展示 × CPM ÷ 1000
     = PV × 每页展示数 × CPM ÷ 1000

页面 RPM = 每页展示数 × CPM

所以想多挣钱,只有三个方向:更多 PV、每页更多展示(多放广告位,但伤体验)、更高的 CPM(更多 tier 1 访客、更好的广告位)。

2. 举例:为什么有展示,收入却是 $0

新接的广告位,后台经常显示成这样:

Impressions Clicks CTR CPM Revenue
5 0 0% $0.002 $0

算一下:

收入 = 5 × $0.002 ÷ 1000 = $0.00001

只有十万分之一美元,后台按分显示,四舍五入就是 $0。不是没计费,是金额太小显示不出来。

CPM 只有 $0.002 也不用慌,常见原因是:

  • 样本太少。 5 次展示的 CPM 没有意义。一个广告位至少攒到几千次展示再看
  • 访客是你自己。 开发者自己在国内打开页面测试,这类流量单价很低,还可能被识别成无效流量,不计费
  • 广告位刚上线,前几天还在匹配广告主,单价普遍偏低
  • 无效流量会被扣掉。 机器人、代理、重复刷新产生的展示,联盟会从收入里扣除。后台的数字是估算,结算时可能变少

不要自己点自己的广告,也不要叫朋友去点。 所有联盟都把这当作作弊,轻则扣收入,重则封号、不结算。测试时看到广告显示出来就够了。

3. 上线前估算一个月能挣多少

收入主要取决于访客来自哪些国家。按国家加权算 CPM:

加权 CPM = Σ(该国展示占比 × 该国 CPM)
月收入   = 月 PV × 每页展示数 × 加权 CPM ÷ 1000

例子:博客每月 3 万 PV,每页 2 个 Banner,填充率 80%,所以每页展示数 = 2 × 0.8 = 1.6。

访客地区 占比 假设 CPM 占比 × CPM
美、英、加、澳 20% $1.50 $0.30
欧洲其他国家 20% $0.80 $0.16
亚洲、拉美等 60% $0.15 $0.09
加权 CPM $0.55
月展示 = 30,000 × 1.6       = 48,000
月收入 = 48,000 × $0.55 ÷ 1000 ≈ $26.4
页面 RPM = $26.4 ÷ 30,000 × 1000 ≈ $0.88

表里的 CPM 只是举例,用你自己后台按国家拆分后的真实数据替换。从这个例子能看出两点:

  • tier 1 访客只占 20%,却贡献了一半以上的收入。提高收入最有效的办法,是写欧美用户会搜的内容,而不是多塞广告位
  • 每月 3 万 PV 只挣二三十美元。在流量还小的时候,广告收入通常不值得拿用户体验去换(见第七节的算账办法)

4. 用后台导出的数据自己算

Adsterra 和 AdSense 的统计都能按日期、国家导出 CSV。下面的脚本按国家汇总,算出 CTR、CPM、收入占比和加权 CPM。不同平台导出的列名不一样,按实际情况改 COLS:

# ad_report.py  用法:python ad_report.py adsterra_export.csv [月 PV]
import csv
import sys
from collections import defaultdict

COLS = {  # 改成你导出文件里的列名
    "country": "Country",
    "impressions": "Impressions",
    "clicks": "Clicks",
    "revenue": "Revenue",
}


def num(s: str) -> float:
    return float(s.replace("$", "").replace(",", "").strip() or 0)


def main(path: str, pageviews: float | None) -> None:
    by_country = defaultdict(lambda: {"imp": 0.0, "clk": 0.0, "rev": 0.0})
    with open(path, newline="", encoding="utf-8-sig") as f:
        for row in csv.DictReader(f):
            c = by_country[row[COLS["country"]] or "Unknown"]
            c["imp"] += num(row[COLS["impressions"]])
            c["clk"] += num(row[COLS["clicks"]])
            c["rev"] += num(row[COLS["revenue"]])

    total_imp = sum(c["imp"] for c in by_country.values())
    total_rev = sum(c["rev"] for c in by_country.values())

    print(f"{'国家':<16}{'展示':>10}{'展示占比':>9}{'CTR':>8}{'CPM':>9}{'收入':>10}{'收入占比':>9}")
    for name, c in sorted(by_country.items(), key=lambda kv: -kv[1]["rev"]):
        ctr = c["clk"] / c["imp"] if c["imp"] else 0
        cpm = c["rev"] / c["imp"] * 1000 if c["imp"] else 0
        flag = "  样本少" if c["imp"] < 1000 else ""
        print(
            f"{name:<16}{c['imp']:>10.0f}{c['imp'] / total_imp:>9.1%}{ctr:>8.2%}"
            f"{cpm:>9.3f}{c['rev']:>10.2f}{c['rev'] / total_rev if total_rev else 0:>9.1%}{flag}"
        )

    weighted_cpm = total_rev / total_imp * 1000 if total_imp else 0
    print(f"\n总展示 {total_imp:.0f},总收入 ${total_rev:.2f},加权 CPM ${weighted_cpm:.3f}")
    if pageviews:
        print(f"每页展示数 {total_imp / pageviews:.2f},页面 RPM ${total_rev / pageviews * 1000:.3f}")


if __name__ == "__main__":
    main(sys.argv[1], float(sys.argv[2]) if len(sys.argv) > 2 else None)

月 PV 从 GA4 或 Cloudflare 里取,和导出数据用同一个时间段。展示不到 1,000 次的国家会标「样本少」,这些国家的 CPM 先别当真。

5. 收入怎么到手

以 Adsterra 为例:

  1. 填收款信息:Profile → Payment information。先选你自己所在的国家,这里选的国家只决定能用哪些收款方式,和广告投放到哪里无关;再选收款方式,填好收款账户

  2. 在后台累计,余额达到起付线才打款:

    收款方式 起付线 备注
    Paxum / WebMoney $5
    PayPal $25 中国大陆 PayPal 提现到银行卡每笔 $35,攒多了再提
    USDT(TRC20) $100 换汇自己负责,留好记录
    本地银行转账 $50 每笔 $7,要做 KYC,只覆盖部分国家
    电汇 $1,000 每笔 $50
  3. 自动结算,不用申请:NET-15,每月两次

    收入期间 打款时间
    1 日–15 日 下个月 1 日左右
    16 日–月底 下个月 16 日左右

    遇到周末和节假日顺延一两个工作日。到了时间没收到钱,先检查个人资料和收款信息是不是填全了

AdSense 是另一套规则:月结,美元账户满 $100 付款;收入到 $10 时会邮寄 PIN 码验证地址,不验证就不付款(见第五节)。

6. 记账

广告收入是境外所得,要在国内申报个税(见 出海收款 第八节)。每次打款都记一行:

结算期间 平台 后台收入(美元) 打款方式 手续费 到账金额 到账日期 结汇金额(人民币) 汇率
2026-10-01 ~ 10-15 Adsterra PayPal

同时把每期的结算单截图或导出的 CSV 存在一个文件夹里,年度汇算时要用。


七、上线后看什么

挂上广告以后,盯这几个数,每周看一次:

指标 去哪看 看什么
页面 RPM AdSense / 联盟后台 每千次浏览挣多少钱。比较不同平台、不同版位时用这个数
LCP、CLS、INP GSC 的 Core Web Vitals,PageSpeed Insights 广告上线前后对比。CLS 变差多半是广告位没预留高度
Ad Experience Report / Abusive Experiences Report GSC 只要不是「通过」,就当天处理
跳出率、平均停留时长 GA4 和挂广告之前比,掉多少
注册率、付费转化率 你自己的埋点(见 工具产品看数据) 广告页面和没广告页面分开算
自然搜索点击 GSC 挂广告后 4–8 周有没有下滑

算账的办法:

广告每月净收益 = 广告月收入 − 转化率下降带来的付费损失
             = PV × RPM / 1000 − 访客数 × Δ转化率 × ARPU × 留存月数

举个例子:博客每月 3 万 PV,RPM $3,广告收入 $90。如果广告让注册转化率从 2% 降到 1.8%,每月少 0.2% × 2 万访客 = 40 个注册,按 5% 付费、$10 / 月、平均留存 6 个月算,少挣 40 × 5% × $10 × 6 = $120。这时候挂广告是亏的。

所以要用 A/B 的方式上线:先只在一半的博客页面挂广告,跑两到四周,再决定要不要全量。


八、上线清单

  • 隐私政策写了 Cookie 和第三方广告
  • ads.txt 放在根目录,curl 能打开,发布商 ID 没写错
  • 欧洲用户能看到 Google 认证的 CMP 同意弹窗
  • 每个广告位都预留了高度
  • SPA 换路由后广告能重新加载
  • 工具使用页、价格页、注册页没有广告
  • 没有 Popunder、Social Bar 这类形式(或者已经想清楚要用)
  • GSC 的 Ad Experience Report 和 Abusive Experiences Report 显示正常
  • 记下了上线前一周的 Core Web Vitals、跳出率和转化率,留作对比

参考

试试「AI」「GitHub」或「发布」
找到下一个行动的起点Tab 切换 · Enter 打开