Googlebotのレンダリング処理についてさらに突っ込んで聞いてきた at #SMX Advanced 2015

[レベル: 上級]

GoogleのMaile Ohye(マイリー・オーイェ)さんによる、Googleのレンダリング処理SMX Advanced 2015でのセッションを1つ前の記事でレポートしました。
トピックは、現在のGooglebotのレンダリング能力に関してでした。

SMXでプレゼンするマイリーさん

この記事では、Googlebotのレンダリングについてセッション終了後にマイリーさんにもう一歩突っ込んで聞いてきたことを共有します。

たとえソースコードに存在しなかったとしても、ブラウザで見えていればそのコンテンツをGooglebotは認識できるとのことでした。
しかしHTMLタグは、セマンティック的な役割を果たすものとして依然として意味を持ちます。

Ajax生成コンテンツの認識

Ajax(JavaScript)で生成されたコンテンツで、ブラウザでは見えるけれどHTMLのソースコードには存在しないとしてもGoogleは認識できるの?

このように質問したところ、

ええ、認識できるわよ。

との回答をもらいました。
たとえソースになくてもユーザーに見えるものはGooglebotにも見えるとのことです。

たとえばセッションのなかでもマイリーさんは次のように言っていました。

レンダリングによって発見されたURLはクロールされるし、PageRankを渡す。

一般的なaタグでなくても、JavaScriptによって生成されたリンクで、それがブラウザ上でリンクとして機能しているのあれば、通常のaタグリンクと同等にGoogleは扱えます。

ここで、JavaScriptでリンクを生成する方法といってもたくさんあります。
RKGの検証では、試したすべての方法のJavaScriptリンクをGooglebotは認識したとのことです。

リンクにかぎらず、レンダリングした結果ブラウザで見えるものはほぼGooglebotにも見えると解釈してよさそうです。

別々にインデックスさせるなら一意のURLを割り当てる

ただしAjaxでできあがったコンテンツを別々にインデックスさせるのであれば、それぞれにユニークなURLを割り当てる必要があります。
「#」だけでの区別では「#」以下を取り去ったURLだけがインデックスされます。

ユニークなURLの割り当てには、たとえばHTML5のpushStateが使えます。
間もなく発表予定の新しい仕様では、「#」ではなく「#!」に置き換えるだけでも大丈夫になるかもしれません。
Ajaxの新しいサポート仕様については近いうちに発表があるはずです。

いずれにしてもAjaxのクロールに関しては、以前の推奨構成にあったスナップショットの作成はまったく不要になります。

HTMLタグは依然として意味を持つ

続けて、マイリーさんに次の質問を尋ねました。

動的に生成されていてブラウザでは見出しに見える部分があったとします。HTMLではh1タグが付いていないくても、見出しとしてGooglebotは認識できる?

マイリーさんの回答は次のとおりでした。

HTMLタグにはセマンティック的な役割もあって、h1タグは、ほんの少しだけれど評価対象の要素になることがあるから記述しておいたほうがいいわね。

hタグのように、“意味付け”する目的が強いタグは見た目だけをそれらしく見せるのではなく、きちんとマークアップしたほうがいいでしょう。
つまり、Ajax(JavaScript)で生成したコンテンツやリンクをGooglebotは認識しますが、セマンティック的な意味付けには依然としてタグがあったほうが好ましいということです(もっとも当たり前といえば当たり前かも)。

SMXに来ていたもう1人のGoogle社員のゲイリー・イリーズ氏は、Googleは今は完璧にAjaxコンテンツをクロール、インデックスできると自信満々に言っていました。
検索エンジンのためだけにやらなければならない複雑な設定が少なくなるのは嬉しいことです。
その分、コンテンツに労力をかけられますからね。