「Webページの文字数が多いほど Google の検索上位に表示される」
「SEOには〇〇文字以上必要」
という風に、検索順位を上げるために文字数が重要だという記事をよく見かけます。
一方で、「量より質だ」という風に、
文字数はそれほど重要ではないという記事も見かけます。
Google が検索順位を決めるアルゴリズムを公開していないので、
真相は不明ですが、おそらくどちらもある程度当たっているのでしょう。
文章を書く人や扱う内容によって、
文の書かれ方が変わってくるので、
長い方が中身が良くなるということもあります。
要は、書く人やブログによって、
文字数が検索順位に影響を与えるかどうかは変わってくるということでしょう。
ブログの数だけ答えがあるということですね。
というわけで、このブログでは
文字数と検索順位はどのように関係しているのかを調べてみます。
記事の最後にRのソースコードを掲載するので、
気になった人は、是非自分のブログでも調べてみてくださいね。
記事毎の文字数
まずは、このブログの各ページは大体何文字くらいなのかを見てみましょう。
下のグラフは、各ページの文字数を低い順に左から並べたもので、
縦軸が文字数を表しています。
赤色の線は2000文字を表しています。
500文字~4000文字程度まで様々な文字数のページがあることが分かります。
文字数が多いページと少ないページの比較
それでは、本題の文字数が多いと
検索順位が高いと言えるかどうかについて調べてみましょう。
ここでは、2000文字以上のページと2000文字未満のページに分けて、
その順位を比べてみることにします。
下のグラフは、左に2000文字以上のページの順位、
右に2000文字未満のページの順位を箱ひげ図でプロットしたものです。
黒い太線で表された中央値に注目してみると、
2000文字以上のページの方が上位に来ていることが分かります。
その差は約6位分でした。
このブログでは、2000文字以上の記事の方が、
掲載順位が高くなりそうですね。
何文字がいいのか
では、何文字以上なら検索順位が高くなるのでしょうか。
先ほどは、2000文字で分けましたが、 1000文字、3000文字で分けた場合についても見てみましょう。
上のグラフは左から、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)