Google広告の品質スコアをPythonで一括監視する実装
Google広告の品質スコアは、クリック単価に直結する指標だ。だが管理画面で列を足して1件ずつ眺める運用は、キーワードが増えるほど回らなくなる。運用中のアカウントで試したところ、PythonとGoogle Ads APIを使えば、全キーワードの品質スコアを数秒で一括取得できた。この記事では、実際に使ったGAQLクエリと、スコアがnullで返るキーワードへの対処、週1で変化を検知する運用手順まで、そのまま真似できる形でまとめる。
なぜ品質スコアは手作業で追いきれないのか
品質スコアは推定CTR・広告の関連性・ランディングページの利便性の3要素から、1〜10で決まる(検索キャンペーンの品質スコアについて)。スコアが上がればクリック単価は下がる。逆に低いキーワードを放置すると、同じ順位でも余計な費用を払う。
問題は確認のコストだ。管理画面ではキーワードタブに列を追加すれば見えるが、キャンペーンをまたいだ横断比較や、先週との差分は取りにくい。運用しているアカウントではキーワードが約1,200件あり、目視の棚卸しに毎週30分近くかかっていた。ここを自動化する。
keyword_viewから3要素を一括取得するGAQL
品質スコアはキーワード単位の指標なので、GAQLではkeyword_viewから引く。総合スコアはad_group_criterion.quality_info.quality_score、内訳は同じquality_info配下のcreative_quality_score・post_click_quality_score・search_predicted_ctrに入っている(AdGroupCriterionリファレンス)。
ブックマークして、自分のアカウントに合わせて書き換えて使ってほしい。次の1行がそのまま動く土台になる。
SELECT campaign.name, ad_group.name, ad_group_criterion.keyword.text, ad_group_criterion.quality_info.quality_score, ad_group_criterion.quality_info.creative_quality_score, ad_group_criterion.quality_info.post_click_quality_score, ad_group_criterion.quality_info.search_predicted_ctr, metrics.cost_micros, metrics.conversions FROM keyword_view WHERE segments.date DURING LAST_30_DAYS
GAQLの書き方そのものに不安があるなら、GAQLの書き方を実際に使ってわかった5つのコツを先に読むと詰まりにくい。APIの初期設定でつまずくなら、Google広告APIをPythonで動かす手順と初回の壁も参考になる。この手順の完全版はnoteの実践ガイドにまとめている。
実測でつまずいた点:スコアがnullで返るキーワード
クエリを流して最初に戸惑ったのが、品質スコアが空で返る行だ。約1,200件のうち2割ほどで、quality_scoreが取得できなかった。原因は、直近のインプレッションが少なくGoogleがスコアを算出していないキーワードだった。
APIではこの値がnullになる、あるいはenumがUNSPECIFIED / UNKNOWNで返る。ここをそのまま集計に混ぜると、平均品質スコアが実態より低く出る。対策はシンプルで、Python側でquality_scoreがNoneの行を除外してから平均を取る。除外した件数は別途カウントし「スコア未算出◯件」と併記すると、判断を誤らない。
もう1点、creative_quality_scoreなどの内訳はBELOW_AVERAGE / AVERAGE / ABOVE_AVERAGEというenum文字列で返る。数値ではないので、改善対象を機械的に抜き出すならBELOW_AVERAGEだけをフィルタするとよい。
週1で品質スコアの変化を検知する運用
取得を自動化したら、次は「下がったキーワードだけ」を拾う運用にする。毎週同じクエリを実行し、前回のCSVと突き合わせて品質スコアが2以上下がったキーワードを抜き出すだけでよい。これで目視30分が3分になった。
運用に落とすときのチェック項目を、保存アセットとして置く。ブックマークして自分の環境に合わせて使ってほしい。(1)quality_scoreがNoneの行を除外してから平均を出す(2)BELOW_AVERAGEの内訳を持つキーワードを改善候補として抜き出す(3)前週比でスコアが2以上下落したものをアラート対象にする(4)cost_microsは100万で割って円換算してから費用と並べる(5)実行はインプレッションの多い平日午前に固定し、日次のブレを避ける。
抽出した品質スコアの低いキーワードを、改善提案としてクライアント向け資料に落とすなら、AIスライド作成ツールを使うと図解化が速い。
まとめ
品質スコアはkeyword_viewから3要素まとめて取得でき、あとはnull除外と前週比の差分検知を足すだけで運用に乗る。管理画面での目視を週1の自動抽出に置き換えれば、クリック単価の無駄を早く見つけられる。まずは今日、手元のアカウントで上のクエリを1回流すところから始めてほしい。
実務でそのまま使いたい人へ
本記事の手法の完全版(実際のコード・テンプレート・つまずき対処つき)は、運営者のnote(note.com/ryo_ai_hack)で公開している。実データに基づく実践ガイドをまとめて読める。

コメント
コメントを投稿