現実世界の問題:
私のアプリはHerokuでホストされていますが、Herokuは、AJAXコンテンツのインデックスを作成するためにGooglebotのHTMLスナップショットを生成するためのヘッドレス(GUIレス)ブラウザー( HTMLUnitなど)を実行するためのソリューションを提供できません。
私の提案する解決策:
まだ読んでいない場合は、AJAXアプリケーションをクロール可能にするためのGoogleの完全な仕様を読むことをお勧めします。
私が持っていると想像してください:
- ドメイン上のHerokuでホストされているSinatraアプリ
http://example.com
- アプリには、ページの上部にTabA、TabB、TabCのタブがあります
- 各タブの下には、SubTab1、SubTab2、SubTab3があります。
- URLが
http://example.com#!tab=TabA&subtab=SubTab3
クライアント側の場合はonloadで、Javascriptはlocation.hash
AJAXを介してTabA、SubTab3コンテンツを取得してロードします。
注:ハッシュバン(#!)はGoogle仕様の一部です。
Google App Engine(GAE)でホストされるシンプルな「Webサービス」を構築したいと思います。
- URLパラメータを受け入れます
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(例:URLパラメータはURLEncodedである必要があります) - HTMLUnitを
http://example.com#!tab=TabA&subtab=SubTab3
実行して、サーバーでクライアント側のJavaScriptを開いて実行します。 - HTMLUnitは、すべてが完了すると(または、45秒が経過すると)DOMを返します。
- 返されるコンテンツはJSON/JSONPを介して返送されるか、URLが生成されてGoogle App Engineサーバーに保存されたファイルに返されます(ファイルベースの「キャッシュされた」結果の場合)...ここで提案を開きます。ファイルへのURLが返された場合は、CURLを使用してソースコード(別名HTMLスナップショット)を取得できます。
私のhttp://example.com
アプリは...への呼び出しを管理する必要がありhttp://htmlsnapshot.appspot.com
ます基本的に:
- Googlebotsの呼び出しをキャッチします
http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3
(googlebotクローラーは特定の文字をエスケープします(例:%26 =&))。 - バックエンドからにリクエストを送信します
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(urlパラメータはURLEncodedである必要があります) - 返されたHTMLスナップショットをフロントエンドにレンダリングします。
- Googleはコンテンツのインデックスを作成し、喜んでいます。
GoogleAppEngineまたはJavaまたはHTMLUnitの経験はありません。
私はそれを理解することができるかもしれません...そして私がそうするならば私の結果を投稿します。
そうでなければ、これは誰かがこのようなWebサービスをセットアップするための初心者のステップバイステップガイドを概説するキックアスブログ投稿を書くための非常に良い機会だと思います。
これにより、より多くの人々に優れた(そして無料の)GoogleAppEngineを紹介します。また、間違いなく、より多くの人々がクロール可能なAJAXコンテンツにGoogleの仕様を採用することを奨励します...私たち全員が恩恵を受けることができるものです!
グーグルの仕様がより受け入れられるにつれて、ヘッドレスブラウザを設定する「ハードル」は多くの開発者に答えを求めてグーグルを送るでしょう!名声と栄光への答えを今すぐ手に入れましょう!(編集:少なくとも私はあなたの賞賛を歌います)。
@_chrisjacob
解決策について話し合いたい場合は、ツイッターで私に連絡してください。