広告文ポリシーとNGワード:違反を避けて配信停止を防ぐには
GoogleのAds Safety Report 2023によれば、同年に55億件の広告がブロック・削除され、約1,270万の広告主アカウントが停止されたと公表されています[1]。 これは単なる審査の厳格化というより、機械学習と自動ポリシー判定への投資が進み、微細な表現の違反も検知されやすくなった結果と説明されています[1][2]。エンジニアリングの現場では、コピーの良し悪しがマーケの専権事項に見えますが、実態は配信基盤の信頼性(SRE: Site Reliability Engineering の観点)に直結する運用課題です。審査落ちが連続すれば、学習フェーズの遅延やアカウントの内部評価(リスクスコアに類するもの)の低下を招きやすい。つまり、広告ポリシーと表現NGの理解は、配信速度とROIを守るためのSRE的な設計課題でもあります。ここではCTO・エンジニアリーダーの視点で、ポリシー違反を構造的に防ぐ方法を、実装と運用の両面から整理します。
広告審査の実像:機械判定とリスクスコア
各プラットフォームの審査は、機械判定を起点に人手の確認が差し込まれるハイブリッド型が一般的です[2]。Google Adsは「ポリシートピック(Policy topic)」という単位で違反を分類し、創意工夫の余地がある軽微な違反と、即時停止に直結しうる重大違反を分けて扱います[2]。前者は記号過多や誇大表現、伏字などの品質劣化に近い領域で、後者は不正行為の助長、誤情報、医療・金融の過剰な効能主張、個人属性の示唆、成人・危険品の取引などセンシティブ領域に該当します。Meta、TikTok、Yahoo!も基本設計は近く、創造表現の自由とユーザー保護のバランスを、分類器とルールベースの組み合わせで担保しています。
技術的に押さえたいのは、判定が一発勝負ではないことです。出稿時のテキスト、最終リンク先、LP(ランディングページ)のメタ情報、構造化データ、画像や動画内のテキスト検出までが統合され、アカウントの過去の挙動と合わせて確率的に評価されます。つまり広告文単体がクリーンでも、LPやアカウントヒストリーが弱いと巻き添えで落ちることがある。逆に、広告文の微修正だけで受かるときは、違反の中心が言い回しにあるケースです。この構造を理解すると、コピーのLint(静的検査)、LPのヘルスチェック、アカウント衛生の三層で対策を設計すべき理由が明確になります。
NGワードの正体:文脈で変わる「危険な言い回し」
NGワードというと単語のブラックリストを想像しがちですが、実際は文脈に依存する確定性と属性の示唆が主なトリガーです。例えば「必ず痩せる」「副作用なし」「世界一安い」「永久保証」といった確約や比較優位の断定は、医療・美容・金融・サプリのコンテキストで強く反応します。単語自体が禁止というより、「確実性」「再現性」「期間無制限」のニュアンスが問題になります。安全側に倒すなら、「サポート」「目指せる」「実績に基づく」「条件により異なる」といった不確実性の明示が有効です[3]。
個人属性の示唆も落ちやすい領域です。「あなたは糖尿病ですか」「40代女性は要注意」「うつ病のあなたへ」など、健康・宗教・性的指向・人種・収入・政見などセンシティブ属性の示唆は、パーソナライズド広告の禁止範囲に抵触します[2]。似たように見えて通る表現は、「40代の方向けに多い悩み」「多くのユーザーが抱える課題」など、特定個人を想起させない集団表現です。
表記上のテクニックも判定に響きます。記号や絵文字の多用、全角英数の乱用、伏字や機種依存文字での回避、「今すぐクリック!」のような煽動的命令や「無料で稼げる」のような過度な誘因は品質低下として検知されます[4]。逆に、根拠データや期間限定条件、返金条件の明示、公式情報へのリンクは品質シグナルを押し上げます。要するに、NGは言葉そのものより断定・誘因・属性示唆・センシティブ領域という四つの軸の交点で成立すると理解すると整合的です[6]。
誇大・保証表現は「確実性」を帯びた瞬間にアウト
パフォーマンスの断定は、成果型の領域ほど厳しく見られます。「3日で治る」「誰でも年収が上がる」「絶対に合格」は代表例です。安全に言い換える道筋は二つあり、再現性の範囲を限定するか、第三者の根拠で裏打ちするかです。前者は「事例では3日で改善した」「スキル向上を支援する」といった記述で、後者は「第三者調査で満足度○%」のような具体的なソースを添えます[3]。数値を使うときも、「自社調べ」「期間」「対象母数」を併記するだけで、誇大の疑いは大きく後退します[6]。
個人属性の断定、センシティブ領域、煽動的表現
健康や金融の成果主張は、プラットフォームのガイドラインだけでなく各国法令との整合も問われます。日本では医薬品医療機器等法や景品表示法との整合が問題になりやすく、プラットフォーム側も保守的に判定します[5][6]。「副作用ゼロ」「医師が絶賛」「借金が消える」といった言い切りは落ちやすく、避けがたいときは「医師監修のもとで情報提供」「返済計画の策定を支援」といった機能の記述に変換します[3][5]。命令口調の連呼、過度な感嘆符や記号、意味のない大文字化は品質違反で、アカウントの評価低下にもつながります[4]。
仕組みで防ぐ:事前検知と自動書き換えの設計
属人的な原稿チェックではスループットが上がりません。エンジニアリングでやるべきは、コピーのLint、文脈分類、言い換え提案、APIプレフライト、監査ログという一連のパイプラインを自動化することです。ここでは実装の最小構成を、段階に沿って紹介します。
ルールベースの一次フィルタ
まずは誇大や属性示唆の高頻度パターンを、辞書と正規表現で弾きます。日本語は語尾変化が多いため、活用と揺らぎを含めて設計します。
# -*- coding: utf-8 -*-
import re
from typing import List, Tuple
HARD_BLOCK = [
r"絶対(に)?", r"必ず", r"永久(保証)?", r"世界一", r"副作用(なし|ゼロ)",
r"(誰でも|必ず)痩せる", r"(借金|ローン)が(消える|ゼロ)", r"今すぐクリック",
]
ATTRIBUTE_HINTS = [
r"(あなた|君|貴方)は(糖尿病|うつ|不妊)",
r"(40|50)代(女性|男性)は",
r"年収(\d+|[一二三四五六七八九十百千万億]+)万円(以上|未満)?",
]
QUALITY_ISSUES = [r"[!!]{3,}", r"[??]{3,}", r"[A-Z]{6,}", r"[a-z]{10,}", r"[0-90-9]{10,}"]
PATTERNS = [(re.compile(p), "HARD_BLOCK") for p in HARD_BLOCK] + \
[(re.compile(p), "ATTRIBUTE") for p in ATTRIBUTE_HINTS] + \
[(re.compile(p), "QUALITY") for p in QUALITY_ISSUES]
Suggestion = Tuple[str, str]
def lint(text: str) -> List[Suggestion]:
suggestions: List[Suggestion] = []
for pat, kind in PATTERNS:
if pat.search(text):
if kind == "HARD_BLOCK":
suggestions.append((kind, "確実性の断定を避け、根拠や条件を明記してください"))
elif kind == "ATTRIBUTE":
suggestions.append((kind, "個人属性の示唆を避け、集団・一般表現に置き換えてください"))
else:
suggestions.append((kind, "記号や大文字の多用を削減し、可読性を担保してください"))
return suggestions
if __name__ == "__main__":
sample = "絶対痩せる!40代女性は今すぐクリック!!!"
print(lint(sample))
この段階で落とせる違反は多く、現場感覚では全体の半分程度は救えます。辞書はプロダクトや業界ごとに切り替え可能にし、版管理で差分を追えるようにします。
文脈分類と言い換え候補の生成
次に文脈で判断が分かれる表現を扱います。軽量にはTF-IDF(単語重要度に基づく特徴量化)と線形分類、より高精度には事前学習済み日本語BERT(文脈理解に強い言語モデル)の微調整を使います。分類結果に応じて、テンプレート駆動で安全な言い換えを提示します。
# -*- coding: utf-8 -*-
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
# ラベル例: 0=安全, 1=誇大, 2=属性示唆, 3=品質問題
model = Pipeline([
("tfidf", TfidfVectorizer(min_df=2, ngram_range=(1,2))),
("clf", LogisticRegression(max_iter=200))
])
# 実運用ではドメインデータで学習
# model.fit(texts, labels)
SUGGEST_TEMPLATES = {
1: "再現性を限定し、根拠を明示: 事例では{metric}達成。個人差があります",
2: "個人属性を一般化: {segment}向けという表現に変更",
3: "記号や大文字を削減し意味を保持",
}
def suggest(category: int, metric: str = "") -> str:
return SUGGEST_TEMPLATES.get(category, "表現を見直してください").format(metric=metric, segment="特定のユーザー層")
プロダクションでは、分類閾値にマージンを取り、人手レビューに回す境界領域を設けます。自動書き換えは強すぎるとクリエイティブを損なうため、候補提示と承認フローでの採否決定が現実的です。
APIによるプレフライト検証と監査ログ
プラットフォームの判定を最終的に知るには、公式APIでプレフライト検証を行うのが確実です。Google Ads APIはvalidate_onlyモードで作成を試行し、ポリシー違反を事前に取得できます[2]。近年はResponsive Search Ads(RSA)が標準のため、RSAでの検証例を示します。
# pip install google-ads
from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException
client = GoogleAdsClient.load_from_storage("google-ads.yaml")
ad_group_ad_service = client.get_service("AdGroupAdService")
ad_group_ad_operation = client.get_type("AdGroupAdOperation")
ad_group_ad = ad_group_ad_operation.create
# ひもづけ先
ad_group_ad.ad_group = "customers/123/adGroups/456"
ad = ad_group_ad.ad
ad.final_urls.append("https://example.com")
# Responsive Search Ad の構築
rsa = ad.responsive_search_ad
asset_type = client.get_type("AdTextAsset")
rsa.headlines.append(asset_type(text="結果にこだわるサポート"))
rsa.headlines.append(asset_type(text="専門家監修の情報提供"))
rsa.descriptions.append(asset_type(text="事例では3ヶ月で改善。個人差があります"))
rsa.path1 = "campaign"
rsa.path2 = "offer"
try:
ad_group_ad_service.mutate_ad_group_ads(
customer_id="123",
operations=[ad_group_ad_operation],
validate_only=True, # 作成せずにポリシー評価のみ
)
print("Policy OK")
except GoogleAdsException as ex:
for err in ex.failure.errors:
if err.error_code.policy_finding_error:
details = err.details.policy_finding_details
for entry in details.policy_topic_entries:
print("Policy topic:", entry.topic)
得られたポリシートピックは、ダッシュボードで可視化します。クリエイティブ単位、キャンペーン単位、ドメイン単位での違反傾向を時系列で追えば、どの表現が学習を毀損しているかが見えてきます。MetaやYahoo!も審査結果や却下理由をAPI経由で取得できるため、同じUIで横断可視化すると運用の学習コストが下がります。
運用ガバナンス:メトリクス、レビュー、教育
技術的な防壁は、運用のループが回って初めて価値を生みます。重視すべきは、審査落ち率、初回承認率、承認までのリードタイム、アカウントレベルの警告件数、修正に要したサイクルタイムといったメトリクスです。週次でレポートし、閾値を超えたときに辞書のチューニングやテンプレートの見直しを実施します。教育面では、クリエイティブとエンジニアが共通言語を持てるよう、ポリシーの四軸モデルと事例集をナレッジ化し、リリースノートのように更新履歴を残します。
レビューのフローは、Lintで弾かれた表現を即座に差し替える短サイクルと、根本的にコンセプトを調整する長サイクルに分けます。前者はコピーの語尾や数値表現の調律で改善でき、後者はLPの主張や申し込み導線の設計を含みます。審査に通りやすいが弱い表現と、ギリギリを攻めるが強い表現のトレードオフは常に存在するため、配信初期は安全側、学習が進んだら強度を試すといった段階的な戦略が現実的です。
最終的な目標は、配信停止のリスクを可視化し、事前に減らすことです。違反がゼロになることはありませんが、違反の質は変えられます。重大違反を撲滅し、軽微違反は素早く検知して即日で修正する。この運用が確立すると、プラットフォームの評価は改善し、審査時間は短縮され、探索と学習が途切れなく進みます。
まとめ:コピーは感性、運用は工学
審査の高度化は脅威ではなく、設計の余地です。NGの本質は単語ではなく、断定・誘因・属性示唆・センシティブの交点にあります。ここを押さえ、辞書と分類器で早期に検知し、テンプレートで安全に言い換え、APIでプレフライト検証し、ログで学ぶ。この流れが回れば、配信停止の恐怖は運用可能なリスクに変わります。あなたの組織は、どの段階から着手できますか。まずは既存クリエイティブの審査落ちログを一週間分だけ洗い出し、辞書に反映してみてください。次にプレフライトをパイプラインに挿し込めば、承認率は目に見えて上がります。コピーは感性の仕事ですが、運用は工学です。両輪で回したとき、配信の信頼性は確実に高まります。
参考文献
- Google. Our 2023 Ads Safety Report. https://blog.google/products/ads-commerce/google-ads-safety-report-2023/ (参照日: 2024-)
- Google Ads ヘルプ. 広告ポリシーの概要(About our policies). https://support.google.com/adspolicy/answer/143465?hl=en
- Google Ads ヘルプ. 誤解を招く主張・非現実的な主張(Misleading or unrealistic claims). https://support.google.com/adspolicy/answer/15936857?hl=en
- Google Ads ヘルプ. 句読点と記号(Punctuation and symbols in ads). https://support.google.com/adspolicy/answer/6021546?hl=en-ie
- 厚生労働省. 医薬品等適正広告基準・薬機法における広告規制. https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/iyakuhin/koukokukisei/index.html
- 消費者庁. 景品表示法 不当表示の禁止(優良誤認・有利誤認 等). https://www.caa.go.jp/policies/policy/representation/fair_labeling/representation_regulation/misleading_representation