GoogleウェブマスターツールにあるSearch Consoleの検索アナリティクスを、Node.jsから取得する方法をまとめてみたいと思います。

develop or drink ?
 develop or drink ? ©

目次

Searchコンソールでキーワード分析

ウェブマスターツールの検索アナリティクスでは、サイトに訪問した検索キーワードを知ることができます。

通常の手順では、Googleウェブマスターツールにログイン後、次の画像のように検索トラフィックから検索アナリティクスを選ぶと表示させる事ができます。

検索アナリティクスでは検索流入の状況が分かる
検索アナリティクスでは検索流入の状況が分かる ©

画像下部の赤枠のように、「クエリ」の欄で検索流入の情報を確認することができます。今回は、その情報をNode.jsから取得してみたいと思います。

はじめに。トークンの取得

Node.jsでGoogle Console APIを操作するには、まずGoogle API Managerで作成したアプリケーションをOAuth認証し、リフレッシュトークンを取得する必要があります。

詳しくは下記をご覧ください。

検索アナリティクスの情報をプログラムから取得する

前回紹介した記事では、Google APIのクライアントIDとクライアントシークレット、そしてリフレッシュトークンを取得していきました。次に、Node.jsを使ってGoogle Search Console APIの情報を操作していきます。

Node.jsとコマンドラインについては下記をご覧ください。

任意のディレクトリでNode.jsのコードを書いていきますので、必要なファイルを作成していきます。

bash
1
2
3
4
5
$ mkdir your-dir
$ cd your-dir
$ npm init
$ npm install googleapis --save
$ vim index.js

続いて、index.jsを下記のように記述していきます。

index.js
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"use strict";

// 下記サンプルコードはnode v4.3以上で動作します。
const YOUR_URL = 'あなたのGoogle Webマスターツールで登録しているサイトURL'
const YOUR_CLIENT_ID = 'あなたのクライアントIDを入力'
const YOUR_CLIENT_SECRET = 'あなたのクライアントシークレットを入力'
const YOUR_REDIRECT_URL = 'urn:ietf:wg:oauth:2.0:oob'

const timeUtils = require('./lib/time_formatter.js')
const google = require('googleapis')
const OAuth2 = google.auth.OAuth2
const oauth2Client = new OAuth2(
YOUR_CLIENT_ID,
YOUR_CLIENT_SECRET,
YOUR_REDIRECT_URL
);

oauth2Client.setCredentials({
refresh_token: 'あなたのリフレッシュトークンを入力'
});

let fetch = (domain, options) => {
return new Promise( (resolve, reject) => {
oauth2Client.refreshAccessToken( (err,res) => {
if(err){
console.log(err)
console.log(res)
reject(err)
}
else{
let webmasters = google.webmasters({
version: 'v3' ,
auth : oauth2Client
});

options = Object.assign({
rowLimit : 5000 ,
dimensions: ['query', 'page'] ,
startDate : timeUtils.getPastXDays(30).startDate,
endDate : timeUtils.getPastXDays(30).endDate,
startRow : 0
}, options);

webmasters.searchanalytics.query({
'siteUrl': encodeURIComponent(domain) ,
'auth' : oauth2Client ,
resource : options
},

(err, resp) => {
if (err) {
reject(err);
} else {
resolve(resp)
}
})
}
})
})
}

fetch( YOUR_URL ,{}).then( ( resp ) => {
return new Promise( (resolve , reject) => {
// 検索アナリティクスのデータが最大で5000件表示される
// console.log(resp.row)
resolve(resp.row)
})
}).then(( analytics_data ) => {
return new Promise( (resolve , reject) => {

// 検索順位 が低い順番で並び替え
analytics_data.sort( (a,b) => (b.position - a.position) )

// CTR(クリック率) が低い順番で並び替え
// analytics_data.sort( (a,b) => -1 * (b.ctr - a.ctr) )

// インプレッション数(表示回数) が低い順番で並び替え
// analytics_data.sort( (a,b) => -1 * (b.impressions - a.impressions) )

// クリック数 が低い順番で並び替え
// analytics_data.sort( (a,b) => -1 * (b.clicks - a.clicks) )

console.log(analytics_data)
resolve(analytics_data)
})
})

続いて、./lib/time_fomatter.jsを作成します。

bash
1
2
3
$ mkdir lib
$ cd lib
$ vim time_fomatter.js

time_fomatter.jsには下記のように記述して、日付を生成するライブラリを作成します。

./lib/time_formatter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
"use strict";

let formatDate = (date) => {
let d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear()

if (month.length < 2) month = '0' + month
if (day.length < 2) day = '0' + day

return [year, month, day].join('-')
};


exports.getPastXDays = (days) => {
let today = new Date()
let lastDataAvailable = formatDate(today.setDate(today.getDate() - 2))
let firstDataAvailable = formatDate(today.setDate(today.getDate() - (days + 2)))
return {
startDate: firstDataAvailable,
endDate : lastDataAvailable
}
}

上記のコードが記述できたら、node.jsを実行します。

bash
1
2
$ node node.js
(検索アナリティクスのデータが最大で5000件表示される)

実行すると、検索アナリティクスの情報が表示されます。

ということで

今回は、Google Search Consoleの検索アナリティクスの情報をNode.jsから取得してみました。検索アナリティクスは下記の情報を取得することができます。

内容 説明
clicks(クリック数) 検索キーワードを元に表示されたサイトが、クリックされた回数
impressions(表示回数) 検索キーワードを元にサイトが表示された回数。インプレッション数とも呼ばれています。
ctr(クリック率) 検索キーワードを元に表示されたサイトが、クリックされた確率。クリック率とも呼ばれています。
position(掲載順位) 検索キーワードを元にサイトが表示された検索順位

取得した情報を各条件で分析するのに役立ちます。

参考にさせて頂いた記事

下記の記事を参考にさせて頂きました。ありがとうございます。

Qiita
Google Search Console APIをRubyで扱う
Search Console APIで使うクエリパラメータについての解説が参考になる

Googleの公式ドキュメントも参考になりました。

Google Search Console APIs
Search Analytics:query
Googleの公式ドキュメント。queryメソッドで使えるパラメータが参考になる。