さんまがおいしい季節だねー(´・ω・`)

Ajax を利用したウェブサイトを適切にクロールするためのグーグルの提案に関するウェブサイト開発者向けの説明

Google,JavaScript,SEO — タグ: , , — さくら @ 2009/10/09 21:18

グーグル公式ブログの一つ Official Google Webmaster Central Blog にて A proposal for making AJAX crawlable という記事が公開されました。SEM R 様が訳されたものを、Google、AJAXサイトを検索エンジンに登録する方法を解説にて公開されてます。

ポックンは SEM R 様の記事を公式サイトより先に読んだのですが、末尾に私は開発者ではないので専門用語の使い方がわからず、文章が変ですがご容赦をとの注意書きがありましたので続けて公式サイトも読みました。ところが元の文章も、パッと見ただけではウェブサイト開発者に対してグーグルがどうして欲しいのかちと分かりにくいような感じの内容でしたので、ウェブサイト開発者主観で今回のグーグルからの提案の内容を簡単にご説明したいと思います。

まず今回のグーグルからの提案は、Ajax を利用しているウェブサイトに対してグーグル検索時に適切な検索結果を表示するための方法に関するものです。グーグルによると、ウェブサイトに最低限の変更を施すことで Ajax コンテンツがクロールできるようになるとのことです。

この提案の骨子は以下の2点です。

  • headless browser を使って Ajax コンテンツをサーバサイドで処理し、クローラに Ajax 処理済みのコンテンツを返す
  • クローラは、特別な形式の URL を Ajax コンテンツへのリンクと認識し、サーバサイドでの Ajax コンテンツの処理が必要なことを、クロールする際にウェブサイトに通知する

要はお前ら俺様のために Ajax を展開したコンテンツも用意しろよということのようです。相変わらずのジャイアニズムですねww

ポックンの愚痴は置いといて、提案の細かい部分については、公式ブログの図を見ていただくのが一番分かりやすいと思いますので拝借しました。クリックで拡大できます。

ajax-diagram-1

今回の提案では、以下のように Ajax によりクライアントサイドにて動的に生成するコンテンツの代替コンテンツをクローラに提供することで、Ajax コンテンツの内容が(検索語彙やキャッシュ等の)検索結果に反映されるようになります。

  1. ウェブサイト開発者は、Ajax のトリガとなる <a> タグ等の URL に #!STATE 形式のフラグメント(#以降の部分)を付与します。
    <a href="http://example.com/page?query#!mystate">link</a>

    この #!STATE 形式のフラグメントを持つ URL を pretty URL と呼びます。

  2. クローラは pretty URL のフラグメント部分を、_escaped_fragment_=STATE 形式の URL クエリに変換してサイトにリクエストします。上のリンクは、クローラから http://example.com/page?query&_escaped_fragment_=mystate としてアクセスされることになります。
    _escaped_fragment_ に変換された URL を ugly URL 呼びます。
  3. ウェブサイトは ugly URL によるリクエストを受け付けると、headless browser を使用してサーバサイドで Ajax コンテンツを生成します。
  4. クローラはコンテンツを受け取り、検索結果に表示されるようになります。このとき SERP の URL には pretty URL が表示されます。

headless browser とは、GUI を持たないテストなどに用いられるブラウザのことです。HTML 上の JavaScript を処理して、処理後の HTML を返すようなプログラムです。公式ブログでは HtmlUnit が紹介されてます。

なお pretty URL と ugly URL の形式(#!STATE と _escaped_fragment_=STATE)は提案レベルのものですので、今後変更される可能性があります。公式ブログでもご意見募集中とのことです。

問題は headless browser

今回の提案でグーグルが言いたいのは、headless browser を使うとウェブサイト開発者の負荷はそんなに高くないから、検索エンジン用のコンテンツも用意してよ、ってとこだと思います。確かにさくらも、headless browser を用意できればウェブサイト側を対応させるのは簡単だと思います。

ただこの headless browser を用意すること自体がちと面倒のような気がします。

公式ブログで紹介されている HtmlUnit は Java なので、専用サーバとかお持ちの方なら簡単にインスコできると思いますので良いのですが、共用サーバの場合 Java は入ってないところが多いのであまり現実的な選択肢では無いと思います。

他の headless browser では、Python-SpiderMonkey あたりが使えると思いますが、こちらも XULRunner が gtk を必要としたりしますので、共用サーバでは使いにくいでしょう。(その他の headless browser については、http://www.holovaty.com/writing/headless-html-rendering-engine/ をご覧ください。)

という感じで、もう少し軽量な headless browser が出てくるまでは、お金持ってるところ向きの話という感じでしょうか。

GAE/J 上で HtmlUnit が動かせれば(主にコスト面の)問題解決できるかなと思いさっきまで試してたのですが、GAE のサンドボックスの制限にひっかかって動かないようでした。暇があれば HtmlUnit を改造して GAE で headless brower proxy を動かしたいなと思ってますが、いつになることやらという感じですww

まあ今のところ提案レベルですのですぐ何かしないといけない話でも無いと思いますが、とりあえずこういった動向があるよ程度の話を押さえておいた方が良いかと思います。

4件のコメント »

  1. 良い記事でした☆ 私もさくらたんくらいウェブ知識と英語ができるようになりたいです。

    コメント by あにょ — 2009 年 10 月 12 日 @ 10:46
  2. [...] Ajax を利用したウェブサイトを適切にクロールするためのグーグルの提案に関するウェブサイト開発者向けの説明 [...]

    ピンバック by URLの#!ってなんていうの? | げことじ。 — 2011 年 5 月 25 日 @ 16:23
  3. セグレ教授は次のようにコメントしています。

    コメント by グッチ ネックレス コピー — 2016 年 9 月 26 日 @ 12:58
  4. The only truly secure system is one that is powered off, cast in a block of concrete and sealed in a lead-lined room with armed guards — and even then I have my doubts.

    コメント by teenagebirthdayinvitations — 2017 年 6 月 9 日 @ 17:34

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2017 さくらたんどっとびーず | powered by WordPress with Barecity