所有しているサイトの検索キーワード数を取得してGoogle Spreadsheetに値を記載する

移転しました。

はじめに

所有しているサイトが特定のキーワードでどれくらい検索されているかGoogle Search Consoleで調べてGoogle Spreadsheetに記載して日々計測する必要があったため、その際に行った手順を残しておきます。

f:id:shohu33:20160503135239j:plain

検索回数や表示回数を取得できる Google Search Console

Google Search Console(以前は Webmaster tool だった気がします)という以下のURLで、自分が所有しているサイトはどのようなキーワードで検索されたのか?また、そのキーワードで何回表示されて何回クリックされたなどの値が取れます。

www.google.com

以下のような感じで確認できます。

f:id:shohu33:20160503134402j:plain

こちらの値をなんとか Google Spreadsheetの方に引っ張ってきて、毎日記録させようと思います。

苦戦しながら Google OAuth2 でリフレッシュトークンなどを取得する

Google Search Console の値を取得するために、GoogleDevelopers の Search Console API(Webmaster Tools API)を使用します。

Search Analytics: query  |  Search Console API (Webmaster Tools API)  |  Google Developers

さらにAPIを使用するために、Google OAuthを利用する必要があるのですが、これがややこしい手順を踏む必要があるります。

ただ、そのややこしい手順をまとめてくれているサイトがあるので、以下ページを参考に リフレッシュトークンというやつを取ります。

qiita.com

端的にいうと、このリフレッシュトークンがないと長い間(たとえば3ヶ月など)、バッチなどでPGで自動実行してGoogle Search Consoleの値を取得することができなくなってしまいます。

詳しいトークンの説明は以下に譲ります

murashun.jp

上記ページに細くすると以下点に注意が必要です

それではGoogle Search Consoleの値にアクセスして値を取得してみます

Googleにログインして、Google Spreasheet で新しいドキュメントファイルを作成します。

f:id:shohu33:20160503135041j:plain

[ツール] - [スクリプトエディタ] を選択して、スクリプトエディタを開きます

f:id:shohu33:20160503140600j:plain

以下のソースベースにsite_urlなどをカスタマイズして実行すると

function myFunction() {
    var opt = {
        "method" : "POST",
        "payload" : {
            "client_id" : GS_CLIENT_ID, // 取得した クライアントID
            "client_secret" : GS_CLIENT_SECRET, // 取得した クライアントシークレット
            "refresh_token" : GS_OAUTH_REFRESH_TOKEN, // 取得したリフレッシュトークン
            "grant_type" : "refresh_token"
        },
        // "muteHttpExceptions" : true
    };
    var res = UrlFetchApp.fetch("https://accounts.google.com/o/oauth2/token", opt);
    var dat = JSON.parse(res.getContentText());
    var accessToken = dat["access_token"];
  
    var filters = [];
    filters.push({
        dimension: "query",
        operator: "contains",
        expression: "酒"
    })

    var params = {
      searchType: "web",
      startDate: "2016-04-17",
      endDate: "2016-04-17",
      dimensions: ["query"],
      dimensionFilterGroups:[
        {
          filters: filters
        },
      ],
    }
        
    var opt = {
      "method" : "POST",
      "payload" :JSON.stringify(params),
      "contentType": "application/json",
      "headers" : {
          "Authorization": "Bearer " + accessToken,
      },
    };
    var site_url = "http%3A%2F%2Fexmaple.com%2F";
    var res = UrlFetchApp.fetch("https://www.googleapis.com/webmasters/v3/sites/"+ site_url +"/searchAnalytics/query", opt);
    var content = JSON.parse(res.getContentText());
    Logger.log(content);
}

ログに以下のようなjson文字列が取得することができます。

{
 "rows": [
  {
   "keys": [
    "果実酒 飲み放題"
   ],
   "clicks": 5.0,
   "impressions": 26.0,
   "ctr": 0.19230769230769232,
   "position": 4.8076923076923075
  },

最後に取得した値をGoogle Spreadsheetに記載します。 先ほどのjsonの文字列からJSON.parseなどで必要な値を取得して以下ページを参考に必要な箇所に記載していきます。

[GAS][スプレッドシート]シートに値をセットするには : 逆引きGoogle Apps Script

スクリプトを自動化する

リフレッシュトークンを取得しているので、何度も認証する必要がないため、あとは定期的にトリガーで上記のPGを実行できるようにすれば、毎日値をGoogle Spreadsheetに追記していくことが可能です。

f:id:shohu33:20160503150947j:plain f:id:shohu33:20160503150952j:plain