作為長期負責海外業務的開發者,公司業務中經常會和谷歌的人員有溝通。在接入谷歌廣告生態時,踩了很多坑,很多坑都是和谷歌的技術人員溝通後才發現問題的(有些最新情況和文檔不一致,很坑)。
📊 1. AdSense 與 Ad Manager 關係與定位對比
| 對比維度 | AdSense(谷歌廣告聯盟|廣告源) | Ad Manager(GAM,谷歌廣告管理平台) |
|---|---|---|
| 🎯 核心定位 | 中小站點 / 個人博主的 "傻瓜式" 變現工具 | 中大型媒體 / 出版商的企業級廣告管理系統 |
| 👥 目標用户 | 個人博客、小型網站、獨立開發者 | 流量較大的媒體平台、電商網站、內容出版商 |
| ⚙️ 操作複雜度 | 極低(複製粘貼代碼 + 配置 ID,腳本動態引入) | 較高(需配置廣告單元、優先級、定價,手動加載 GPT 腳本) |
| 💰 收益模式 | 廣告分成(CPC/CPM),谷歌抽成後結算 | 自主定價 + 平台服務費,支持直客廣告 + 聯盟廣告整合 |
| 🚀 核心優勢 | 零維護成本、快速變現、門檻低 | 精細化控制、多渠道整合、收益最大化 |
| 🔄 協同關係 | 可作為 GAM 的 "保底廣告源" 接入 | 可管理 AdSense 廣告,分配優先級 |
| 🔐 域名審核規則 | 1. 需審核頂級域名(如 example.com),2023 年後政策:頂級域名通過後,所有子域名自動生效 2. 支持獨立頂級域名,免費域名通過率極低 3. 域名需合規(無盜版、無密碼保護) | 1. 需審核綁定的頂級域名,2023 年後同 AdSense 規則:子域名無需單獨審核 2. 審核門檻更高,需提供域名所有權證明、流量合規證明 3. 支持多頂級域名管理,每個頂級域名需單獨審核,子域名自動關聯 |
| 📜 核心依賴腳本 | 需動態引入 adsbygoogle.js(URL:https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js),廣告代碼會自動觸發引入,無需手動加載 | 必須手動加載 GPT(Google Publisher Tag)腳本(URL:https://securepubads.g.doubleclick.net/tag/js/gpt.js) |
| 🚪 接入門檻 | 網站內容合規、有一定訪問量(無硬性指標)、域名註冊建議滿 3 個月(通過率更高) | 需申請開通,要求較高的流量規模(日均 UV10 萬 +)和合規資質,域名需完成官方驗證 |
| 📏 廣告位個數上限 | 1. 有明確默認限制:單頁面通常不超過 3-5 個(超量會觸發審核警告或限制) 2. 特殊頁面限制:文章詳情頁建議≤3 個,列表頁建議≤4 個 3. 違規後果:超量會被判定為 "影響用户體驗",輕則減少填充,重則封禁賬號 | 1. 無強制數量上限:谷歌未規定上限,由開發者自主配置 2. 核心約束:廣告位不得覆蓋核心內容或造成頁面擁擠,否則觸發合規抽查 3. 實操建議:單頁面建議控制在 5-8 個內,避免用户流失 4. 特殊規則:若接入 AdSense 作為廣告源,需遵循 AdSense 的個數限制 |
| 📄 域名驗證文件要求 | 1. 頂級域名根目錄需放置 ads.txt,內容包含谷歌提供的 publisher ID 驗證信息 2. 子域名建議單獨放置 ads.txt:谷歌爬蟲優先讀取子域名自身的 ads.txt 3. 缺失會導致廣告填充率驟降(谷歌無法驗證域名所有權) | 1. 頂級域名根目錄需放置 ads.txt,內容包含 GAM 賬號對應的驗證信息 2. 多頂級域名需分別放置對應 ads.txt,子域名建議單獨放置 3. 若接入 AdSense 作為廣告源,需同時包含 AdSense 的驗證信息 |
| 🔗 官方文檔地址 | https://support.google.com/adsense | https://support.google.com/admanager |
⚠️ 重要協同使用提醒
切記:要不就接入Adsense,要不就升級到GAM(沒有廣告數據源了就用GAM賬號系統關聯Adsense賬號,然後在GAM管理系統裏新建訂單項拉取Adsense的廣告源),絕不能這2個同時存在,否則域名被封了找谷歌的技術人員都不好解封。
🎯 2. AdSense 接入與廣告填充監聽
📝 接入案例 + AdSense如何判斷廣告位渲染填充成功(data-ad-status屬性)
官方參考文檔
| 屬性值 | 含義與説明 |
|---|---|
filled |
表示廣告請求成功,系統已經返回廣告並在廣告單元中正常展示 |
unfilled |
表示廣告請求未成功,系統沒有返回任何廣告,導致廣告單元為空 |
💻 完整接入代碼示例
html
<!DOCTYPE html>
<html>
<head>
<title>AdSense狀態監聽</title>
<style>
/* 當廣告狀態為未填充時,自動隱藏廣告容器 */
ins.adsbygoogle[data-ad-status="unfilled"] {
display: none !important;
}
</style>
</head>
<body>
<h1>AdSense狀態監聽示例</h1>
<!-- 廣告容器 -->
<div>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-XXXXXXXXXXXXXXXX(你的賬號ID)"
data-ad-slot="xxxxxx(廣告位id)"
data-ad-format="auto"></ins>
<script>
// 啓動
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
<script>
// 獲取廣告元素
const adElement = document.querySelector('.adsbygoogle');
// 設置最大等待時間(秒)
const MAX_WAIT_TIME = 10;
// 記錄開始時間
const startTime = Date.now();
// 創建觀察器監聽廣告狀態變化
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
// 檢查是否是data-ad-status屬性發生變化
if (mutation.type === 'attributes' && mutation.attributeName === 'data-ad-status') {
const status = adElement.getAttribute('data-ad-status');
const elapsedTime = (Date.now() - startTime) / 1000;
console.log(`[${elapsedTime.toFixed(2)}秒] 廣告狀態: ${status}`);
// 如果廣告成功填充,停止監聽
if (status === 'filled') {
console.log('✅ 廣告填充成功!');
observer.disconnect(); // 停止監聽
}
}
});
});
// 開始監聽廣告元素的data-ad-status屬性變化
observer.observe(adElement, {
attributes: true,
attributeFilter: ['data-ad-status']
});
// 設置超時檢查 - 10秒後檢查廣告狀態
setTimeout(() => {
const finalStatus = adElement.getAttribute('data-ad-status');
const elapsedTime = (Date.now() - startTime) / 1000;
console.log(`⏰ ${MAX_WAIT_TIME}秒超時檢查`);
// 如果10秒後廣告仍未填充成功,記錄日誌
if (finalStatus !== 'filled') {
console.log('❌ 廣告未在指定時間內填充成功');
}
observer.disconnect(); // 停止監聽
}, MAX_WAIT_TIME * 1000);
console.log('開始監聽廣告狀態...');
</script>
</body>
</html>
🛠️ 3. Ad Manager(GAM)接入和監聽廣告填充情況
💻 簡單接入案例
html
<!DOCTYPE html>
<html>
<head>
<title>GAM廣告狀態監聽</title>
<!-- 引入GPT庫 -->
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
</head>
<body>
<h1>GAM廣告狀態監聽示例</h1>
<!-- 廣告位容器 -->
<div id='div-gpt-ad-123456789-0' style='width:300px; height:250px;'>
<script>
// 等待GPT庫加載完畢
window.googletag = window.googletag || {cmd: []};
googletag.cmd.push(function() {
// 定義廣告位
var adSlot = googletag.defineSlot('/你的廣告單元ID路徑', [300, 250], 'div-gpt-ad-123456789-0');
// 基於GPT庫 添加事件監聽器
googletag.pubads().addEventListener('slotRenderEnded', function(event) {
// 打印廣告位信息
console.log('廣告位名稱:', event.slot.getSlotElementId());
console.log('廣告狀態:', event.isEmpty ? '未填充' : '已填充');
});
// 啓用廣告服務並刷新廣告
googletag.enableServices();
googletag.display('div-gpt-ad-123456789-0');
// 可有可無
googletag.pubads().refresh([adSlot]);
});
</script>
</div>
</body>
</html>
🚫 4. 常見違規行為
- 🚨 在iframe頁面中二次嵌套廣告頁面
- 🚨 2個賬號的Adsense和GAM同時在一個網頁中加載(親測過,測試域名被封了,問了合作的谷歌人員他們也沒辦法)
- 🚨 一個網頁只能接入一個賬號,Adsense和GAM二選一
- 🚨 頻繁點擊或者用腳本就刷,很容易被檢測到
- 🚨 擅自修改AdSense廣告代碼;在非內容網頁(如404頁、純廣告頁)放置廣告;廣告被網頁元素遮擋等。也很容易被檢測到導致後續很難填充廣告
- 🚨 AdSense廣告位不要超過上限;單頁面通常不超過 3-5 個(超量會觸發審核警告或限制)
🔧 5. 廣告一直渲染不出來的排查思路
🔍 廣告代碼與容器佈局排查
首先,我們需要仔細檢查廣告代碼和容器佈局,這是最常見的問題來源。
- 核對廣告代碼:確保網頁中嵌入的廣告代碼完全正確,並且
data-ad-client(AdSense) 或廣告單元ID (GAM) 與你後台創建的信息完全一致 - 關注
data-ad-format屬性:這個屬性控制廣告的響應式行為。如果它在移動端顯示異常,可以嘗試在<ins>標籤內添加data-full-width-responsive="false"來禁止廣告自動展開至全寬 -
穩定廣告容器:AdSense響應式廣告會檢測其父級容器的可用寬度來調整尺寸
- 賦予明確寬度:避免父容器寬度設置為
auto,或通過JavaScript動態調整導致初始寬度不確定。為容器設置明確的寬度(固定值或穩定的百分比) - 簡化定位:檢查CSS中是否有
position: absolute等使元素脱離文檔流的定位屬性,這可能會影響廣告腳本對容器尺寸的計算 - 留意加載時序:如果頁面佈局由JavaScript動態調整,可能會與AdSense腳本的渲染時機衝突。確保廣告容器在AdSense腳本加載前的尺寸就是穩定和正確的
- 賦予明確寬度:避免父容器寬度設置為
- 排除插件干擾:一些廣告攔截插件可能會阻止廣告加載。排查時,可以嘗試在瀏覽器無痕(隱私)模式下訪問網頁,或暫時禁用這類插件
📋 域名狀態與文件驗證
如果代碼和佈局檢查無誤,接下來我們需要確認你的網站和域名狀態是否一切正常。
-
確認審核狀態:
- 對於 AdSense,務必在後台 (AdSense > 網站) 確認你的網站是否已通過審核。新添加的網站需要經過Google的審核才能開始展示廣告
- 如果狀態是 "待審核" 或 "未就緒" ,耐心等待即可,這可能需要幾天到數週時間
-
驗證
ads.txt文件:- 確保你的網站根目錄(例如
https://你的域名/ads.txt)存在正確配置的ads.txt文件,並且文件中包含了你AdSense或GAM賬户對應的信息 - 特別注意:如果你的AdSense後台添加的是頂級域名(如
only1u.org),那麼ads.txt文件必須放置在頂級域名的根目錄下。如果網站實際運行在二級域名(如blog.only1u.org),可能需要通過服務器配置確保能通過頂級域名訪問到該文件
- 確保你的網站根目錄(例如
- 檢查網站可訪問性:確保你的網站在不同國家和地區都能穩定訪問,且加載速度正常。Google的審核和廣告投放服務器可能位於國外,網站不穩定或無法訪問會導致審核失敗或廣告無法渲染
🛠️ 官方工具 + 客服支持
- 查看瀏覽器控制枱:是否有廣告腳本加載錯誤(如403、500狀態碼),針對性解決。(403是最常見的一種 就是域名審核異常了)
- 官方論壇提問:https://support.google.com/adsense/community(谷歌技術人員會回覆)
- 聯繫谷歌客服:通過AdSense後台的"幫助"菜單提交問題,準備詳細的賬户信息和問題描述