クイックノート

ちょっとした発見・アイデアから知識の発掘を

【R】どの検索ワードでどのページにアクセスしたかが一目瞭然!【serach consoleの可視化】

ユーザーがどのキーワードで自分のサイトにアクセスしているのかを知るには、
Google Search Console を使うのが定番です。

ところが、キーワード当たりにどれだけのクリックがあったかは分かっても、
そのキーワードでどこのページにアクセスしたかを見ようとすると、
見れないことはないけど、分かりづらいですよね。

キーワードからページへのアクセスがもっと視覚的に分かりやすくなれば便利なのに。。。
ということで、キーワードとページのネットワーク図を作ってみましょう。

前準備

ここでは、R から API を通じて、
Google Search Console のデータを取得するので、
API を使えるように準備しておく必要があります。

詳しくは、下の記事を参考にして下さい。

clean-copy-of-onenote.hatenablog.com

ネットワーク図を作成

それでは、Google Search Console からデータを取得して、
ネットワーク図を書いていきましょう。

データの取得

R で次のコードを実行します。

library(googleAuthR)
library(searchConsoleR)
library(igraph)

gar_set_client(json = "client_id.json", 
               scopes = c("https://www.googleapis.com/auth/webmasters"))

gar_auth()

site_list = list_websites()
df = search_analytics(siteURL=site_list[1,1],
                      startDate=Sys.Date() - 120,
                      endDate=Sys.Date()-3,
                      dimensions=c("query","page"))

dfq = aggregate(df[,-1:-2],list(df[,1]),sum)
dfp = aggregate(df[,-1:-2],list(df[,2]),sum)

これで、ブラウザでの認証後、データの取得が実行されます。

Google Search Console に複数のサイトを登録している場合は、
siteURL=site_list[1,1] の一つ目の1を適切に変更しましょう。
site_listの中を見れば、どのサイトが何番目に登録されているかが分かるので、
2番目のサイトならsite_list[2,1]のようにします。

dfはクエリとページの組み合わせについて、クリック数などのデータを取得したもので、
dfqdfpは、クエリのみ、ページのみでマージしたデータになります。

ネットワークを作成する

続いて、取得したデータからネットワークを作ってみましょう。

取得したデータdfは、
クエリとそのクエリからアクセスされたページの組み合わせを各行にもっているので、
これをネットワークのエッジとします。

### graph data
N = 15
queries = df[1:N,1]
pages = df[1:N,2]
G = graph(rbind(queries,pages))

あまり、データが多いと、グラフが煩雑になるので、
データ数をNで絞っています。

これで、クエリとページをノードにして、
対応したクエリとページにエッジが引かれたグラフのデータが完成です。

ネットワークを描画する

ネットワークができたので、プロットしましょう。
そのままplot(G)としても一応ネットワークをプロットできますが、
このままだと、クエリもページも区別がないままプロットされますし、
URL が長すぎて見ずらいグラフになってしまいます。

そこで、グラフが見やすくなるように

  • ページとクエリをノードの色と形で区別する
  • クリック数の大小でノードやエッジの大きさを変化させる
  • ページのURLを短縮する

といった工夫をしてプロットします。

### layout
##### node #####
V(G)$color = ifelse(names(V(G)) %in% queries,"pink","skyblue")
V(G)$shape = ifelse(names(V(G)) %in% queries,"square","circle")
V(G)$size = sapply(names(V(G)),function(x){
  if(x %in% queries){
    dfq[dfq$Group.1 == x,]$clicks
  }else{
    dfp[dfp$Group.1 == x,]$clicks
  }
})
V(G)$size = log(V(G)$size) / max(log(V(G)$size)) * 30
V(G)$label = sapply(names(V(G)),function(x){
  if(x %in% queries){
    x
  }else{
    substr(x,nchar(sitelist[1,1])+1->n,n+10)
  }
})
V(G)$label.cex = V(G)$size / 20
###### edge ######
E(G)$width = log(df[1:15,]$clicks)/max(log(df[1:15,]$clicks)) * 10
E(G)$color = "gray"
E(G)$color[E(G)$width > 5] = "red"
### plot
plot(G)

f:id:u874072e:20180615141523p:plain

水色の丸がページを表していて、
ピンクの四角が検索ワードを表しています。

矢印は、その検索キーワードからページにたどり着いたことを表しています。
流れの大きいものは太い矢印で表示して、
特に大きいものについては、色を赤で表示するようにしています。

ノードが大きいほど、そのキーワードやページのクリック数が大きいことを表していて、
一目で、どこのページへのアクセスが多いのか、
どの検索キーワードからのアクセスが多いのかが分かるようになっています。

このサイトの場合だと、「漫画ビレッジ」の検索ワードから、
漫画ビレッジを紹介したページへのアクセスが多いことが分かりますね。

まとめ

Google Search Console のデータを使って、
検索クエリとページへのアクセスの関係をネットワーク図で描画する方法を紹介しました。

データの数字を眺めるのもいいですけど、一目で分かるような図がかけると、
新しい発見があるかもしれませんね。

プライバシーポリシー