広告・メール配信のURLに付けるUTMパラメータを命名規則と照らし、表記ゆれ・抜け・媒体との食い違いを入稿前に指摘して直し方を示す
広告やメール配信の入稿の前に、URLに付けたUTMパラメータを社内の命名規則と照らします。規則に合うかはスクリプトが判定し、合わない値について AI が直した値の案と理由を書きます。運用担当が1本ずつ目で確かめる時間を減らします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Zapier
- 対象業界
- EC/IT・SaaS/小売/広告
- 対象部門
- マーケティング
- 対象業務
- 内容確認・チェック
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 校正
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 運用担当が入稿表を作り、点検の担当に送る
- 点検の担当が、URLを1本ずつ選んでパラメータの部分を読む
- `utm_source`・`utm_medium`・`utm_campaign` があるかを見る
- 値が規則の一覧にあるか、大文字・全角・空白が混じっていないかを見る
- キャンペーン名が「年月_広告主_施策」の形か、広告主と案件のコードが合うかを見る
- 媒体の列と `utm_source`、配信の種類と `utm_medium` が合うかを見る
- 誤りを入稿表のコメントに書き、運用担当に戻す
- 直った入稿表を、もう一度見る
- 人運用担当が、点検のスプレッドシートの入稿のシートに、入稿表の行を貼り付ける
- 人スプレッドシートのメニューから「UTM を点検」を選ぶ
- 自動Apps Script が、URLをパラメータに分ける
- 自動必須のパラメータの有無、値が一覧にあるか、文字の種類、キャンペーン名の形を規則で判定する
- 自動入稿表の媒体・配信の種類・案件のコード・クリエイティブの ID と、パラメータの値の食い違いを、規則で決まる範囲で判定する
- 自動規則に合わない値と、食い違いの疑いのある行を OpenAI の API に渡す
- 自動AI が、直した値の案と理由を返す
- 自動スクリプトが、AI の案を同じ規則でもう一度判定し、通ったものだけで直したURLを組み立てる
- 自動行の右の列に、判定・直した値の案・直したURL・理由を書く
- 人運用担当が案を見て、採るか直すかを決め、入稿表を直す
- 人点検の担当は、AI が「判断できない」とした行と、運用担当が案を採らなかった行だけを見る
各工程の詳しい説明を読む
- 運用担当が入稿表を作り、点検の担当に送る
- 点検の担当が、URLを1本ずつ選んでパラメータの部分を読む
utm_source・utm_medium・utm_campaignがあるかを見る- 値が規則の一覧にあるか、大文字・全角・空白が混じっていないかを見る
- キャンペーン名が「年月_広告主_施策」の形か、広告主と案件のコードが合うかを見る
- 媒体の列と
utm_source、配信の種類とutm_mediumが合うかを見る - 誤りを入稿表のコメントに書き、運用担当に戻す
- 直った入稿表を、もう一度見る
(a)見落とすのは、1文字の違いです。 Meta と meta、e-mail と email、末尾の空白。20本のURLが横に長く並ぶと、目で拾うのは難しくなります。 見落としは、配信が始まってからアクセス解析のレポートで分かります。
(b)規則を知っている人しか、食い違いに気づけない。 6番の「媒体と utm_source が合うか」は、どの媒体をどの値で書くかを覚えていないと判断できません。 Instagram の広告を instagram と書くか meta と書くかは、社内の取り決めです。
(c)直し方を書くのに時間がかかる。 誤りを見つけても、「こう直してください」と正しい値を書くには規則のドキュメントを開き直す必要があります。「規則に合っていません」とだけ戻すと、運用担当がまた別の誤り方をします。
(d)入稿の前日に集中する。 入稿表は配信の開始の直前に届くことが多く、点検の時間が短いほど、(a)の見落としが増えます。
- 【人】 運用担当が、点検のスプレッドシートの入稿のシートに、入稿表の行を貼り付ける
- 【人】 スプレッドシートのメニューから「UTM を点検」を選ぶ
- 【自動】 Apps Script が、URLをパラメータに分ける
- 【自動】 必須のパラメータの有無、値が一覧にあるか、文字の種類、キャンペーン名の形を規則で判定する
- 【自動】 入稿表の媒体・配信の種類・案件のコード・クリエイティブの ID と、パラメータの値の食い違いを、規則で決まる範囲で判定する
- 【自動】 規則に合わない値と、食い違いの疑いのある行を OpenAI の API に渡す
- 【自動】 AI が、直した値の案と理由を返す
- 【自動】 スクリプトが、AI の案を同じ規則でもう一度判定し、通ったものだけで直したURLを組み立てる
- 【自動】 行の右の列に、判定・直した値の案・直したURL・理由を書く
- 【人】 運用担当が案を見て、採るか直すかを決め、入稿表を直す
- 【人】 点検の担当は、AI が「判断できない」とした行と、運用担当が案を採らなかった行だけを見る
8番目が、この構成の安全装置です。 AI が出した案も、規則に通らなければ使いません。AI の案が新しい表記ゆれを持ち込むのを止めます。
10番目を運用担当にしているのは、入稿表を直すのは作った人だからです。 点検の担当が直すと、運用担当の手元の入稿表と食い違います。点検の担当は、判断の要るものだけを見る役に変わります。
02今回想定するシステム構成
運用担当が入稿表の行を貼り付ける ▼【トリガー】メニュー「UTM を点検」(スプレッドシートに付けたスクリプト) Google Apps Script ├──▶ URLをパラメータに分ける ├──▶ 規則の判定(必須・一覧・文字・形・規則で決まる食い違い) ├──▶ OpenAI API(Responses API・構造化出力) │ 直した値の案/理由/食い違いの指摘 ├──▶ 案を同じ規則で再判定し、直したURLを組み立てる └──▶ 行の右の列に書く ▼ 【運用担当が案を採るか決め、入稿表を直す】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Make、Zapier |
| 生成AI | OpenAI API(Responses API、構造化出力) | Claude API、Gemini API |
| 保管 | Google スプレッドシート(入稿のシート、命名規則のシート、媒体の対応表、点検の記録) | - |
新しく足すのは、点検のスプレッドシート1つと、そこに付ける Apps Script だけです。 命名規則は共有のドキュメントから、スクリプトが読めるシートの形に移します。 広告の管理画面やメールの配信のシステムには、この構成からつなぎません。
Apps Script は、点検のスプレッドシートに付けるスクリプトとして書きます。 公式のページでは、Apps Script は Docs・Sheets・Slides・Forms に独自のメニューを足すことができ、ファイルを開いたときに表示するには onOpen の関数の中にメニューのコードを書くとされています。また、メニューを作れるのは、ファイルに付けたスクリプト(バインドされたスクリプト)だけとされています。そのため、入稿表のそれぞれにスクリプトを付けるのではなく、点検用のスプレッドシートを1つ作り、そこへ行を貼り付けてもらう形にします。
AI の処理は OpenAI の Responses API の構造化出力で行います。 公式のページでは、text.format に type: "json_schema"、strict: true とスキーマを渡すと、スキーマに合う出力が返るとされています。すべての項目を required にし、オブジェクトには必ず additionalProperties: false を付ける必要があります。文字列には pattern(正規表現)が使えるので、直した値の案を、小文字・数字・ハイフン・アンダースコアだけに縛れます。
03どうやって実装するのか
処理の起点を決める
運用担当がメニューから「UTM を点検」を選んだときに動かします。 onOpen の関数で SpreadsheetApp.getUi().createMenu() を使い、メニューの項目に点検の関数を結び付けます。選んだ行だけを点検する項目と、シートの未点検の行をすべて点検する項目の2つを置きます。
時間主導型のトリガーで自動に回さないのは、貼り付けの途中で動くのを避けるためです。 入稿表の行を何回かに分けて貼る運用担当もいて、途中で点検されると、まだ貼っていない行の分だけ「案件のURLが足りない」ような結果が出ます。 運用担当が「貼り終えた」と言える操作をきっかけにします。
1回の実行は6分までです。 公式の割り当てでは、スクリプトの1回の実行時間は6分です。1件の入稿表の20本ほどなら1回で終わりますが、シートのすべての未点検の行を点検する項目では、1回あたりの行数に上限を置き、残りは「未点検」のまま残します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 入稿の行 | 案件のコード、広告主、媒体、配信の種類、クリエイティブの ID、配信の開始日、URL | 入稿のシート(運用担当が貼る) |
| 命名規則 | パラメータごとの必須・任意、使ってよい値の一覧、キャンペーン名の形(正規表現)、文字の種類 | 命名規則のシート |
| 媒体の対応表 | 入稿表の媒体の書き方(「Instagram広告」「インスタ」など)と、使うべき utm_source・utm_medium の組 | 媒体の対応表のシート |
| 広告主の略称の一覧 | 案件のコードの広告主の部分と、キャンペーン名で使う略称 | 広告主の一覧のシート |
質を決めるのは、媒体の対応表です。 入稿表の媒体の列は運用担当が自由に書くので、「Instagram広告」「インスタ」「IG」が混ざります。対応表にこれらを並べ、それぞれに使うべき utm_source と utm_medium を書いておけば、食い違いの多くは規則で判定できます。 AI に回るのは、対応表に無い書き方の行だけになります。
命名規則を共有のドキュメントからシートに移す作業が、最初の準備です。 ドキュメントの文章で書かれた規則を、パラメータごとの行と、値の一覧と、正規表現に直します。この作業で、ドキュメントの規則が曖昧だったところが見えてきます。
Google アナリティクスのヘルプでは、URLにパラメータを付けるときは、どのような場合も utm_source・utm_medium・utm_campaign を使う必要があるとされています。命名規則のシートでも、この3つを必須にします。ヘルプでは、関連するパラメータ(utm_id、utm_source_platform など)もあわせて設定することが強く推奨されています。どこまでを必須にするかは、社内の計測の設計で決めます。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 点検する行 | 入稿のシート | 選んだ範囲か、判定の列が空の行を読む |
| 命名規則・媒体の対応表・広告主の一覧 | 各シート | 実行の最初に一度に読む |
URLは、スクリプトで部分に分けます。 ? より前をページのアドレス、? と # のあいだをパラメータ、# より後を残りとして分け、パラメータを & と = で名前と値に分けます。値はパーセントエンコードを戻してから判定し、組み立てるときにもう一度エンコードします。
1行ごとの処理は、次の順で行います。
1. URLを、ページのアドレス・パラメータ・# 以降に分ける
2. 同じ名前のパラメータが2回出ていないか、? が2つないかを見る
3. 必須のパラメータの有無を見る
4. 値ごとに、文字の種類(小文字・数字・- と _ だけか、全角・空白が無いか)を見る
5. utm_source・utm_medium が一覧にあるか、utm_campaign が決まった形かを見る
6. 媒体の対応表で、媒体の列と utm_source・utm_medium の組が合うかを見る
7. キャンペーン名の広告主の部分と、案件のコードの広告主が合うかを見る
8. utm_content とクリエイティブの ID が合うかを見る
9. 1〜8 で規則に合わなかった値と、対応表に無い媒体の行を、AI に渡す一覧にする
1回の呼び出しに、入稿表1件分の行をまとめて渡します。 1本ずつ呼ぶと、同じ入稿表の中で同じ誤りに別々の直し方が出ることがあります。まとめて渡すと、同じ誤りには同じ案が返りやすくなります。
OpenAI の API は UrlFetchApp で呼びます。 API キーはスクリプトのプロパティに置きます。公式の割り当てでは、URL Fetch の呼び出しは一般のアカウントで1日2万回、Google Workspace のアカウントで1日10万回で、月100件の入稿表には十分です。
AIへ渡す前に整形する
- 規則に合う行は渡さない … 1〜8 をすべて通った行は、AI を呼ばずに「適合」と書きます
- 値の前後の空白を記録する … 空白は消さずに「空白あり」として判定に残します。黙って消すと、入稿表の元の値の誤りが残ったままになります
- 規則の一覧を絞って渡す … その行の配信の種類で使える値の一覧だけを渡します
- 広告主の略称を添える … 案件のコードから引いた略称を渡します
- ページのアドレスは渡す範囲を決める … 公開前の特設ページのアドレスは、パスの部分を記号に置き換えて渡せます(第13章)
1番目で渡さない行が、呼び出しの量を決めます。 規則に慣れた運用担当の入稿表は、ほとんどの行が規則で通ります。AI が見るのは、誤りのある行と、対応表に無い書き方の行だけです。
AIに処理させる
させるのは、規則に合わなかった値について直した値の案と理由を書くことと、規則では決めきれない食い違いを指摘することです。
| させること | 中身 | 例 |
|---|---|---|
| 表記の直し | 一覧にある値のうち、意図していると読めるものを案にする | Facebook → meta(対応表で Facebook 広告は meta) |
| 形の直し | キャンペーン名を決まった形に組み直す案 | AW_Sale_brandx → 202610_brandx_aw-sale |
| 媒体の読み取り | 対応表に無い媒体の書き方から、どの媒体かを読む | 「インスタストーリーズ」→ Instagram の広告 |
| 食い違いの指摘 | 配信の種類と utm_medium、案件と広告主の部分などの食い違い | 配信の種類がメールなのに cpc |
| 判断できない | 案が1つに決まらないもの | 媒体の列が空で、utm_source も一覧に無い |
キャンペーン名の組み直しでは、年月を勝手に決めさせません。 年月は配信の開始日から決まるので、スクリプトが開始日から出した年月を渡し、AI にはそれを使わせます。 施策の部分は、元の値の語を小文字にしてハイフンでつなぐだけにし、語を足したり言い換えたりさせません。
| させないこと | 理由 |
|---|---|
| 規則の一覧に無い値を作る | 新しい表記ゆれの元になる |
| 規則そのものを直す提案 | 計測の設計の担当が決める |
| 入稿表やURLを書き換える | 直すのは運用担当 |
| ページのアドレスを直す | 点検の対象はパラメータだけ |
| 配信の開始日から年月以外を推し量る | 書かれていない情報を足さない |
1行目が、この構成でいちばん守るべきことです。 AI は、一覧に無くても「それらしい」値を案にしがちです。instagram_story のように、規則の一覧に無い値が案として出ると、それを採った時点で表記ゆれが1つ増えます。 そこで、スキーマの enum で utm_source と utm_medium の案を一覧の値に縛り、スクリプトでも8番目の再判定をします。
指示内容を固定する
あなたは広告代理店の運用部で、入稿前のURLのUTMパラメータを校正する立場です。
渡された規則と入稿の行の情報だけを使って、直した値の案を作ってください。
【やること】
- issues に挙がっている値ごとに、直した値の案(suggested)と理由(reason)を書く
- utm_source・utm_medium の案は、渡された一覧の値から選ぶ
- utm_campaign の案は「{yyyymm}_{広告主の略称}_{施策}」の形にする
- yyyymm は渡された値をそのまま使う
- 施策は元の値の語を小文字にし、語のあいだをハイフンでつなぐ。語を足さない
- 入稿の行の媒体・配信の種類と、パラメータの値が食い違っていれば mismatches に書く
- 案が1つに決まらないときは、suggested を空にし、needs_human を true にする
【厳守事項】
- 一覧に無い値を案にしないでください。近い値が無ければ needs_human にしてください。
- 規則を変えるべきだという提案はしないでください。
- ページのアドレスの部分には触れないでください。
- 媒体の列が空、または読み取れないときに、utm_source から媒体を決めつけないでください。
- reason には、どの規則に合わなかったか、なぜその案にしたかを1文で書いてください。
【命名規則】{rules}
【この行で使える値の一覧】{allowed_values}
【媒体の対応表(該当しそうな行)】{media_map}
【広告主の略称】{client_alias}
【点検する行】{rows_json}
「媒体から決めつけない」を書くのは、逆向きの推測を止めるためです。 媒体の列が空の行で utm_source=line とあれば、AI は「LINE の広告」と読んで utm_medium の案まで作ります。入稿表のほうが誤っている可能性もあるので、ここは人に回します。
「語を足さない」も要ります。 sale を autumn-sale にするような、気の利いた直しをさせないためです。施策の名前を決めるのは運用担当で、校正の役割はその表記をそろえることだけです。
出力形式を固定する
構造化出力で、次の形の JSON を受け取ります。
{
"rows": [
{ "row_id": "",
"fixes": [
{ "param": "utm_source | utm_medium | utm_campaign | utm_content | utm_term | utm_id",
"original": "", "suggested": "", "reason": "" }
],
"mismatches": [
{ "field": "", "detail": "" }
],
"needs_human": false }
]
}
スキーマでは param を enum で縛り、suggested に pattern で ^[a-z0-9_-]*$ を付けます。空の文字列も許す形にして、案が無いときに空を返せるようにします。 公式のページでは、すべての項目を required にし、オブジェクトに additionalProperties: false を必ず付けるとされているので、それに合わせます。
row_id は、スクリプトが付けた行の番号をそのまま返させます。 渡した行と返った行を突き合わせ、抜けた行は「要再点検」にします。 公式のページでは、応答が refusal の型で返ることや、出力の上限で途中で止まった場合は status が incomplete になることがあるとされているので、どちらも JSON として読む前に確かめます。
たとえば、メールの配信の行で次の値が来たとき、返ってくる中身はこうなります。
【入稿の行】媒体:自社メルマガ/配信の種類:メール/案件:BRX-2610-03
utm_source=Newsletter&utm_medium=cpc&utm_campaign=AW_Sale
【スクリプトの判定】
utm_source:大文字あり/utm_campaign:形が合わない
媒体の対応表:自社メルマガ → newsletter・email(utm_medium が合わない)
【AI の案】
utm_source Newsletter → newsletter(大文字を小文字に。一覧の値)
utm_medium cpc → email(配信の種類がメールで、対応表の組は email)
utm_campaign AW_Sale → 202610_brx_aw-sale(年月と略称は渡された値)
3つ目の案の 202610 と brx は、AI が考えた値ではありません。 スクリプトが配信の開始日と案件のコードから出して渡した値を、そのまま使わせています。
| 右の列 | 中身 |
|---|---|
| 判定 | 適合/要修正/要確認 |
| 誤りの内容 | スクリプトの判定と AI の mismatches |
| 直した値の案 | fixes の param と suggested |
| 直したURL | 案を再判定して通ったときだけ、スクリプトが組み立てたもの |
| 理由 | reason |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 入稿のシート | Apps Script(読み取り・右の列への書き込み) | 点検する行と、点検の結果 |
| 命名規則・対応表・広告主の一覧 | Apps Script(読み取り) | 判定の規則 |
| OpenAI API | UrlFetchApp | 直した値の案と食い違いの指摘 |
| 点検の記録 | Apps Script(追記) | 点検した日時、行の数、判定ごとの数 |
入稿表の元のファイルには書き込みません。 運用担当が点検のシートの結果を見て、自分の入稿表を直します。広告の管理画面にも触れません。
人が確認する
- 運用担当が「要修正」の行を見る … 案を読み、採るなら直したURLを入稿表に写します。採らないなら、その理由を一言書きます
- 運用担当が「要確認」の行を点検の担当に回す …
needs_humanの行と、媒体の列が空の行です - 点検の担当が、回ってきた行と、案を採らなかった行を見る … 規則の側の不足なら、規則のシートか対応表を直します
3番目で規則の側を直すのが、この構成を育てる作業です。 対応表に無い媒体の書き方が来るたびに足していくと、AI に回る行が減り、規則で決まる範囲が広がります。
点検の担当が全行を見る形には戻しません。 第10章の6分には、規則で「適合」になった行を見る時間を入れていません。
運用担当が案を採らない理由は、たいてい3つに分かれます。 「広告主の指定でこの値を使う」「新しい媒体で、対応表がまだ無い」「施策の名前を広告主と決め直した」です。1つ目は規則の例外として広告主の一覧に書き、2つ目は対応表に足し、3つ目は入稿表の側を直します。 どれに当たるかを一言書いてもらうだけで、点検の担当の判断が速くなります。
例外に対処する
| 起きること | 対応 |
|---|---|
| URLが空、または http で始まらない | 「URLの形でない」として AI に渡さない |
# が ? より前にある | パラメータが # 以降に入っている。「並びの誤り」として運用担当へ |
| 同じパラメータが2回ある | 「重複」として、どちらを残すかを運用担当へ |
| 媒体が対応表に無い | AI に読ませ、案が出ても「要確認」とし、対応表に足す候補に記録 |
| AI の案が再判定に通らない | 案を捨てて「要確認」 |
| 応答が refusal・incomplete | その入稿表を「要再点検」にし、もう一度メニューから動かす |
| 6分を超えそう | 残りの行を「未点検」のまま止める |
| ページ側の元のパラメータがある | UTM 以外のパラメータは判定せず、そのまま残す |
最も多いのは4行目です。 運用が新しい媒体を始めるたびに出るので、対応表に足す候補の一覧を点検の担当が毎週見ます。
記録を残す
- 点検した日時、点検した人、入稿表の案件のコード、行の数
- 行ごとのスクリプトの判定と、AI に渡した内容、返ってきた JSON
- 運用担当が案を採ったか、採らなかった理由
- 対応表と規則のシートの変更の履歴
3つ目の「採らなかった理由」が、規則の穴を教えてくれます。 同じ理由が続くなら、規則か対応表のほうを直します。
規則のシートを直したときは、直した日をシートに書きます。 同じURLでも、規則を直す前と後で判定が変わるためです。配信が始まってからレポートで表記ゆれが見つかったとき、そのURLを点検した日の規則がどうだったかを確かめられるようにしておきます。
04実装レベルの3段階
本記事の想定は半自動化です。 1件30分のうち、URLを読んで規則と照らす作業と直し方を書く作業が自動になり、点検の担当に残るのは「要確認」の行と、規則と対応表の手入れです。 半自動化を2か月回すと、誤りの型が見えてきます。 運用担当ごと、媒体ごとに、どの誤りが多いかが点検の記録に残ります。多い誤りは、本格構成の生成のシートで選択式にして、作る段階で止めます。 本格構成でも、点検は残します。 選択式にしても、自由に書ける欄(施策の名前など)は残るためです。
05工数削減シミュレーション
導入後 100件 × 6分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 複数の広告主・媒体の運用を受け持ち、入稿のたびに数十本のURLにUTMパラメータを付けている広告代理店や、自社でウェブ広告とメール配信を運用するEC・小売・SaaSの企業。命名規則はあるが、確認が運用担当の目視で、Google アナリティクスのレポートで流入元が割れることがある場合。Google Workspace を使っている場合。
- 入稿するURLが月に数本で、目視で足りる場合。URLの生成ツールで値を選択式にしており、自由入力の余地が無い場合。広告の配信の設定でパラメータを自動で付けており、手でURLを作っていない場合。なお、命名規則そのものの設計と、計測の設計の判断は、この構成では代替できません。
07最小構成で試す方法
- 過去3か月の入稿表から、点検で誤りが見つかったものを5件選ぶ
- 命名規則のドキュメントと媒体の対応の取り決めを、テキストにまとめる
- 社内で使ってよいAIサービスの画面に、規則と入稿表の行を貼り付ける
- 「それぞれのURLのUTMパラメータを規則と照らし、合わない値について直した値の案と理由を書いてください。案は規則の一覧の値から選んでください。一覧に無ければ案を空にしてください。媒体の列と食い違う値も指摘してください」と指示する
- 出てきた指摘を、当時の点検で見つかった誤りと見比べる
見比べるのは、案が規則の一覧の値になっているかです。 一覧に無い値が案として出るなら、本番では enum と再判定で止める必要があることが分かります。
| 出てきた内容 | 判断 |
|---|---|
| 当時の誤りがおおむね拾え、案が一覧の値 | Apps Script の組み立てに進む |
| 一覧に無い値が案に出る | スキーマの enum と再判定で止める。構成は有効 |
| 規則の文章が曖昧で、AI の読み方が割れる | 規則をシートの形に直すのが先 |
3行目が出たら、それが第3章の(b)の正体です。 規則を知っている人の頭の中にあって、ドキュメントに書かれていない取り決めがあります。それを書き出すことが、AI の有無にかかわらず最初の仕事です。
大文字・小文字や全角の誤りは、この段階では試さなくて構いません。 本番ではスクリプトの規則で判定するので、最小構成で見るのは直し方と食い違いの指摘が AI に任せられるかだけです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 一覧に無い値が案に出る | enum で縛り、スクリプトでも再判定する |
| 施策の名前を言い換えた案が出る | 語を足さない・言い換えないと指示する |
| 年月を誤った案が出る | 配信の開始日からスクリプトが年月を出して渡す |
| 媒体の列が空なのに媒体を決めつける | 「決めつけない」と指示し、needs_human にする |
| 前後の空白を黙って消してしまう | 空白は「空白あり」として判定に残す |
| パーセントエンコードの値を誤判定する | 戻してから判定し、組み立てで再びエンコードする |
# が ? より前にある | 並びの誤りとして運用担当へ |
| スキーマで誤りが返る | すべての項目を required にし、additionalProperties: false を付ける |
| refusal・incomplete を JSON として読む | 読む前に応答の型と status を確かめる |
| 貼り付けの途中で点検が動く | メニューから動かす形にする |
| 入稿表ごとにスクリプトを付けようとする | メニューはバインドされたスクリプトだけ。点検のスプレッドシートを1つにする |
| 対応表が育たない | 「要確認」の媒体の書き方を、毎週対応表に足す |
上の2行が、この構成の失敗のほとんどです。 どちらも、校正の仕組みが新しい表記ゆれを持ち込む失敗です。校正の案が規則の外に出ないことを、スキーマと再判定の二重で守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 広告主の名前と略称、公開前の施策の名前と特設ページのアドレス、配信の開始日、クリエイティブの ID です。個人の情報は原則として含みません。
- 公開前の情報の扱いを広告主との取り決めで確かめる … 施策の名前や特設ページのアドレスは、配信が始まるまで広告主にとっての秘密です。外部の AI に渡してよいかは、広告主との契約の守秘の取り決めによります
- 渡す範囲を絞る … AI に渡すのは、誤りのあるパラメータと、その行の媒体・配信の種類・案件のコードだけにできます。ページのアドレスのパスは記号に置き換えて渡せます
- API に送った内容の扱いを確かめる … OpenAI の API に送ったデータの扱いは、利用する契約と OpenAI の規約で確かめてから使います
- URLに個人の情報を入れない … メール配信のURLに、宛先のメールアドレスや会員の番号をパラメータで付ける運用がある場合は、点検の対象から外すか、渡す前に落とします
- 案を自動で入稿表に書き込まない … 採るかどうかは運用担当が決めます
誤りが起きた場合のリスクは、誤りを見落として配信することと、誤った案を採って配信することの2つです。 前者は規則の判定の漏れから、後者は AI の案から起きます。規則をシートに持たせて判定を機械にし、AI の案を同じ規則で再判定することで防ぎます。
10まず何から始めるか
1週目:命名規則をシートに直す
共有のドキュメントの規則を、パラメータごとの行、値の一覧、キャンペーン名の正規表現に直します。規則を最もよく知っている担当が、ドキュメントに書かれていない取り決めを書き足します。
2週目:媒体の対応表を作り、5件で試す
過去3か月の入稿表から媒体の列の書き方を集め、使うべき utm_source と utm_medium を並べます。誤りのあった入稿表5件を、手元のAIサービスで試します。一覧に無い値が案に出ないかを最優先で見ます。
3週目:規則の判定をつなぐ
点検のスプレッドシートにメニューと規則の判定を作ります。この時点では AI を呼ばず、規則の判定だけで右の列を埋めます。 点検の担当がいつもの目視と並べて見ます。
4週目:AI の案と再判定を足す
OpenAI API の呼び出し、案の再判定、直したURLの組み立てを足します。初回は1名の運用担当の入稿表だけで動かします。
2か月目: 運用担当全員に広げ、案を採らなかった理由を毎週読みます。3か月目以降: 1件30分が何分になったかを実測し、アクセス解析のレポートで流入元の表記ゆれの合算が要らなくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
UTM パラメータ(utm_id・utm_source・utm_medium・utm_campaign・utm_source_platform・utm_term・utm_content など)の意味。値の大文字と小文字が区別され utm_source=google と utm_source=Google が別に扱われること。どの場合も utm_source・utm_medium・utm_campaign を使う必要があること。関連するパラメータもあわせて設定することが強く推奨されること。設定されていない場合にレポートに「(not set)」と表示されること | Google アナリティクス ヘルプ: URL ビルダー | 2026-10-08 |
Docs・Sheets・Slides・Forms に独自のメニューを足せること。onOpen の関数の中にメニューのコードを書くこと。メニューを作れるのはバインドされたスクリプトだけであること | Google Apps Script: Custom Menus | 2026-10-08 |
| 1回の実行が6分までであること。URL Fetch の呼び出しが一般で1日2万回、Google Workspace で1日10万回であること | Google Apps Script: Quotas for Google Services | 2026-10-08 |
Responses API の text.format に type: "json_schema"・strict: true・スキーマを渡すこと。すべての項目を required にし、オブジェクトに additionalProperties: false を必ず付けること。文字列の pattern が使えること。応答が refusal の型で返ることがあり、出力の上限で止まると status が incomplete になること | OpenAI API: Structured model outputs | 2026-10-08 |
命名規則と、どのパラメータを必須にするかは、社内の計測の設計に沿って決めてください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1123)についてのご相談はこちらから。
