n8nでGoogle Search Console APIに接続してデータを取得する方法【認証設定から実装まで】

柴田

AIクン、いいこと思いついたぞ!サチコ(Googleサーチコンソール)のデータをn8nで自動取得したらイイカンジなんじゃないか!

AI

イイカンジってなんですカ?せめてワークフローの設計をしっかりしてからにしてくだサイ…

柴田

いや、とにかくデータがあればなんでもできる!使い方は無限大!ということでn8nでサチコにAPI接続してデータ取ってくる方法教えておくれよ!

AI

…AIはデータ学習が基本だから、意外と反論できナイ

このブログで進めているGSC自動解析ワークフローの第2回です。

前回の記事(全体設計)では、6ノード構成でリライト優先度を自動判定する仕組みの概要を説明しました。今回はその最初のステップ、Google Search Console APIへの接続とデータ取得の実装を解説します。

【この記事でわかること】

  • Google Search Console APIをn8nで使うための認証設定
  • 実際に取得できるデータの種類
  • ハマりやすいポイントと解決策
目次

事前準備

必要なもの

  • Google Search Consoleに登録済みのサイト
  • Google Cloud Platformのアカウント
  • n8nが動いているVPS(当ブログの環境:ConoHa VPS)
柴田

VPSにn8nを立てる方法は次の記事をご覧ください!

Step1:Google Cloud PlatformでAPIを有効化する

STEP
プロジェクトを作成する

Google Cloud Platformにアクセスして、新しいプロジェクトを作成します。

STEP
Search Console APIを有効化する

左メニューから「APIとサービス」→「ライブラリ」を開き、「Google Search Console API」を検索して有効化します。

STEP
OAuth認証情報を作成する

「APIとサービス」→「認証情報」→「認証情報を作成」→「OAuthクライアントID」を選択します。

アプリケーションの種類は「ウェブアプリケーション」を選択。

承認済みのリダイレクトURIには以下を入力します。

https://あなたのn8nのURL/rest/oauth2-credential/callback
柴田

最終的に出てくるクライアントIDとクライアントシークレットは後で使うので保存しておいてください!

⚠️ ハマりポイント

リダイレクトURIの末尾にスラッシュを入れると認証が通らない場合があります。/callbackで終わるようにしてください。

Step2:n8nにGoogle認証情報を設定する

STEP
クレデンシャル(認証情報)を追加する

n8nの管理画面で「Credentials」→「Create Credential」→「Google OAuth2 API」を選択します。

GCPで取得したクライアントIDクライアントシークレットを入力して、「Connect my account」をクリックします。

柴田

Credentialはわかりやすいように名前をつけておいた方がいいですね

⚠️ ハマりポイント② VPS上のn8nにHTTPSが設定されていないとOAuth認証が通りません。当ブログの環境ではCaddy×Dockerで設定しています。詳しくはこちらの記事を参照してください。

STEP
スコープを確認する

GSCのデータを取得するには以下のスコープが必要です。

https://www.googleapis.com/auth/webmasters.readonly

n8nのGoogle OAuth2設定画面で追加されているか確認してください。

credential3

Step3:HTTPリクエストノードでGSCデータを取得する

STEP
ノードの設定

n8nのワークフローにHTTP Requestノードを追加して以下の通り設定します。

項目設定値
MethodPOST
URLhttps://www.googleapis.com/webmasters/v3/sites/{サイトURL}/searchAnalytics/query
Credential TypeGoogle OAuth2 API
Google OAuth2 APIStep2で設定したクレデンシャルを選択
Specify BodyUsing JSON
柴田

ただし、ここ、結構つまづきポイントが多かったので先に「実際に詰まったこと」をご覧ください

{サイトURL}の中で「:」や「/」を使う場合はURLエンコードした「:」→「%3A」、「/」→「%2F」で書いてください。ここも詳しくは「実際に詰まったこと」を参照してください。

n8n1
STEP
リクエストボディの設定

以下のJSONをBodyに設定します。

{
  "startDate": "{{ new Date(Date.now() - 90 * 24 * 60 * 60 * 1000).toISOString().split('T')[0] }}",
  "endDate": "{{ new Date().toISOString().split('T')[0] }}",
  "dimensions": ["page", "query"],
  "rowLimit": 1000,
  "dataState": "final"
}

パラメータの説明

パラメータ内容
startDate / endDate過去90日分のデータを取得
dimensionsページURLとキーワードの組み合わせで取得
rowLimit最大1000行(記事数が多い場合は調整)
dataStatefinalにすることで確定データのみ取得

⚠️ ハマりポイント③ サイトURLはGSCに登録している形式と完全に一致している必要があります。https://ありとhttp://あり、末尾スラッシュありなしで別サイト扱いになります。

Step4:取得できるデータの確認

正常に動作すると以下のようなデータが返ってきます。

{
  "rows": [
    {
      "keys": ["https://example.com/article1/", "キーワード1"],
      "clicks": 45,
      "impressions": 1200,
      "ctr": 0.0375,
      "position": 8.3
    }
…
  ]
}
データ内容
keys[0]記事のURL
keys[1]流入キーワード
clicksクリック数
impressions表示回数
ctrクリック率
position平均掲載順位
n8n2

実際に詰まったこと

APIの取得まで

OAuthクライアントIDを作る前に「同意画面」の設定が必要です。

同意画面設定のスクショはこちら

「同意画面で設定を行う必要があります」から進みます。

必要事項を入力します。

コレ以外は私はそんなに詰まらなかったです。

n8nのノード設定

クレデンシャル(認証設定)までは詰まらなかったですが、実際のノードを設定してデータを取ってくる際に結構詰まりました。

柴田

ココは先に確認しておきましょう

1.まずはサチコ(Googleサーチコンソール)の状態を確認しましょう

確認ポイントは2つ。

① 画面左上、プルダウンから選べるプロパティを「ドメインプロパティ」「URLプレフィックス」のどちらで登録したか
② 画面左下、「設定」→「ユーザーと権限」でAPIを取得したアカウントがオーナーかフルの権限で登録されているか

②は登録されていなかったら登録しましょう(「ユーザーを追加」から簡単にできます)。オーナーかフルの権限がないとAPIでデータを拾ってこれません。

①はStep3、ノードの設定の{サイトURL}の書き方に関わってきます。

2.サチコで確認したことに注意してn8nのノードのURLを書こう

「ドメインプロパティ」で登録してる場合

例えば「example.com」といった感じでその下に「ドメインプロパティ」と書いてあるプロパティの場合です。

このときは、{サイトURL}を「sc-domain:ドメイン」の形にします。「sc-domain:example.com」という感じです。
→最終的に「https://www.googleapis.com/webmasters/v3/sites/sc-domain:example.com/searchAnalytics/query」みたいな書き方になります。

「URLプレフィックス」で登録している場合

例えばhttps://example.com/みたいな感じですね。

このときは{サイトURL}をURLエンコードした形にしないといけません。具体的には「:」→「%3A」、「/」→「%2F」で書いてください。つまり、https://example.com/だったら、「https%3A%2F%2Fexample.com%2F」とします。
→最終的に「https://www.googleapis.com/webmasters/v3/sites/https%3A%2F%2Fexample.com%2F/searchAnalytics/query」

追加の注意点として、「http」か「https」か、末尾の「/」の有無まで、プロパティ名と全く同じである必要があります!

【余談】
JSONのstartDateの書き方も、最初は「”startDate”: “{{ $now.minus(90, ‘days’).format(‘yyyy-MM-dd’) }}”,…」みたいな書き方をしていましたが、これも上手く動きませんでした。n8nのバージョンとかにも依存するっぽく、汎用性のあるJavaScriptの書き方にしました。

次のステップ

データが取得できたら、次回は取得したデータをCodeノードでスコアリングする実装を解説します。

完成版ワークフローは公式ラインで配布します

今回全部を統合した完成版ワークフローを公式ラインで配布します。

公式LINEに登録して、「GSC自動解析」とメッセージをください。ワークフローのJSONファイルへのリンクを送信します!

柴田

完全無料配布です!このブログ記事を参考にセットアップしてみてください!

【公式ラインQRコード】

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次