Googleが推奨する、SEOに最適な無限スクロールをjScrollで実装する

with 2件のコメント

今や少し下火になってきている無限スクロール、昔はホットだった。Facebookが使ってるんだし俺らも使おうぜ!ってな感じで、その実装方法が乱れ飛んだのも今は昔。

で、この技術、SEOに最適な実装方法というのがある。Googleが2014年末に投稿したブログに従えば、ちょっと気をつけて実装しないといけないってことが分かる。

今回はその方法を解説する。まずはjScrollというjQueryプラグインで無限スクロールを実装する方法を解説し、これをSEOに最適化させる方法へ続く。

 

プロジェクト作り

jScrollのダウンロード

まずはGithubからjScrollをダウンロードする。

pklauzinski/jscroll: jScroll Infinite Scrolling Plugin for jQuery

 

落としてきたファイル一式から『jquery.jscroll.min.js』を取り出してこのようなプロジェクトを作ろう。

01_starting-construction.png.formatted

 

index.htmlの中身

index.htmlは、jQueryとローカルの2つのjsファイルを使うよう設定する。

※test-jscroll.jsは空でOK

 

jScrollの使い方

記事でjScrollを使ってみる

まずは一番簡単にjScrollを使ってみる。

想定として、ブログやWebマガジンの記事を無限スクロールさせることを考える。マーケティングマガジンのDIGIDAYなんかで使われている、記事の最後まで来たら自動で次の記事が読み込まれるアレだ。

無限スクロール例 → DIGIDAY

 

記事を作る

記事の構成を極力簡単にするため、ヘッダーと文章、次の記事へのリンクがあるものを作る。先ほどのindex.htmlのbodyにこう書こう。

最上位のdivに指定しているscrollクラスは、無限スクロールさせる対象だということをjScrollに教えるために使う。

 

2ページ目の追加

最後のaタグで次の記事へのリンクを貼ったので、そのファイルをプロジェクトに追加しよう。

02_add-page2.html.png.formatted

 

1ページ目の構成と同じく、page2.htmlの内容もできるだけ簡単にする。

ローディング表示の確認のために2ページ目にもaタグを作ったけれど、page3.htmlは追加しなくてOK。次のページが見つからない場合、jScrollはずっとローディング表示をする。

 

jScrollを使う

最後に、jScrollを使って無限スクロールさせるコードをtest-jscroll.jsに記述しよう。やることは簡単で、HTMLの実行が終わった段階でscrollクラス経由で無限スクロールを設定するだけだ。

 

記事の構成が簡単すぎて無限スクロールになっているかわかりづらいけれど、index.htmlをブラウザで開いて、1ページ目の下に2ページ目が表示されていれば上手く行っているってことだ。

03_page1-and-page2.png.formatted

 

次へのリンクの指定なしにjScrollが動くワケ

無限スクロールする部分は指定したけれど(scrollクラス)、次へのリンクであるaタグは指定しなかった。この指定が無い時、無限スクロール範囲の最後のaタグを探すようにjScrollが作られているおかげだ。

実際は明示的に次へのリンクを指定したい向きもあると思う。それを含めて、応用的な使い方を解説していこう。

 

応用的jScrollの使い方

次の記事へのリンク指定

さて、明示的に次の記事へのリンクを持つaタグを指定する場合、無限スクロール範囲を指定したようにセレクターでaタグをjScrollで知らせてあげる。

index.htmlとpage2.htmlのaタグにnextクラスを付けよう。

 

これをjScrollに伝える部分はこうだ。test-jscroll.jsへ記述する。

 

再度、index.htmlを表示してみよう。先ほどと同じように1ページ目と2ページ目が連なって表示されていれば成功だ。

 

ローディングアニメーションとテキストの指定

今回の例だと記事が短すぎて読み込みが一瞬で終わるけれど、実際は読み込み完了にすこし時間が掛かるはず。そんな時にローディング中ということを示すアニメーションとテキストを表示することができる。

今回はアニメーションの変わりにFont Awesomeのローディングアイコンを使うため、まずはCDNからアイコンを取得するようにする。このlinkタグをhead内に書こう。

ローディングアイコンとテキストの指定は、次の記事へのリンクを指定した時と同じく、.jscroll()を使う際に伝えてあげる。

 

他のカスタマイズ

コンテンツセレクターや、無限スクロールする回数の指定など、jScrollは他にも色々とカスタムできる。詳しくはこちら。すべて、.jscroll()を使う際に指定する。

jScroll – options

 

SEOに最適な無限スクロールをjScrollで

ここからは、Googleが推奨する形で無限スクロールを実装する方法を考える。やっと本題でR。

全体像はGoogleブログを見て頂くとして、ここでは記事について必要な無限スクロールの作法を解説する。

Official Google Webmaster Central Blog: Infinite scroll search-friendly recommendations

 

pushStateによるブラウザの履歴の更新

Googleブログの記事では、無限スクロールを次々にページを捲っていく事と同じとしている。つまり、ユーザーが自ら次の記事へのリンクをクリックしているのと同じということだ。

そのため、無限スクロールで記事が表示される度にブラウザの履歴(URL)を更新しなければいけない。これは、スクロールでページを戻った時も同じだ。すなわち、スクロールでページを進んだり戻ったりする度にURLを更新すればいい。

ここでHTML5のHISTORY APIに含まれるpushStateの出番だ。これを使って、1記事の表示が完了する毎にブラウザの履歴を更新する。

ロジックとしては、各記事が表示された時にURLを更新するようにする。今回は手っ取り早く、記事のh1タグが画面に表示された時に更新処理を走らせるようにした。

 

inviewのダウンロード

まずは、要素が表示されたことを検知できるjQueryプラグイン inview を入れる。

Githubのレポジトリからダウンロードし、jquery.inview.min.jsをプロジェクトのjsフォルダに置こう。

protonet/jquery.inview

 

inviewを使う

index.htmlおよびpage2.htmlのhead内にinviewを使う記述をする。

 

URLを更新するために、各記事のh1要素にページ毎のURLを持たせ、inviewで使うクラスを付ける。この例の <your-url> は各自の環境のURLに置き換えてほしい。

 

URLを更新する部分はこうなる。top-of-pageを持つh1要素すべてに対し、条件が合えばpushStateを使ってURLを更新している。test-jscroll.jsに追記しよう。

 

各記事へ直接アクセスできるようにする

今回は2つのページを用意し、無限スクロールで2ページ目を表示するようにした。この2ページ目に直接アクセスした時でも、正しくページが表示されるようにと推奨されている。

今回のプロジェクトで言えば、<your-url>/page2.htmlにアクセスし、なんら問題なくコンテンツが表示されればいい。

 

ちゃんとした無限スクロールは意外と面倒

このように、SEOに配慮した無限スクロールを実装するのは手間が掛かるもの。だからなのか、流行りが終わったからなのか、無限スクロールを目にする機会は減った。これから無限スクロールを使おうとするプロジェクトでは、適宜考えて使っていきたい。

 

jQueryをきちんと学びたいWebデザイナーの方へ
 

2 Responses

  1. だかつ
    |

    情報、ありがとうございます。SEOに最適な無限スクロール、やってみました。

    Firefoxが、1,2,3,4ページと順に読み込みながら表示されては消えていき、
    読み込み終了時には、1(index)と4ページしか表示されませんでした。

    IEは、確認してませんが、
    未対応なブラウザもありますか?

    • toach
      |

      試して頂いてありがとうございます^^ Chromeでのみ確認していますので、Firefoxは何らかの調整が必要そうですね。