HPでそれぞれのPV(ページビュー)を都度GA4で確認するのは大変で、非効率ですよね。
そこでGA4のPVデータを毎朝自動でNotionに反映する仕組みを構築しました。この記事では、その考え方と設定のポイントを解説します。
エンジニアでない方でも、今は生成AIと対話しながら実装を進めれば、GAS設定も簡単にできます。「コードは書けないけれど、仕組みを作ってみたい」という方は参考になるかと思います。
全体の仕組み
今回構築した仕組みの全体像は、以下の通りです。
GA4(ページ別PV計測)
↓
GA4 Data API
↓
Google Apps Script(GAS)
↓
Notion API
↓
NotionのPV管理プロパティを自動更新GASを「中継役」として、毎朝決まった時刻にGA4からPVデータを取得し、Notionへ書き込みます。
GA4・Notionそれぞれが持つAPI(外部とデータをやり取りする窓口)を、GASのプログラムでつなぐイメージです。
スクレイピングのように管理画面を直接読み取る方法も考えられますが、UI変更や規約面のリスクがあるため、今回は両者が公式に提供しているAPIを使う構成にしています。

必要な設定
この仕組みを作るために必要だったのは、大きく3つです。
① GA4側の準備
対象プロパティの閲覧権限に加え、Google Cloud Consoleで「Google Analytics Data API」を有効化しておく必要があります。
これを忘れると、GASを実行しても「GA4データなし」という結果になってしまうため、最初につまずきやすいポイントです。
また、GA4のプロパティID(数字の羅列)もあとで使用するため、GA4の管理画面(管理 > プロパティ設定)から確認しておきます。

【Google Analytics Data API有効化画面】
② Notion API連携の準備
Notionをプログラムから操作するには、「インテグレーション」という連携設定を作成し、専用のAPIキー(シークレットキー)を発行します。
この作成はワークスペースのオーナー権限者のみで、メンバー権限ではできません。権限がない場合は権限変更してもらうか、オーナー権限者に作成を依頼する必要があります。
また、作成後に表示されるAPIキーは、その画面でしか確認できないため、必ずその場でコピーし、安全な場所に保存しておきましょう。

【コネクト名に「GA4 Notion同期」などのわかりやすい名前を入れて、コネクトを作成】

【Notionインテグレーション作成画面】
作成したインテグレーションは、同期したいNotionデータベースに対して個別に「接続」を許可する必要があります。
データベース右上のメニューから、作成したインテグレーションを検索して接続します。
③ Notionデータベースの準備
既存の記事管理データベースに、PV管理用のプロパティを6つ追加しました。


【プロパティ追加後のNotionデータベース】
ポイントは「GA4 pagePath」です。GA4はURL全体ではなく、ドメインを除いたパス部分(例:「/posts/XXXXXXXX」)でページを識別するため、NotionとGA4を正しく紐付けるための橋渡し役として用意しました。
この列は最初はすべて空欄で問題ありません。
ここまでの設定ができたら、あとはGASでGA4からデータを取得し、Notionへ書き込む処理を組むだけです。
処理の流れは「GA4から数値を取ってきて、対応する記事のNotionページに書き込む」というシンプルなものですが、まず1記事だけで動作確認をしてから全件に広げるのがおすすめです。
実際、最初のテストでは1記事だけpagePathを手入力し、正しくPVが入ることを確認したうえで、次のステップに進めます。

【GASコードエディタ画面】
ハマったポイント
実際に運用を始めてから、想定していなかった問題が2つ発生しました。
① 約130記事分のpagePath、手入力は現実的ではない
自動化するにはGA4 pagePathが必要ですが、1記事ずつ手入力すれば同期できることはわかっていても、約130記事分を手作業で入力するのは現実的ではありません。
そこで、Notionに登録済みの「記事URL」から、自動的にpagePathを生成する処理を追加できます。
記事URLのドメイン部分を取り除くだけの単純な処理ですが、これにより新しい記事を追加する際も、入力するのはタイトル・URL・公開日のみで済むようになります。

【pagePathが一括入力されたNotion画面】
② 記事が100件を超えると、一部だけPVが同期されない
運用を続けるうち、公開日が新しい記事を中心に、PVがずっと空欄のままの記事が複数見つかりました。
GASの実行ログを確認してもエラーは出ておらず、「同期完了」と正常に表示されているのに、です。

【PVが空欄のまま残っているNotion画面】
こちら、ログをよく見ると、「Notion記事数:100」という表示が気になりました。
記事は127本あるはずなのに、GASが認識しているのは100件だけだったのです。
ここから原因を辿ると、Notion APIの仕様にたどり着きました。
Notionのデータベースをクエリで取得するAPIは、1回のリクエストで最大100件までしかデータを返しません。
101件目以降を取得するには、レスポンスに含まれる「まだ続きがあるか(has_more)」「次はどこから取得するか(next_cursor)」という情報を使って、リクエストを繰り返す「ページネーション」という処理が必要です。
この処理が抜けていたため、101件目以降の記事がそもそも同期対象に入っていなかったのです。
対応として、続きがある限りリクエストを繰り返す処理を追加し、記事数に関わらず全件が同期対象に含まれるように修正しました。
修正後に再実行すると、ログの表示は「Notion記事数:127」に変わり、これまで空欄だった記事にも無事PVが入りました。

【ページネーション対応後のコード】
一覧取得系のAPIには、こうした「1回のリクエストで返せる件数の上限」が設定されていることが少なくありません。
データが少ないうちは気づきにくく、増えてきたタイミングで初めて表面化する問題なので、覚えておくと役立つ知識です。
ちなみに、空欄がすべて「同期処理の不具合」とは限りません。
稀に、GA4側で実際にPVが記録されていないケースもあるため、判断に迷ったときはGASの実行ログを確認し、処理自体が正しく完了しているかをまず切り分けるのがおすすめです。
完成後の運用フロー
仕組みが完成したあとの運用は、非常にシンプルです。新しい記事を公開した際も、以下の3ステップだけで対応できます。
- Notionデータベースに、新しい記事の行を追加する(記事タイトル・記事URL・公開日)
- GASでpagePath自動生成の処理を実行する
- 翌朝の自動実行を待つ(急ぎの場合は同期処理を手動実行)
自動実行は、GASの「トリガー」メニューから時間主導型のトリガーを設定するだけで組めます。
毎日決まった時刻に処理が走るようになるため、一度設定してしまえば、あとは特に意識する必要はありません。

【GAS実行画面】
以前は、週次の報告のたびにGA4を開いて記事を1本ずつ検索し、数字を確認する作業が発生していましたが、今はその作業自体がなくなりました。
毎朝Notionを開くだけで、すべての記事のPVが最新の状態になっています。

【完成後のNotion PV管理画面】
まとめ
GA4とNotionを連携し、記事ごとのPVを自動管理する仕組みについて解説しました。
・ GA4 Data API → GAS → Notion APIという構成で、毎朝自動同期が実現できる
・ 記事数が増えるタイミングで、API特有の「取得件数の上限」に注意が必要
・ 「空欄=未同期」と決めつけず、GA4側の実データも確認する視点が大切
エンジニアでなくても、生成AIと対話しながら一つひとつ確認して進めれば、実用的な自動化の仕組みは十分構築できます。
同じようにNotionでの記事管理・PV集計に課題を感じている方の参考なれば幸いです。
今回はGA4のPV連携という一例でしたが、GASを使った自動化の仕組みは、コードに詳しくない方でも生成AIと対話しながら十分に構築できます。
データの集計・転記・通知など、日々の業務の中で「手作業が発生している部分」があれば、ぜひ一度試してみてください。
BtoBマーケティングにおけるデータ活用や業務効率化でお悩みの際は、こちらUDATAお問合せまでお気軽にお問い合わせください。