ユーザーがどのキーワードで自分のサイトにアクセスしているのかを知るには、
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
はクエリとページの組み合わせについて、クリック数などのデータを取得したもので、
dfq
やdfp
は、クエリのみ、ページのみでマージしたデータになります。
ネットワークを作成する
続いて、取得したデータからネットワークを作ってみましょう。
取得したデータ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)
水色の丸がページを表していて、
ピンクの四角が検索ワードを表しています。
矢印は、その検索キーワードからページにたどり着いたことを表しています。
流れの大きいものは太い矢印で表示して、
特に大きいものについては、色を赤で表示するようにしています。
ノードが大きいほど、そのキーワードやページのクリック数が大きいことを表していて、
一目で、どこのページへのアクセスが多いのか、
どの検索キーワードからのアクセスが多いのかが分かるようになっています。
このサイトの場合だと、「漫画ビレッジ」の検索ワードから、
漫画ビレッジを紹介したページへのアクセスが多いことが分かりますね。
まとめ
Google Search Console のデータを使って、
検索クエリとページへのアクセスの関係をネットワーク図で描画する方法を紹介しました。
データの数字を眺めるのもいいですけど、一目で分かるような図がかけると、
新しい発見があるかもしれませんね。