Prebid.js ネイティブ広告 実装マニュアル
Prebid.js で Adgeneration のネイティブ広告(Native ad)を配信するための実装マニュアルです。
Prebid.js 自体の設定、Google Ad Manager(GAM)の設定は、公式サイト等よりご確認ください。
Adgeneration の管理画面での Bidder 枠の作成は、Bidder設定 Prebid.jsをご参照ください。
対象バージョン
お使いの Prebid.js のバージョンによって、書き方が異なります。
| Prebid.js | 書き方 |
|---|---|
| 11.43.0 以降(推奨) | 「Prebid.js 11.43.0 以降」タブの書き方 |
| 10.0 〜 11.42 | 11.43.0 以降へ更新してください(下記参照) |
| 9 以前 | 「Prebid.js 9 以前」タブの書き方 |
- 「Prebid.js 9 以前」の書き方では、Prebid.js 10 からネイティブ広告の値が GAM の key-value(
hb_native_*)で送られなくなったため、タイトル・画像・リンクなどが表示されません。 - 「Prebid.js 11.43.0 以降」の書き方では、オプトアウトリンクの URL がエンコードされたまま入るため、インフォメーションアイコンのリンクが正しく開きません。
Prebid.js を 11.43.0 以降に更新し、あわせて書き方も「Prebid.js 11.43.0 以降」に変更してください。
このページのタブは連動しています。どこかのタブでバージョンを選ぶと、ページ内のすべてのタブが切り替わります。
実装手順
- Prebid.js のダウンロード
- サイトへの Prebid.js ライブラリの実装
- bidder コードの記述
- GAM のネイティブスタイルの設定
- GAM のラインアイテムの設定
1. Prebid.js のダウンロード
ダウンロード URL:https://docs.prebid.org/download.html
「Select Bidder Adapters」で Ad Generation を含めてください。
- Prebid.js 11.43.0 以降
- Prebid.js 9 以前
Prebid.js 11.43.0 以降をダウンロードしてください(Ad Generation のアダプター 1.7.0 以降が含まれます)。
Prebid.js 2.6.0 以降、9.x 以前のバージョンをダウンロードしてください。
2. サイトへの Prebid.js ライブラリの実装
サイトへ、アダプターを含むライブラリを実装します。
3. bidder コードの記述
Prebid.js のネイティブ広告の bidder コードを記述します。
① AdSlot の設定
- サイズは固定、または Fluid で設定してください。
mediaTypesをnativeで設定してください。- GAM のアドユニットを記述します。
② ネイティブフィールドの設定
- リクエストで取得する項目を設定します。書き方は Prebid.js のバージョンによって異なります(下記参照)。
③ 枠 ID の設定
bidder: 'adg'またはbidder: 'adgeneration'が使用できます。idには、Adgeneration の管理画面で作成した Bidder 枠の広告枠 ID を指定します。作成方法はBidder設定 Prebid.jsをご参照ください。
ネイティブフィールド一覧
- Prebid.js 11.43.0 以降
- Prebid.js 9 以前
Prebid.js が推奨する ORTB 形式(OpenRTB Native 1.2)で、mediaTypes.native.ortb に記述します。各項目は assets に、id と種類(title / img / data)で指定します。
詳しくは、Prebid 公式の Prebid.js Native Implementation Guide をご参照ください。
| キー | assets での指定 |
|---|---|
| タイトル | title: { len: 80 } |
| リード文 | data: { type: 2 } |
| 広告主 | data: { type: 1 } |
| メイン画像 | img: { type: 3, wmin: 1, hmin: 1 } |
| アイコン画像 | img: { type: 1, wmin: 1, hmin: 1 } |
| CTAボタン | data: { type: 12 } |
| オプトアウトリンク | assets ではなく、ortb に privacy: 1 を記述 |
| リンク先URL | 記述不要 |
- ネイティブスタイルで表示する項目を記述してください。
idは、assetsの中で重ならない整数にしてください。typeの番号は、上の表のとおり正しく記述してください。required: 1を付けた項目の番号が違うと、入札ごと除外されます。imgには、wかwmin、hかhminを必ず記述してください。記述が無いと、Prebid.js がネイティブの設定ごと無効にするため、広告が配信されません。- OpenRTB の仕様に合わせて、オプトアウトリンクを使うことを示すため、
privacy: 1を記述してください。 - 表示に欠かせない項目だけ
required: 1にしてください(required: 1の項目が欠けた入札は除外されます)。 - Prebid.js 10 以降、
sendIdの記述は不要です。
var adUnits = [{
code: 'GAMNetworkID/AdUnitCode',
sizes: [1, 1],
mediaTypes: {
native: {
ortb: {
ver: '1.2',
privacy: 1,
assets: [
{ id: 1, required: 1, title: { len: 80 } }, // タイトル
{ id: 2, required: 1, img: { type: 3, wmin: 1, hmin: 1 } }, // メイン画像
{ id: 3, required: 0, img: { type: 1, wmin: 1, hmin: 1 } }, // アイコン画像
{ id: 4, required: 1, data: { type: 1 } }, // 広告主
{ id: 5, required: 0, data: { type: 2 } }, // リード文
{ id: 6, required: 0, data: { type: 12 } } // CTAボタン
]
}
}
},
bids: [{
bidder: 'adg',
params: {
id: "xxxxxxx"
}
}]
}];
| キー | param | sendId |
|---|---|---|
| タイトル | title | sendId: true(記述推奨) |
| リード文 | body | sendId: true(記述推奨) |
| オプトアウトリンク | privacyLink | sendId: false(記述必須) |
| 広告主 | sponsoredBy | sendId: true(記述推奨) |
| メイン画像 | image | sendId: true(記述必須) |
| アイコン画像 | icon | sendId: true(記述必須) |
| リンク先URL | clickUrl | sendId: true(記述必須) |
| CTAボタン | cta | sendId: true(記述推奨) |
- 各フィールドを
required: trueと記述することで、ビッドリクエストを送るためのフィールドを指定します(省略可)。 privacyLinkはrequired: falseにしてください。ターゲティングをしない広告はオプトアウトリンクが空のため、required: trueにすると入札ごと除外され、広告が配信されません。sendIdを使うと、bidder から GAM へ送られる広告の値を ID 化して送ることができます。クリック URL・画像の URL は特殊文字が文字化けする場合があるため、ID をご使用ください。image/icon/clickUrlは adId を使って GAM に値を受け渡すため、sendId: trueを記述してください。
var adUnits = [{
code: 'GAMNetworkID/AdUnitCode',
sizes: [1, 1],
mediaTypes: {
native: {
clickUrl: { required: true, sendId: true },
privacyLink: { required: false, sendId: false },
image: { required: true, sendId: true },
icon: { required: true, sendId: true },
title: { required: true, sendId: true },
body: { required: true, sendId: true },
sponsoredBy: { required: true, sendId: true }
}
},
bids: [{
bidder: 'adg',
params: {
id: "xxxxxxx"
}
}]
}];
4. GAM のネイティブスタイルの設定
GAM のネイティブスタイルを、次のとおり設定します。
- bidder コードに記述した必須フィールドを含むスタイルを、HTML / CSS で作成します。
- Prebid CDN のスクリプトを設定します。
- インフォメーションアイコンを設置します。
4-1. ネイティブスタイルの作成
通常どおりネイティブスタイルを設定します。
- GAM へログイン → 配信 → ネイティブ → ネイティブ広告を作成 → 「HTML & CSS エディタ」を選択
- 広告サイズ・カスタムフォーマットを作成(既存のフォーマットを使う場合は選択)
- ネイティブ広告のスタイルを設定
- HTML / CSS で広告のスタイルを作成
参照:https://support.google.com/admanager/answer/7661907
4-2. 各要素の組み込み
作成したネイティブスタイルに、各キーを設定します。
- Prebid.js 11.43.0 以降
- Prebid.js 9 以前
##hb_native_*## の形式で記述します。広告ユニットを ORTB 形式で記述していても、ネイティブスタイルはこの名前の形式で記述してください(assets の id に左右されないため、id を変えてもクリエイティブが壊れません)。
| キー | param | ネイティブスタイルへの記述 |
|---|---|---|
| タイトル | hb_native_title | ##hb_native_title## |
| 説明文 | hb_native_body | ##hb_native_body## |
| オプトアウトリンク | hb_native_privacy | <a href="##hb_native_privacy##" id="prlinkurl" target="_blank" rel="noopener"> |
| 会社名・ブランド | hb_native_brand | ##hb_native_brand## |
| メイン画像 | hb_native_image | ##hb_native_image## |
| アイコン | hb_native_icon | ##hb_native_icon## |
| CTAボタン | hb_native_cta | ##hb_native_cta## |
| リンク先URL | hb_native_linkurl | %%CLICK_URL_UNESC%%##hb_native_linkurl## |
- クリック URL:GAM のクリック計測マクロ
%%CLICK_URL_UNESC%%を使います。
実装例:<a href="%%CLICK_URL_UNESC%%##hb_native_linkurl##" target="_blank" class="pb-click"> - オプトアウトリンク:デコードは不要です。
##hb_native_privacy##をそのままhrefに設定してください。
%%PATTERN:hb_native_*%% の形式で記述します。
| キー | param | ネイティブスタイルへの記述 |
|---|---|---|
| タイトル | hb_native_title | %%PATTERN:hb_native_title%% |
| 説明文 | hb_native_body | %%PATTERN:hb_native_body%% |
| オプトアウトリンク | hb_native_privacy | <script>var privacyLink = decodeURIComponent("%%PATTERN:hb_native_privacy%%");</script> |
| 会社名・ブランド | hb_native_brand | %%PATTERN:hb_native_brand%% |
| メイン画像 | hb_native_image | %%PATTERN:hb_native_image%% |
| アイコン | hb_native_icon | %%PATTERN:hb_native_icon%% |
| CTAボタン | hb_native_cta | %%PATTERN:hb_native_cta%% |
| リンク先URL | hb_native_linkurl | %%CLICK_URL_UNESC%%%%PATTERN:hb_native_linkurl%% |
- クリック URL:GAM のクリック計測マクロ
%%CLICK_URL_UNESC%%を使います。
実装例:<a href="%%CLICK_URL_UNESC%%%%PATTERN:hb_native_linkurl%%" target="_blank"> - オプトアウトリンク:エンコードされた URL が送られてくるため、
decodeURIComponent()でデコードしてください(4-4. インフォメーションアイコン参照)。
4-3. スクリプトの記述
ネイティブスタイル内に、Prebid CDN でホストされている Universal Creative のスクリプトを記述します。下記の記述をそのまま設定してください。
- Prebid.js 11.43.0 以降
- Prebid.js 9 以前
native.js は、##hb_native_*## の置き換えと、インプレッション・クリックの計測に必要です。
バージョン(@1.18.0)は記載のまま指定してください。@latest にすると、新しい版が公開されたときに意図せず動作が変わるおそれがあります。
<script src="https://cdn.jsdelivr.net/npm/prebid-universal-creative@1.18.0/dist/native.js"></script>
<script>
var pbNativeTagData = {};
pbNativeTagData.pubUrl = "%%PATTERN:url%%";
pbNativeTagData.adId = "%%PATTERN:hb_adid%%"; // Send All Bids の場合は "%%PATTERN:hb_adid_adg%%"(bidder: 'adgeneration' の場合は "%%PATTERN:hb_adid_adgeneration%%")
pbNativeTagData.requestAllAssets = true;
window.ucTag.renderAd(document, pbNativeTagData);
</script>
native-trk.js は、インプレッション・クリックの計測と、adId を実際の URL に置き換えるために必要です。
バージョン(@1.15.0)は記載のまま指定してください。1.16.0 以降の版は、この書き方に対応していません。
<script src="https://cdn.jsdelivr.net/npm/prebid-universal-creative@1.15.0/dist/native-trk.js"></script>
<script>
let pbNativeTagData = {};
pbNativeTagData.pubUrl = "%%PATTERN:url%%";
window.pbNativeTag.startTrackers(pbNativeTagData);
</script>
4-4. インフォメーションアイコン
ネイティブスタイル内に、インフォメーションアイコンとオプトアウトリンクを設定します。
① インフォメーションアイコン画像の設置
- メディア様でアイコン素材をお持ちの場合は、お持ちのインフォメーションアイコンを設置してください。
- SVG 形式のアイコン素材を使う場合は、下記の SVG をご利用ください。
<svg id="master-artboard" viewBox="0 0 26 26" xmlns="http://www.w3.org/2000/svg" width="15px" height="15px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd">
<defs><radialGradient id="gradient-0" gradientUnits="objectBoundingBox" cx="0.5" cy="0.5" r="0.5"></radialGradient></defs>
<metadata id="CorelCorpID_0Corel-Layer"/>
<g transform="matrix(0.2555025815963745, 0, 0, 0.2555025815963745, -153.76052856445312, -11.603142738342285)">
<g id="g-1" transform="matrix(1, 0, 0, 1, 0, 0)">
<g id="g-2">
<path class="st0" d="M652,46c27.6,0,50,22.4,50,50s-22.4,50-50,50s-50-22.4-50-50S624.4,46,652,46z" style="fill: rgb(85, 85, 85);"/>
</g>
</g>
</g>
<g transform="matrix(0.05735531821846962, 0, 0, -0.05735531821846962, -24.604122161865234, 11.472267150878906)">
<g id="g-5" transform="matrix(1, 0, 0, 1, 0, 0)">
<g id="g-6">
<path class="st0" d="M652,46c27.6,0,50,22.4,50,50s-22.4,50-50,50s-50-22.4-50-50S624.4,46,652,46z" style="fill: rgb(255, 255, 255);"/>
</g>
</g>
</g>
<g transform="matrix(0.04459405317902565, 0, 0, 0.1242375373840332, 7.918155670166016, 4.555121421813965)">
<g id="g-7" transform="matrix(1, 0, 0, 1, 0, 0)">
<g id="g-8">
<path class="st0" d="M58,49h100v100H58V49z" style="fill: rgb(255, 255, 255);"/>
</g>
</g>
</g>
</svg>
- Prebid.js 11.43.0 以降
- Prebid.js 9 以前
② オプトアウトリンクの設定
##hb_native_privacy##をリンク(href)に設定してください。- URL はエンコードされずにそのまま入るため、デコードは不要です。
<a href="##hb_native_privacy##" id="prlinkurl" target="_blank" rel="noopener">(アイコン)</a>
③ アイコンの表示の条件分岐(実装推奨)
- ターゲティングをしない広告が配信される場合は、インフォメーションアイコンを非表示にする必要があります。
- 値が空の場合は
hrefが空になるため、CSS で非表示にしてください。
#prlinkurl[href=""] { display: none; }
② オプトアウトリンクの設定
%%PATTERN:hb_native_privacy%%をリンクに設定してください。- エンコードされた URL が送られてくるため、
decodeURIComponent()によるデコードが必須です。
<script>var privacyLink = decodeURIComponent("%%PATTERN:hb_native_privacy%%");</script>
③ アイコンの表示の条件分岐(実装推奨)
- ターゲティングをしない広告が配信される場合は、インフォメーションアイコンを非表示にする必要があります。
- インフォメーションアイコンの表示について、条件分岐と非表示にする処理を実施してください。
if (privacyLink == "") { var prElement = document.getElementById('privacy').style.display = "none"; }
4-5. サンプルコード
GAM のネイティブスタイルのサンプルコードです。インフォメーションアイコンの SVG は、4-4. インフォメーションアイコンのものを <a> の中に貼り付けてください。
- Prebid.js 11.43.0 以降
- Prebid.js 9 以前
HTML
<div class="sponsored-post">
<div id="thumbnail"><img src="##hb_native_image##" id="image"></div>
<div class="content">
<h1><a href="%%CLICK_URL_UNESC%%##hb_native_linkurl##" target="_blank" class="pb-click">##hb_native_title##</a></h1>
<p>##hb_native_body##</p>
<div class="attribution">##hb_native_brand##</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/prebid-universal-creative@1.18.0/dist/native.js"></script>
<script>
var pbNativeTagData = {};
pbNativeTagData.pubUrl = "%%PATTERN:url%%";
pbNativeTagData.adId = "%%PATTERN:hb_adid%%";
pbNativeTagData.requestAllAssets = true;
window.ucTag.renderAd(document, pbNativeTagData);
</script>
<div id="privacy">
<a href="##hb_native_privacy##" id="prlinkurl" target="_blank" rel="noopener">
<!-- インフォメーションアイコンの SVG -->
</a>
</div>
CSS
.sponsored-post {
background-color: #ffffff;
font-family: sans-serif;
padding: 10px 20px 10px 20px;
}
.content {
overflow: hidden;
}
#thumbnail {
width: 120px;
height: 100px;
float: left;
margin: 0 20px 10px 0;
}
#image {
max-width: 100%;
max-height: 100%;
width: auto;
height: auto;
}
h1 {
font-size: 18px;
margin: 0;
}
a {
color: #0086b3;
text-decoration: none;
}
p {
font-size: 16px;
color: #444;
margin: 10px 0 10px 0;
}
.attribution {
color: #fff;
font-size: 9px;
font-weight: bold;
display: inline-block;
letter-spacing: 2px;
background-color: #ffd724;
border-radius: 2px;
padding: 4px;
}
#prlinkurl[href=""] {
display: none;
}
#privacy {
position: absolute;
z-index: 9999;
top: 0px;
right: 0px;
}
HTML
<div class="sponsored-post">
<div id="thumbnail"><img src="%%PATTERN:hb_native_image%%" id="image"></div>
<div class="content">
<h1><a href="%%CLICK_URL_UNESC%%%%PATTERN:hb_native_linkurl%%" target="_blank" class="pb-click" pbAdId="%%PATTERN:hb_adid%%">%%PATTERN:hb_native_title%%</a></h1>
<p>%%PATTERN:hb_native_body%%</p>
<div class="attribution">%%PATTERN:hb_native_brand%%</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/prebid-universal-creative@1.15.0/dist/native-trk.js"></script>
<script>
let pbNativeTagData = {};
pbNativeTagData.pubUrl = "%%PATTERN:url%%";
window.pbNativeTag.startTrackers(pbNativeTagData);
</script>
<div id="privacy">
<a href="" id="prlinkurl" target="_blank">
<!-- インフォメーションアイコンの SVG -->
</a>
</div>
<script>
var privacyLink = decodeURIComponent("%%PATTERN:hb_native_privacy%%");
var prElement;
if (privacyLink == "") {
prElement = document.getElementById('privacy');
prElement.style.display = "none";
} else {
prElement = document.getElementById("prlinkurl");
prElement.setAttribute("href", privacyLink);
}
</script>
CSS
.sponsored-post {
background-color: #ffffff;
font-family: sans-serif;
padding: 10px 20px 10px 20px;
}
.content {
overflow: hidden;
}
#thumbnail {
width: 120px;
height: 100px;
float: left;
margin: 0 20px 10px 0;
}
#image {
max-width: 100%;
max-height: 100%;
width: auto;
height: auto;
}
h1 {
font-size: 18px;
margin: 0;
}
a {
color: #0086b3;
text-decoration: none;
}
p {
font-size: 16px;
color: #444;
margin: 10px 0 10px 0;
}
.attribution {
color: #fff;
font-size: 9px;
font-weight: bold;
display: inline-block;
letter-spacing: 2px;
background-color: #ffd724;
border-radius: 2px;
padding: 4px;
}
#privacy {
position: absolute;
z-index: 9999;
top: 0px;
right: 0px;
}
5. GAM のラインアイテムの設定
GAM のラインアイテムを設定して、配信設定は完了です。