Googleキーワード数2万、表示回数53万のデータから「検索順位」と「クリック率」の関係をグラフにしてみた

Googleのウェブマスターツールには、検索クエリデータを参照できる機能があります。

今回はその中の、「検索結果の平均掲載順位」と「クリック率」をすべて集計し、検索順位とクリック率の関係をグラフ化してみたので紹介です。

「掲載順位が下がると、どのようにクリック率が下がるのか?」など視覚的にわかるかと思います。尚、今回利用したのは、このサイトの3ヶ月分のデータです。

photo by Robert Scoble

スポンサーリンク
レクタングル(大)広告

検索クエリ機能

ウェブマスターツールには、以下のように検索クエリデータを参照できる機能があります。

検索クエリ

そしてその機能では、検索で表示された回数、クリック数、クリック率(CTR)、平均掲載順位を3ヶ月分まで見ることができます。

このテーブルをダウンロード

で実際に、このサイトの3ヶ月分の検索クエリを表示させてみたところ、クエリ数約2万、表示回数約53万、クリック数約8万のデータを参照することができました。

直近3ヶ月のクエリ結果グラフ

これらのデータを見てみると、当然ですが検索掲載順位が高いほどクリック率が高くなり、サイトへの流入が多くなります。

逆に掲載順位が低いほどクリック率が低くなります。

平均掲載順位とクリック率

ただこれ、キーワードによってもばらつきがあるので、「掲載順位が下がると、クリック率(サイトへの流入)も下がる」ということは大まかにわかっても、どんな感じで下がっていくのかなどは分りません。

ちょうどウェブマスターツールには、最大3ヶ月分のデータをCSVでダウンロードできる機能があるので、取得したデータを、Rubyでプログラムで集計してみました。

このテーブルをダウンロード

集計結果

約2万クエリ、すべての掲載順位の表示回数とクリック数を集計して、それをもとに平均掲載順位ごとのクリック数を410位まで計算してみました。

以下がこれらをグラフ化したものです。

全データ

1位から410位まですべてをグラフ化したら、以下のような散布図になりました。

平均掲載順位とクリック率(1~410位まで)

ちょっとロングテールすぎてわかりませんね。

1位~100位まで

全データはちょっと見づらいので、1位から100位までのグラフ。平均掲載順位とクリック率(1位~100位まで)

1位から、順位が下がるにつれて、下降するのはわかるのですが、50位以降クリック率が結構上がるのはなんなんでしょうか。誤差にしても、これだけ50位以降にはっきり現れると、何かあるのかもしれません。

これについては、一応自分なりに、原因をいろいろ考えてみました。

Googleには「検索の設定」に「インスタント検索結果は表示しない」という項目があります。

これに設定すると、Googleの検索結果は、50位とか100位まで表示されます。

Googleインスタント検索の設定

これはあくまで僕の予想ですが、この設定にしている人が検索して、上位で欲しい結果が得られなかった時に、リストをダーっと一気に下がりページャー手前で目に留まったものをクリックしてしまっているのではないかと思います。多分。

1位~50位まで

平均掲載順位とクリック率(1位~50位まで)

20位を過ぎるあたりまでは、クリック率が10%近くあるのですが、そこからガクッと3%ぐらいになります。

1位~20位まで

平均掲載順位とクリック率(1位~20位まで)

10位以下は、だいたい10%弱で横ばいです。

1位~10位まで

ウェブマスターツールで1位~10位までは、0.1単位で平均掲載順位が出力されます。

平均掲載順位とクリック率(1位~10位まで)

1位台は60~40%、2位台は40~20%と急激に下がり、3位から10位までは、緩やかに10%まで下がっていくといった感じです。

すべての数値

やはり、グラフだけでは細かな数値が表示されないので、以下に全てのデータを載せておきます。約2万のキーワード数を集計した結果です。

平均掲載順位表示回数クリック数クリック率
1.011956735661.53%
1.18306478157.56%
1.24263213350.04%
1.34218209649.69%
1.488954361.08%
1.52819130046.12%
1.63289177754.03%
1.72841123343.40%
1.8151176950.89%
1.9186677041.26%
2.05829242441.59%
2.13878154639.87%
2.23882138335.63%
2.3292097933.53%
2.42884115540.05%
2.5190078541.32%
2.6213577536.30%
2.74905161632.95%
2.84746134628.36%
2.9337987025.75%
3.03719107728.96%
3.18195111013.54%
3.28635142116.46%
3.39567189219.78%
3.411016119410.84%
3.53210524377.59%
3.619870384319.34%
3.7223462227.84%
3.8234568029.00%
3.9304372123.69%
4.06072137122.58%
4.1283875126.46%
4.2268763723.71%
4.3319450715.87%
4.4505177715.38%
4.5201753526.52%
4.65759106218.44%
4.7276767624.43%
4.8265468525.81%
4.9354372120.35%
5.0488487017.81%
5.183897268.65%
5.2763194412.37%
5.35897102217.33%
5.4344464618.76%
5.57642102213.37%
5.6337353115.74%
5.7304652717.30%
5.8266641015.38%
5.9267133512.54%
6.0214136216.91%
6.185584795.60%
6.2208029714.28%
6.3517364012.37%
6.4102217717.32%
6.569923725.32%
6.6304735411.62%
6.7181924813.63%
6.820402039.95%
6.949483687.44%
7.0202535017.28%
7.127842498.94%
7.2117508317.07%
7.3107186796.34%
7.448653597.38%
7.527262398.77%
7.6167718410.97%
7.7315637912.01%
7.8297530910.39%
7.99049310.29%
8.0197224712.53%
8.167425928.78%
8.221372129.92%
8.329112508.59%
8.4132015411.67%
8.543553417.83%
8.627592649.57%
8.746612154.61%
8.8170224514.39%
8.9117118515.80%
9.029972939.78%
9.13997810962.74%
9.238751724.44%
9.3125614111.23%
9.43894912.60%
9.5895829.16%
9.612341149.24%
9.75919315.74%
9.866321982.99%
9.98529811.50%
1063965568.69%
11362440711.23%
12274535312.86%
1322862119.23%
1449594529.11%
1555864367.81%
1652832254.26%
1724881998.00%
1818891719.05%
1916501609.70%
2011281099.66%
2123361506.42%
2213081138.64%
2316261247.63%
2435491133.18%
253050782.56%
264674841.80%
271746583.32%
2825801365.27%
291915522.72%
302598592.27%
311459432.95%
322068542.61%
331264372.93%
341284272.10%
351322544.08%
361305322.45%
371017242.36%
383068411.34%
391616241.49%
40943252.65%
411245272.17%
422373230.97%
431857150.81%
441007141.39%
45773121.55%
461889392.06%
4751461.17%
48412112.67%
4940271.74%
50267103.75%
51216115.09%
5255610.91%
5344818.18%
5415032.00%
5517784.52%
5615910.63%
576434.69%
5813053.85%
597856.41%
606523.08%
615335.66%
626123.28%
6331516.13%
6423417.39%
654312.33%
668333.61%
6726311.54%
685036.00%
697311.37%
7039410.26%
7122313.64%
722000.00%
733625.56%
741317.69%
756223.23%
764724.26%
774624.35%
78300.00%
792300.00%
805935.08%
815120.00%
823113.23%
832214.55%
845120.00%
851516.67%
865359.43%
8721314.29%
883200.00%
892129.52%
902328.70%
913326.06%
922150.00%
931100.00%
947114.29%
952800.00%
962900.00%
971715.88%
98400.00%
9915426.67%
10022541.78%
110955121.26%
120137490.66%
130168950.30%
140110420.18%
15037610.27%
16016431.83%
17013521.48%
18012410.81%
1909644.17%
20017321.16%
21031700.00%
22041230.73%
23043400.00%
24021000.00%
2505600.00%
260500.00%
2901700.00%
300100.00%
340100.00%
360100.00%
380200.00%
410200.00%
合計5348988254315.43%

今回使用したプログラム

今回集計用に作った、Rubyのプログラムも以下に載せておきます。

# encoding: utf-8
require "csv"
require 'pp'
csv = CSV.read('sheet.csv')

results = {}

csv.each_with_index do |items, i|
  next if i == 0 #最初の行はとばす
  key = items[4].chomp.to_f
  if results[key]#検索平均掲載順位をハッシュのキーとして
    results[key] = [results[key][0].to_i + items[1].to_i, results[key][1].to_i + items[2].to_i]
  else
    results[key] = [items[1].to_i, items[2].to_i]
  end
end

#pp results.sort

click_rates = []
results.each do |k, v|
  click_rates << [k, v[0], v[1], v[1].to_f/v[0].to_f]
end

click_rates = click_rates.sort {|a, b| a[0] <=> b[0] }

is_csv = false #CSVをファイルに出力する
res_csv = ''
puts "平均\t表示\tClick\tClick率" unless is_csv
click_rates.each do |v|
  if is_csv #CSVとして出力
    res_csv << v[0].to_s + "," + v[1].to_s + "," + v[2].to_s + "," + v[3].to_s + "\n"
  else #ターミナルに表示
    puts v[0].to_s + "\t" + v[1].to_s + "\t" + v[2].to_s + "\t" + sprintf( "%.2f%",  (v[3] * 100))
  end
end

if is_csv
  puts res_csv
  File.write("res_csv.csv", res_csv)
end

CSVデータの文字コードは、UTF-8でないとエラーが出ます。

まとめ

今回使用したのが、このサイトの3ヶ月分だけのデータなので、数値には多少ばらつきがあります。

サイトのターゲットとなるキーワードによっては、結果も変わってくると思うので、あくまで参考程度に見てください。