読者です 読者をやめる 読者になる 読者になる

廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

新規率と直帰率の関係からランディングページの改善点を探る

はじめに

[対談]SEO 辻正浩氏×アクセス解析 小川卓氏:検索キーワードが見えない時代のSEOとは? | Web担当者Forum で紹介されていた

検索結果における各ページのクリック数と掲載順位の関係をグラフにすると1つの曲線に集約される。曲線から大きく外れた(ギャップのある)ページは何か問題がある(改善の余地がある)と予想できる。

という考え方の応用です。

多くのランディングページでは、新規率が上がると直帰率も上がるという正の相関関係が見られます。

一見さんがとりあえず一ページだけ訪問、という傾向があるのはある程度しょうがないとして、「新規率が低い(リピーターが多い)のに直帰率が高いまま」というようなページはサイト内容とユーザーの期待がマッチしていない傾向が伺えます。

実践

まず RGA パッケージで Google アナリティクスから R に API 経由でデータを読み込みます。

library(RGA)
library(dplyr)
library(ggplot2)
library(scales)
authorize()
prof <-list_profiles()
dat201603 <-get_ga(profileId = prof$id[1],
              start.date = "2016-03-01",
              end.date = "2016-03-31",
              dimensions = "ga:landingPagePath",
              segment = "sessions::condition::ga:channelGrouping==Organic Search", 
#セグメントで自然検索(Organic Search)のみを抜き出しています。
              metrics = "ga:sessions,ga:bounces,ga:newUsers")

セッション(訪問)数が少ないページは対策の優先順位が低いので、セッションが100以上のページを抜き出します。

ついでに直帰率(bounceRate)と新規率(percentNewSessions)も計算しておきます。

dat201603_2 <-dplyr::filter(dat201603,sessions>=100) %>%
  mutate(bounceRate=bounces/sessions,percentNewSessions=newUsers/sessions)

新規率を横軸、直帰率を縦軸にとってプロットしてみます。

f:id:abrahamcow:20160406050023p:plain

plot(bounceRate~percentNewSessions,dat201603_2)

ななめにまっすぐ並んでいるので線形の単回帰を使います。つまり直線を当てはめます。

fit1 <-lm(bounceRate~percentNewSessions,dat201603_2) #当てはめ
abline(fit1,col="blue") 

f:id:abrahamcow:20160406050256p:plain

この傾向線から外れたページが注目すべきページです。

resid 関数を使うと残差(データの点から当てはめた曲線までの差)を出力することができます。

近似曲線から上にぶれたページ、つまり直帰率が高いページは残差が大きくなります。

> t(dat201603_2[which.max(dat201603_2$resid),])
                   12                        
landingPagePath    "/entry/2014/12/14/043232"
sessions           "124"                     
bounces            "108"                     
newUsers           "97"                      
bounceRate         "0.8709677"               
percentNewSessions "0.7822581"               
resid              "0.05593482"

残差がもっとも大きいページは http://abrahamcow.hatenablog.com/entry/2014/12/14/043232 でした。

f:id:abrahamcow:20160406051333p:plain

Google Search Console でキーワードを見ると、『23時各駅新宿』の『歌詞』を知りたいというニーズでクリックしたユーザーが多いようです。

曲の歌詞をまるごとそのまま載せるようなことはこのブログではできないので、まあこの辺は切り捨ててもいいかな、という気がします。

> t(dat201603_2[which.min(dat201603_2$resid),])
                   9                         
landingPagePath    "/entry/2014/10/19/190552"
sessions           "355"                     
bounces            "256"                     
newUsers           "279"                     
bounceRate         "0.7211268"               
percentNewSessions "0.7859155"               
resid              "-0.09669058"

反対に残差がもっとも小さいページは http://abrahamcow.hatenablog.com/entry/2014/10/19/190552 でした。

f:id:abrahamcow:20160406051756p:plain

こちらはそのものずばり『日本語ラップ』『歴史』というようなワードでクリックされており、記事の内容にあっています。

当ブログが今後リピーターを増やすには、この記事を参考にしたらよさそうです。

議論

「傾向線から外れたページが注目すべきページ」と述べましたが、どのくらいはずれていたら注目するべきなのか、というのは判断がむずかしいところです。

ひとつの目安として、予測区間を出してみたりしてもいいかもしれません(よくないかもしれません)。

predint1 <-predict(fit1,
                   newdata=data.frame(percentNewSessions=dat201603_2$percentNewSessions),
                   interval = "prediction") %>%
  as.data.frame()

ggplot(dat201603_2)+
  geom_point(aes(x=percentNewSessions,y=bounceRate))+
  scale_x_continuous(labels=percent)+scale_y_continuous(labels=percent)+
  geom_ribbon(aes(x=percentNewSessions,ymin=predint1$upr,ymax=predint1$lwr),alpha=0.3)

f:id:abrahamcow:20160406052425p:plain

また、これって結局やっていることは外れ値の検出に近いのかな、とも思いました。

その辺をもうちょっと勉強してみてもいいかもしれません。

関連エントリ

abrahamcow.hatenablog.com