GMOアドマーケティングのデザイナー、R.Mです。
コーポレートサイト配下のコンテンツについて、GA4の数値をSlack通知する仕組みをGASで作成してみました。
実現したいこと
- 週報的な形で、PV TOP3のコンテンツ記事をSlack通知して、サイト訪問ユーザーが今関心を持っているコンテンツをお知らせする
- 毎週自動的にポストすることで、能動的にGA管理画面に見に行かなくても傾向を知ることができるようにする
- 結果を見て深掘りしたい(どこからの流入が多いのか?検索キーワードは何か?等)ときにすぐに確認できるようにする
実装したい仕様
- 集計期間
- 前週(昨日〜7日前まで)
- 通知する項目
- PVの多いコンテンツトップ3のタイトル・表示回数(PV数)
- コンテンツ閲覧ユーザーの回遊率(ユーザーあたりのビュー)
- Looker Studio であらかじめ設定・作成したレポートURL
- 通知タイミング
- 毎週月曜10~11時の間にSlackにポスト
まず、完成形がこちら
手順
- Google スプレッドシート のアドオン「GA4 Magic Reports」を使って、取得したい情報をリスト化
- 「Incoming Webhook」をSlackインテグレーションに追加
- Googleスプレッドシート の拡張機能「Apps Script」でSlack通知の設定
1. Google スプレッドシート のアドオン「GA4 Magic Reports」を使って、取得したい情報をリスト化
まずは「拡張機能>アドオン>アドオンを取得」で「GA4 Magic Reports」を検索してインストールします。
インストールしたら、「拡張機能>GA4 Magic Reports>Create New Report」で取得したいデータの設定をします。
▼「GA4 Magic Reports」の基本的な操作方法については、下記記事を参考にさせていただきました。
【2023年・チートシートあり】GA4 Magic Reports 基礎完全マニュアル | マーチコンサルティング
- Name your report
- 任意の名称をつけます。
- Google Analytics 4 Property
- 対象のGA4プロパティを選択します。
- Date Range
- Start Date: 7daysAgo
- End Date: yesterday
- Metrics and Dimensions
- Metrics:
Views,
Views Per User
- GA4での日本語表示でいう「表示回数」と「ユーザーあたりのビュー」です。
- Dimensions: Full page URL, Page Title
- Metrics:
Views,
Views Per User
- Other Settings
- 今回は、コンテンツの一覧ページ(contents/)とコンテンツのカテゴリごとの一覧ページ(contents-cat/xxx)を除いて、コンテンツ配下の記事のみ(contents/xxx)取得したかったため、ディメンションフィルターを設定しました。
- Exclude Full page URL Exact www.gmo-am.jp/contents/
- AND
- Exclude Full page URL Contains www.gmo-am.jp/contents-cat/
- AND
- Include Full page URL Contains contents
- Create
生成された「GA4 Reports Configuration」に「Limit」の行に追記します。
今回は3位までの取得でよいので3と記載します。
この状態で「拡張機能>GA4 Magic Reports>Run Reports」をクリックしてうまくいけば、右に「週次コンテンツレポート」のシートが追加されます。
「週次コンテンツレポート」のシートにレポートが出力されました。
最後に、「拡張機能>GA4 Magic Reports>Schedule Reports」で自動更新の設定をします。
今回は毎週月曜のAM7時〜AM8時に更新されるようにします。
2. 「Incoming Webhook」をSlackインテグレーションに追加
Incoming Webhookをインストールして、Slackに追加します。
設定画面の「チャンネルへの投稿」で、投稿したいSlackチャンネルを選択し「Incoming Webhook インテグレーションを追加」をクリックします。
ページ下部で、名前とアイコンをカスタマイズできます。
Webhook URLはこのあと使用します。
3. Google スプレッドシート の拡張機能「Apps Script」でSlack通知の設定
ふたたびGoogle スプレッドシートに戻ってきたら、「拡張機能>App Script」をクリックします。
別タブでApp Scriptが開きます。
デフォルト「コード.gs」になっていますが、わかりやすくするため「Slack通知.gs」のファイル名に変更しました。
中身のコードは下記になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
function notice() { var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得 var activeSheet = SpreadsheetApp.getActive().getSheetByName('週次コンテンツレポート'); //シート名を記入 var List1st = activeSheet.getRange("B16").getValues(); //B16セルの1位の記事名を取得 var List2nd = activeSheet.getRange("B17").getValues(); //B17セルの2位の記事名を取得 var List3rd = activeSheet.getRange("B18").getValues(); //B18セルの3位の記事名を取得 var List1stpv = activeSheet.getRange("C16").getValues(); //C16セルの1位の記事のPV数を取得 var List2ndpv = activeSheet.getRange("C17").getValues(); //C17セルの2位の記事のPV数を取得 var List3rdpv = activeSheet.getRange("C18").getValues(); //C18セルの3位の記事のPV数を取得 var ListPageViewsPerUser = activeSheet.getRange("D12").getValues(); //D12セルの、コンテンツ記事閲覧ユーザーあたりのビュー数を取得 //送信するSlackのテキストを指定 var slackText = "先週1週間のコンテンツPVランキングTOP3をお届けします📣\n" + "----------\n" + "1位: " + List1st + " / " + List1stpv + "pv" + "\n" + "2位: " + List2nd + " / " + List2ndpv + "pv" + "\n" + "3位: " + List3rd + " / " + List3rdpv + "pv" + "\n" + "----------\n" + "コンテンツ閲覧ユーザーの一人当たりのPV数は" + ListPageViewsPerUser + "でした!" + "\n" + "\n" + "今週のお知らせは以上となります。\n" + "期間を指定して、4位以下の詳しい情報も確認してみましょう!\n" + "https://lookerstudio.google.com/u/0/reporting/xxxxxxxx"; //既存のLooker Studio レポートURLを記載 sendSlack(slackText); } function sendSlack(slackText){ var webHookUrl = "https://hooks.slack.com/services/xxxxxxxx"; //取得したWebhook URLを設定 var jsonData = { "text" : slackText, "username" : "GMO-AM人気コンテンツのお知らせ" }; var payload = JSON.stringify(jsonData); var options = { "method" : "post", "contentType" : "application/json", "payload" : payload, }; UrlFetchApp.fetch(webHookUrl, options); } |
取得したいセルは固定なので、セル名で指定
スプレッドシートからSlackに転記したい列の指定をします。
List1st などの名前はわかるようにつけておけば良いです。
1 2 3 4 5 6 7 |
var List1st = activeSheet.getRange("B16").getValues(); //B16セルの1位の記事名を取得 var List2nd = activeSheet.getRange("B17").getValues(); //B17セルの2位の記事名を取得 var List3rd = activeSheet.getRange("B18").getValues(); //B18セルの3位の記事名を取得 var List1stpv = activeSheet.getRange("C16").getValues(); //C16セルの1位の記事のPV数を取得 var List2ndpv = activeSheet.getRange("C17").getValues(); //C17セルの2位の記事のPV数を取得 var List3rdpv = activeSheet.getRange("C18").getValues(); //C18セルの3位の記事のPV数を取得 var ListPageViewsPerUser = activeSheet.getRange("D12").getValues(); //D12セルの、コンテンツ記事閲覧ユーザーあたりのビュー数を取得します |
B16:PV1位の記事名
B17:PV2位の記事名
B18:PV3位の記事名
C16:PV1位の記事のPV数
C17:PV2位の記事のPV数
C18:PV3位の記事のPV数
D12:コンテンツ記事閲覧ユーザーあたりのビュー数
上記、スプレッドシートの赤枠で囲ったセルのデータをSlackに記載します。
GA4 Magic Reportsの設定でFull page URLを指定しましたが、ディメンションフィルターをかけるために取得したデータなのでSlack通知には使いませんでした。
▼今回はセル名で指定しているので行番号列番号は使用していないですが、行番号列番号の指定がよくわからないな〜というときに参考にさせていただきました。
GASのgetRangeの使い方解説!スプレッドシートのセル範囲を指定する4つの方法 | AutoWorker〜Google Apps Script(GAS)とSikuliで始める業務改善入門
送信するSlackテキストの指定
シンプルな構成で通知するようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 |
var slackText = "先週1週間のコンテンツPVランキングTOP3をお届けします📣\n" + "----------\n" + "1位: " + List1st + " / " + List1stpv + "pv" + "\n" + "2位: " + List2nd + " / " + List2ndpv + "pv" + "\n" + "3位: " + List3rd + " / " + List3rdpv + "pv" + "\n" + "----------\n" + "コンテンツ閲覧ユーザーの一人当たりのPV数は" + ListPageViewsPerUser + "でした!" + "\n" + "\n" + "今週のお知らせは以上となります。\n" + "期間を指定して、4位以下の詳しい情報も確認してみましょう!\n" + "https://lookerstudio.google.com/u/0/reporting/xxxxxxxx"; //既存のLooker Studio レポートURLを記載 sendSlack(slackText); |
記載しているLooker Studio であらかじめ設定・作成したレポートでは、日時指定をして記事タイトルとURLを選択すると「チャネル」「流入元」「キャンペーン名)」ごとのセッション、検索クエリの詳細情報を確認できます。
Incoming Webhookと連携
Incoming Webhookの設定画面から、取得したURLをコピーしてきて設定します。
1 |
webHookUrl = "https://hooks.slack.com/services/xxxxxxxx"; //取得したWebhook URLを設定 |
トリガーの設定
App Scriptのメニューから「トリガー」を選択します。
毎週月曜AM9~10時の間にSlackに通知が来るようにしたいので、下記の設定をします。
- イベントのソースを選択: 時間主導型
- 時間ベースのトリガーのタイプを選択: 週ベースのタイマー
- 曜日を選択: 毎週月曜日
- 時刻を選択: 午前9時〜10時
完成
やりたいことが実装できました!
定点観測してコンテンツ立案する際には、役立つのではないかと思います。