モチベーション
ロングテールSEOとは
検索エンジンからのサイトへの訪問数を増やしたい場合、みんながいっぱい検索してる人気のあるキーワード(ビッグワード)からのアクセス数を稼ぐのは競合とか多くて大変。それよりも、ニッチなキーワード(複合キーワード、かけあわせワード)を積み重ねてあくせくアクセスしてもらおうみたいな話。
例えば「家」とか「猫」とかのキーワードはいっぱい検索されているだろうけど、これらのワードで検索結果画面の上位表示を目指すのは大変そう。
それよりも「家猫 猫じゃらし」とか、「猫 ペット可 家」とか、そういったワードをコツコツねらっていこう。
こういうのが「ロングテールSEO」とか呼ばれて、ある程度重要視されている。
- 作者:渡辺隆広
- 出版社/メーカー:翔泳社
- 発売日: 2008/06/17
- メディア:単行本(ソフトカバー)
- 購入: 7人 クリック: 373回
- この商品を含むブログ (15件) を見る
ちなみにパレートの法則(80対20の法則、二八の法則)とかロングテール理論というのは自然科学的な意味での理論や法則じゃないので注意、念のため。
実践
前置き
R の qcc パッケージに pareto.chart というパレート図を描画する関数がある。
(pareto.chart {qcc} | inside-R | A Community Site for R)
でも、これだと各項目がソートされるので「その他」を末尾にくっつけることができない。
検索キーワードは何百通りもあるので全部表示するのは現実的でない。
訪問数トップ20のワードだけ出して、あとは「その他」でまとめたい。
だから一行だけコードを書き換えてソート機能をオフにできるようにして、pareto.chart2 と名づけた(create unsorted Pareto chart · GitHub)。
これを使ってパレート図を描く。
コード
まずは RGoogleAnalytics を使って Googleアナリティクスから APIでデータを引っ張ってくる。
RGoogleAnalytics をいじっている - 廿TTを参照。
library("RGoogleAnalytics") query <- QueryBuilder() access_token <- query$authorize()
ここでアクセストークンをコピペ。
ga <- RGoogleAnalytics() ga.profiles <- ga$GetProfileData(access_token) query$Init(start.date ="2014-10-01", end.date ="2014-10-31", dimensions ="ga:landingPagePath", metrics ="ga:sessions", sort ="-ga:sessions",#降順#filters="", segment="gaid::-5",#自然検索トラフィック#max.results = , table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","), access_token=access_token) lp <- ga$GetReportData(query)#ランディングページのデータ取得完了 query$Init(start.date ="2014-10-01", end.date ="2014-10-31", dimensions ="ga:keyword", metrics ="ga:sessions", sort ="-ga:sessions",#降順#filters="", segment="gaid::-5",#自然検索トラフィック#max.results = , table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","), access_token=access_token) kw <- ga$GetReportData(query)#キーワードのデータ取得完了library(qcc)library(RColorBrewer)#デフォルトの色が好みじゃないので RColorBrewer を使うsource("ParetoChart2.R")#pareto.chart2 を読み込み##library(devtools)#source_gist("https://gist.github.com/abikoushi/722ce195fb70df5cc679")#で行けるかと思ったんだけど#windowsだとsource_gist関数が動かないので#ダウンロードしてご利用ください。 kw2 <- kw[kw$keyword !="(not provided)",]#(not provided) を除く kw_20 <- kw2$sessions[1:20] kw_20[21]<- sum(kw2$sessions[-c(1:20)]) names(kw_20)<- c(kw2$keyword[1:20],"その他")#上位20件を取った old = par(mar = c(7,4,0.5,2))#余白の調整#nihongo() pareto.chart2(kw_20,unsorted=TRUE, ylab ="セッション",ylab2="累積比率", main="", col=brewer.pal(length(kw_20),"Blues")) par(old)#余白を元に戻す
出力は下図の通り。
棒グラフが平べったい感じの並びになってる。
ぼくのブログは少数のビッグワードが強い比重を占めてる感じではなく、いろんなかけあわせワードでちょっとずつアクセスを稼いでいる。
弱小サイトにありがちなパターンだと思う。
ちなみに、一旦除いた (not provided) は2162セッションあった。
> kw[kw$keyword =="(not provided)",] keyword sessions 1(not provided)2162
キーワードのバリエーションは529あった。
> dim(kw2)[1]5292
ついでに自然検索経由のランディングページ(入口ページ)も合わせて見てみる。
lp_20 <- lp$sessions[1:20] lp_20[21]<- sum(lp$sessions[-c(1:20)]) names(lp_20)<- c(1:20,"21位以下")#nihongo() pareto.chart2(lp_20,unsorted=TRUE, ylab ="セッション",ylab2="累積比率", main="", col=brewer.pal(length(lp_20),"Blues"))
ページのパスは長いのでグラフのラベルに入れると文字が小さくなっちゃうし、画像にしちゃうとコピペができないので、別ファイルに書きだすことにした。
cat(paste(1:20,"\t","http://abrahamcow.hatenablog.com/",lp$landingPagePath[1:20],"\n", sep=""), file="~/Desktop/lptop20.txt")#URLをくっつけている
アウトプットはこんな感じのテキストファイルになる。
1 http://abrahamcow.hatenablog.com/entry/2014/01/25/232720 2 http://abrahamcow.hatenablog.com/entry/2014/02/06/003147 3 http://abrahamcow.hatenablog.com/entry/2013/03/21/223717 4 http://abrahamcow.hatenablog.com/entry/2013/08/03/160222 5 http://abrahamcow.hatenablog.com/entry/2014/03/23/064859 6 http://abrahamcow.hatenablog.com/entry/2014/06/04/021238 7 http://abrahamcow.hatenablog.com/entry/2014/03/05/001432 8 http://abrahamcow.hatenablog.com/entry/2013/03/19/231405 9 http://abrahamcow.hatenablog.com/entry/2014/05/07/024305 10 http://abrahamcow.hatenablog.com/entry/2014/02/12/225428 11 http://abrahamcow.hatenablog.com/entry/2014/03/07/165255 12 http://abrahamcow.hatenablog.com/entry/2014/07/13/222936 13 http://abrahamcow.hatenablog.com/entry/2014/08/13/031519 14 http://abrahamcow.hatenablog.com/entry/2014/01/05/081748 15 http://abrahamcow.hatenablog.com/entry/2014/10/19/190552 16 http://abrahamcow.hatenablog.com/entry/2013/03/22/004017 17 http://abrahamcow.hatenablog.com/entry/2013/10/28/035435 18 http://abrahamcow.hatenablog.com/entry/2014/09/19/055830 19 http://abrahamcow.hatenablog.com/entry/20110318/1300395659 20 http://abrahamcow.hatenablog.com/entry/2013/11/03/022616
タブ区切りなので Excelとかにも貼り付けられていいと思う。
避けるべき可視化
良いグラフ・悪いグラフ
以上で本エントリーの趣旨はだいたい述べ終わった。
が、パレート図を「良い例」として理解するために「悪い例」についても触れておく。
例1)3D風グラフ
ロングテールSEOとは?戦略的メリットと複合キーワード集客法
立体的にしたり奥行きをつけたりすると、手前が大きくみえ奥が小さく見える。
これは統計グラフというよりはイラストなので、こういう言いがかりは野暮かもしれないが、データから傾向を探るときには、3Dっぽい表現の飾りは排除したほうがいいだろう。
例2)絵グラフ
http://www.tokyo-np.co.jp/article/economics/news/CK2014112002000138.html
尺度(ものさし)は線の長さなのに、三角形で表現してるせいで、面積のほうに目が言ってしまい、誤解を招く。
これも統計グラフというよりはイラストなのかもしれないが、データの図示という観点から言うと、ふつうにパレート図にしたほうがいい。
世の中にはイラストとして優れていて、かつデータの視覚化としても優れている理想的な「インフォグラフィック」や「データビジュアライゼーション」もあるだろう。
でも基本的な図示において誤りを避けるためには、絵とか陰影とか奥行きとか、余計な装飾はつけず、棒グラフはただの棒にしておいたほうが安全。
例3)円グラフ
ロングテールSEOとは?戦略的メリットと複合キーワード集客法
人間の目は円グラフを比較するのが苦手なので、原則としてあまり用いないほうがよい。
統計グラフのウラ・オモテ―初歩から学ぶ、グラフの「読み書き」 (ブルーバックス)
- 作者:上田尚一
- 出版社/メーカー:講談社
- 発売日: 2005/10/21
- メディア:新書
- 購入: 1人 クリック: 62回
- この商品を含むブログ (11件) を見る
品質管理はクリエイティブだよ
話題が拡散してしまいそうだが、最後にもうひとつだけ言わせて欲しい。
どこだったかで、
「かつて、統計学を学んだものは企業では品質管理のなどの『守り』のポジションに回されることが多かった。しかし、近年ビッグデータの利活用が盛んになりデータサイエンティストと呼ばれる職種が……」
云々というような文章を見たことがあるんだけど、品質管理は地味でつまんない仕事みたいなイメージを持たないで欲しいな。
品質管理はデータ活用の歴史が長くて、学ぶところ多いと思う。
パレート図は品質管理の7つ道具(QC7つ道具)の一つなんだけど、Web系の人とかマーケティングの人とかにも役立つツールだと思う。
Web系の人とかマーケティングの人とかは、今後どんどん品質管理の分野に接近してクロスオーバーしてって欲しい。
特にパフォーマンス型のマーケティング施策で「ROI最適化」なんて、「歩留まりを上げる」っていう発想と一緒じゃないか。
ぼくにはどうも、マーケターはエンジニアを「顧客視点を持てない技術バカ」だと思ってるような、エンジニアはマーケターを「お客様視点とか言うわりに、定義の曖昧なカタカナ語を振り回して舌先三寸で商品を売りつけるチャラ男」だと思ってるような、そんな対立が感じられる。
……っていうかぼく自身が若干マーケティング理論とかをバカにしてるんだけど、やっぱりお互い仲良くしないとやっていけないので、そのへんの偏見とかを払拭していきたいですね。
で、「データドリブンなマーケティング」とかやってくんだったら、品質管理の7つ道具のうち、散布図とヒストグラムは抑えておくといいと思う。
問題解決手法>QC七つ道具>ヒストグラム
問題解決手法>QC七つ道具>散布図
あと、永田靖『品質管理のための統計手法』(日経文庫)は、微分積分とかの数学の予備知識をほとんど要求してないのに、高度なところまでコンパクトにまとめているので、統計学の入門書としておすすめ。
- 作者:永田靖
- 出版社/メーカー:日本経済新聞社
- 発売日: 2006/01
- メディア:新書
- 購入: 2人 クリック: 7回
- この商品を含むブログ (5件) を見る
追記:リスティング広告(検索連動型広告)について
本記事は「ロングテールSEOのための」という体で書いたが、検索連動型広告(有料検索)についても同じ考えかたを使いまわすことができる。
- 作者:株式会社アイレップ,SEMコンサルタント,紺野俊介
- 出版社/メーカー:インプレスジャパン
- 発売日: 2008/05/29
- メディア:単行本
- 購入: 2人 クリック: 33回
- この商品を含むブログ (2件) を見る
RGoogleAnalytics で有料検索トラフィックについてのデータを引っ張ってくるためには、クエリの "segment"に "gaid::-4"を入れてやればいい。
こんな風だ。
query$Init(start.date ="2014-10-01", end.date ="2014-10-31", dimensions ="ga:keyword", metrics ="ga:sessions", sort ="-ga:sessions",#降順#filters="", segment="gaid::-4",#有料検索トラフィック#max.results = , table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","), access_token=access_token)