クイックノート

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

【SEO】文字数と検索順位の関係

「Webページの文字数が多いほど Google の検索上位に表示される」
SEOには〇〇文字以上必要」
という風に、検索順位を上げるために文字数が重要だという記事をよく見かけます。

一方で、「量より質だ」という風に、
文字数はそれほど重要ではないという記事も見かけます。

Google が検索順位を決めるアルゴリズムを公開していないので、
真相は不明ですが、おそらくどちらもある程度当たっているのでしょう。

文章を書く人や扱う内容によって、
文の書かれ方が変わってくるので、
長い方が中身が良くなるということもあります。

要は、書く人やブログによって、
文字数が検索順位に影響を与えるかどうかは変わってくる
ということでしょう。

ブログの数だけ答えがあるということですね。

というわけで、このブログでは
文字数と検索順位はどのように関係しているのかを調べてみます。

記事の最後にRのソースコードを掲載するので、
気になった人は、是非自分のブログでも調べてみてくださいね。

記事毎の文字数

まずは、このブログの各ページは大体何文字くらいなのかを見てみましょう。

下のグラフは、各ページの文字数を低い順に左から並べたもので、
縦軸が文字数を表しています。
赤色の線は2000文字を表しています。

f:id:u874072e:20180626145601p:plain:w400

500文字~4000文字程度まで様々な文字数のページがあることが分かります。

文字数が多いページと少ないページの比較

それでは、本題の文字数が多いと
検索順位が高いと言えるかどうかについて調べてみましょう。

ここでは、2000文字以上のページと2000文字未満のページに分けて、
その順位を比べてみることにします。

下のグラフは、左に2000文字以上のページの順位、
右に2000文字未満のページの順位を箱ひげ図でプロットしたものです。

f:id:u874072e:20180626151050p:plain:w400

黒い太線で表された中央値に注目してみると、
2000文字以上のページの方が上位に来ていることが分かります。

その差は約6位分でした。

このブログでは、2000文字以上の記事の方が、
掲載順位が高くなりそうですね。

何文字がいいのか

では、何文字以上なら検索順位が高くなるのでしょうか。

先ほどは、2000文字で分けましたが、 1000文字、3000文字で分けた場合についても見てみましょう。

f:id:u874072e:20180626151331p:plainf:id:u874072e:20180626151050p:plainf:id:u874072e:20180626151350p:plain

上のグラフは左から、1000文字、2000文字、3000文字で分けて順位を比較したものです。

どの文字数で分けても、
文字数が多い左側の順位の方が中央値が高くなっていることが分かります。

その順位の差は、2.3位、5.8位、4.6位となっていて、
2000文字で分けた時が最も大きな差になっています。

どうやら、2000文字以上というのが、
掲載順位を上げるための一つの目安になりそうですね。

Rソースコード

このソースコードでは、はてなブログの記事の文字数のカウントと、
Google Search Console から検索順位のデータ取得を行い、
グラフをプロットします。

予め、ブログは Google Search Console に登録することと、
Google API を利用できるようにしておく必要があります。
詳しくは、下記の記事を参照して下さい。

wdthで文字数の多いグループと小さいグループを
分けるための文字数を設定しています。

Google Search Console に複数のサイトを登録している場合は、
siteURL = site_list[i,1] の i の番号を調整します。

また、はてなブログ以外の場合は、HTMLの構造が違うはずなので、
html_nodes(page,xpath=)xpathの中身を調整する必要があります。

clean-copy-of-onenote.hatenablog.com

library(googleAuthR)
library(searchConsoleR)
library(rvest)
library(stringi)


gar_set_client(json = "client_id.json",
               scopes = "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("page"))



N = dim(df)[1]

count_page = function(url){
  page = read_html(url)
  text = html_nodes(page,xpath="//div[@class='entry-content']//p") %>% 
         html_text()
  sum(nchar(gsub("\n","",text)))
}

wd = sapply(1:N,function(i){
  url = df[i,"page"]
  count_page(url)
})


rank = df[1:N,"position"]

wdth = 2000

plot(sort(wd[wd > 0]),ylab="# of letters")
abline(h=wdth,col=2)

hwd = rank[wdth < wd]
lwd = rank[wdth > wd & wd > 0]

boxplot(hwd,lwd,names=c(sprintf(" > %d",wdth),sprintf(" < %d",wdth)),
        ylab="rank",xlab="# of letters",ylim=c(max(rank),1))
arrows(1.5,median(hwd),1.5,median(lwd),col=2,code=3,
       length = abs(median(hwd) - median(lwd)) * 0.02)
プライバシーポリシー