前回更新で、
1.「テンプレートリテラル」というテクニックを知った
2. AdSense コードは、現在はかなりの範囲で変更が認められている、と知った
3. 「テンプレートリテラル」で AdSense コードを変更しても、勘所さえ押さえておけば、(たぶん)規約違反にはならない。
ってな所まで学んだ。という事で、今回は
「AdSense でテンプレートリテラルをやってみよう」をテーマに更新する。
まず、私は「テンプレートリテラル」を知らない。
なので 話はそこからスタートだ。
テンプレートリテラルとは
テンプレートリテラル (template literals)
逆引用符 (`) で区切られたリテラルで、複数行の文字列、埋め込み式による文字列の補間、タグ付きテンプレートと呼ばれる特殊な構文を許可します。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Template_literals
なるほど。逆引用符文字 (`) で囲むのがミソらしい。
それだけで良いのか。思ったより単純な話だった。
これにより、複数行の文字列も可能になる・・・・ と。
(でもリンク先を読み進めると、チョット難しそう!)
で、このページの趣旨は、こいつを AdSense コードに使うとどうなるか?である。
基本的なテンプレートリテラルの使い方
まず、AdSense コードをテンプレートリテラルで定義する。
その後、JSでDOM(HTML要素)内に挿入。
(前回更新記事と同じコード)
基本コードの例
// 広告ユニットIDを定義
const adSlotId = "1234567890";
const adClient = "ca-pub-xxxxxxxxxxxxxxxx";
// テンプレートリテラルで広告コードを作成
const adCode = `
<script async src="https://pagead2.googlesyndication.com{adClient}" crossorigin="anonymous"></script>
<!-- 広告ユニット名 -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="${adClient}"
data-ad-slot="${adSlotId}"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
`;
// 挿入先要素を取得してHTMLをセット
document.getElementById('ad-container').innerHTML = adCode;
基本は、こんな形になる
使用例: 記事内広告などの動的生成する
こういうコードをドコで使うの?なんでそんなコトするの?
という質問に対する答えには、
記事中の「特定の段落 (pタグ) の後」などに、動的に広告を自動で挿入する
などの答えが挙げられる。
要は、広告の表示場所を、後から動的に決められる、ってコトである。
工夫次第で色々イケる。
実際に使用する場合の例
// 記事の段落要素を全て取得
const paragraphs = document.querySelectorAll('.article-body p');
if (paragraphs.length > 2) {
// 3番目の段落の後に広告を入れる
const adSpot = paragraphs[2];
const adUnit = document.createElement('div');
adUnit.innerHTML = `
<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="9999999999"></ins>
`;
adSpot.after(adUnit);
(adsbygoogle = window.adsbygoogle || []).push({});
}
こんな感じでOK。
上記の例は、class「article-body」内の、3つ目の「p タグ」の直後に AdSense が表示されるようにするモノだ。
しかし、こういうコードを使う場合、いくつかの注意点があるらしい。
AdSense とテンプレートリテラル使用時の注意点
- ライブラリ読み込みは1回:
<script async src="..."></script> の部分は、ページ内で1回だけ読み込めば良いです。複数箇所に広告を出す場合は、<ins> タグだけをテンプレートリテラルで生成して挿入する。 - 非同期読み込み:
AdSenseコードは async (非同期) である。
DOMが完全に読み込まれた後に実行するよう注意する。
(DOMContentLoaded イベント等を使用) - 動的挿入時の注意点:
上記コードの innerHTML で直接タグを入れると、JavaScript実行前にCSSが適用されない場合がある。
document.createElement を使う方が安全な場合もある。 - Security (XSS):
テンプレートリテラル内で外部からの信頼できないデータを埋め込む場合は、XSS(クロスサイトスクリプティング)対策として必ずエスケープする
DOM のタイミングによっては CSS が効かないとか、なんか面倒くさいな。。。
それに、現在 作っているサイトでは、動的に AdSense を差し込む必要は全くない。
「コレ・・・、自分のサイトには不要なんじゃね?」という考えの方が大きくなった。
この時点での私の考え
- 使い方(動的に広告を挿入するのが目的)が分かった。
- コードの変更方法もわかった
- このような コード変更が、現在の AdSense の規約では「ほぼ」OKになる事も解った。(コードをミスると規約違反になる恐れは残る)
ここまで分かれば、個人的には十分な収穫である。
コードの実装については、今回は見送りする。
今回の更新、メインとなる情報は以上。
以下はおまけ。
こういう変更がポリシー違反にならないかどうか、念のため Gemini に尋ねてみた時のログである。いつか読み返す時のため、これもブログに残しておく。(注: AI 特有の冗長な部分は一部削除している)
以下、Gemini とのやりとりのログ
私の質問
- AdSense のコード変更について質問です。
「テンプレートリテラル」のテクニックを用いてコードを変更する事は、AdSense の プログラム ポリシー違反にはならないと思うのですが、その根拠が明確に示された URL がありますか?あれば教えてください。
Gemini の回答
- 結論から申し上げますと、Google AdSense の公式ドキュメントに「テンプレートリテラル」という特定の技術用語を用いた許可の記述は存在しません。
- Google は特定のコードの書き方(テンプレートリテラル、変数への格納、外部ファイルの読み込みなど)を一つずつ定義するのではなく、「結果としてコードの動作や役割が変わっているか」という基準でポリシーを定めています。
- テンプレートリテラルでの実装が「違反ではない」と判断できる根拠は、以下のポリシーの解釈に基づきます。
- 動作・役割が改変されていないこと
- AdSense 広告コードの修正 ポリシーでは、「広告のパフォーマンスを人為的に膨らませたり、広告主へのコンバージョンを損なったりするような改変」が禁止されています。
- テンプレートリテラルを単に「HTMLを生成するための入れ物」として使い、Google から発行された ins タグの属性(data-ad-client など)をそのまま出力するだけであれば、広告の動作自体を改変したことにはならないため、この禁止事項には抵触しません。
- 許可される改変の「考え方」
- レスポンシブ広告コードを修正する方法 では、画面幅に応じて JavaScript で広告ユニットを制御する手法が「許可される例」として紹介されています。
- ここでも「JavaScript を使うこと自体」は否定されておらず、「ユーザー体験の向上」や「デザインへの対応」といった正当な目的があれば、スクリプトを通じたコードの扱いは許容されています。
- 公式ヘルプコミュニティでの議論
- 公式ドキュメントではありませんが、Google の専門家(プロダクトエキスパート)が回答する AdSense ヘルプコミュニティ 等では、「SPA(Single Page Application)などで広告コードを動的に挿入する」手法について、「コードの内容(ID等)を変更せず、1ページあたりの広告数制限を守れば問題ない」という見解が一般的です。
- 結論としての注意点
- 「テンプレートリテラルを使うこと」自体に違法性はありませんが、その中身で「Google が発行したコードの値を動的に書き換える(例:A/Bテスト以外でスロットIDをランダムに変える)」などの操作を行うと、広告コードの修正ポリシー違反となるリスクがあります。
私の質問
- 「「結果としてコードの動作や役割が変わっているか」という基準でポリシーを定めています。」
この根拠となる URL を提示してください。
Gemini の回答
- 「結果としてコードの動作や役割が変わっているか」という表現そのものが記載されたURLはありません。これは、Googleが示している「禁止される改変の具体例」の共通項を、ポリシーの原則に基づいて要約したものです。
- その根拠(ソース)となるのは、以下の「広告コードの修正」に関する公式ポリシーページです。
- 根拠となる公式URL
- AdSense 広告コードの修正 - AdSense ヘルプ
https://support.google.com/adsense/answer/1354736?hl=ja - このページ内の以下の記述が、私の回答の根拠となっています。
- 原則: 「広告のパフォーマンスを人為的に膨らませたり、広告主へのコンバージョンを損なったりするような改変は禁止されています。」
- この一文は、「書き方(手段)」ではなく、その改変がもたらす「結果(目的)」を制限していることを示しています。
- AdSense 広告コードの修正 - AdSense ヘルプ
- ポリシーが「結果」を基準にしていると言える3つのポイント
- 意図的な操作(結果)の禁止
- 「広告のターゲットを絞り込むために隠しキーワードを使用する」
- 「IFRAME 内に広告を配置する」
- これらは、JavaScriptの書き方の問題ではなく、「ターゲットを不正に操作する」「広告の配信環境を隠蔽する」という結果を禁止しています。
- 不適切な表示(結果)の禁止
- 「display:none などを使用して広告ユニットを隠す」
- 「コンテンツを覆うような形で広告を配置する」
- これも CSS や JS の手法そのものではなく、「広告が見えない・誤クリックを誘発する」という結果を制限しています。
- 許可される改変の共通点
- 同ページやレスポンシブ広告の修正で許可されている「画面幅に合わせたサイズ変更」などは、広告の役割(広告を表示し、収益を得る)を正常に果たすための修正であるため、許可されています。
- 意図的な操作(結果)の禁止
- 結論
- Googleのポリシーは「このタグを使ってはいけない」という記述スタイルではなく、「広告主やユーザーに不利益を与えるような改変をしてはいけない」という包括的な書き方をしています。
- そのため、「テンプレートリテラル」という特定の書き方について「OK」とも「NG」とも書かれたページは存在しませんが、「発行されたコードの内容(ID等)を書き換え、広告の挙動を操作する結果」を招かない限り、実装上の手法(変数への格納など)は「コードの修正」には当たらないというのが、ポリシーの標準的な解釈となります。
- もし「テンプレートリテラルを使って、動的にスロットID(data-ad-slot)を切り替えたい」といった具体的な意図がある場合は、それは「改変」とみなされる可能性が非常に高いため注意が必要です。単純な表示のためであれば問題ありません。
前回更新で「現在の AdSense コードの変更が許可される範囲は、たぶん、この辺だろうな」と考えていたものと、ほぼ同じ答えが返ってきた。たぶんこれで正解なのだろう。
AdSense コードを テンプレートリテラル で出力しても、基本的には大丈夫そうな感じもある。ここまで分かれば、これも十分である。
今回の更新は以上。