2

私は Backbone.js ルーターを使用するプロジェクトに取り組んでおり、すべてのデータは安静なリクエストを介して JavaScript によってロードされます。サーバー側でJavascriptが有効になっているかどうかを検出する方法がないことはわかっていますが、このWebサイトをインデックス可能にするために考えたシナリオは次のとおりです。

  1. sitemap.xml の各リンクにクエリ文字列を追加し、<script>Javascript が有効かどうかを検出するタグを追加できます。サーバーはこのページをインデックス可能なデータでレンダリングし、ユーザーがこのページにアクセスすると、手動で Backbone.js ルーターを初期化できます。ただし、問題は、サーバー側でインデックス可能なデータをレンダリングするために SQL クエリを実行する必要があり、訪問者がボットでない場合は余分な負荷がかかることです。また、ユーザーがどこかで Web サイトの URL を共有すると、そのページはインデックス可能なページにはならず、Web クローラーはその URL のコンテンツを識別できない場合があります。また、Web クローラーの検索ページに余分な文字列があると、ユーザーにとって煩わしい場合があります。

  2. Google、Yahoo、Bing、Facebook などの一般的な Web クローラーをユーザー エージェントからサーバー側で検出できますが、見逃した Web クローラーがいくつかあるのではないかと思います。

どちらの方法がより便利だと思いますか、またはこの種の Web サイトをインデックス可能にするためのアイデアや経験はありますか?

4

1 に答える 1

4

elias94xx がコメントで示唆したように、このジレンマに対する確実な解決策の 1 つは、Google の「AJAX クロール」を利用することです。簡単に言えば、Google は Web コミュニティに対して、「JS コードを実際にレンダリングするつもりはないようですが、サーバー側でレンダリングしたい場合は、簡単にできるように最善を尽くします」と述べています。彼らは、きれいな URL => 醜い URL 変換と HTML スナップショットという 2 つの基本的な概念でそれを行います。

1) Google は、Web 開発者がクロール可能なクライアント側の URL を指定するために使用できる構文を実装しました。これらの「プリティ URL」の構文は、Google では次のように呼ばれていますwww.example.com?myquery#!key1=value1&key2=value2

その形式の URL を使用すると、Google はその正確な URL をクロールしようとしません。代わりに、「醜い URL」に相当するものをクロールします: www.example.com?myquery&_escaped_fragment_=key1=value1%26key2=value2. その URL には a の?代わりに a#があるため、もちろんこれはサーバーへの呼び出しになります。その後、サーバーは「HTML スナップショット」技術を使用できます。

2) その手法の基本は、Web サーバーでヘッドレス JS ランナーを実行することです。Google がサーバーに「醜い URL」をリクエストすると、サーバーはバックボーン ルーター コードをヘッドレス ランナーにロードし、クライアント側で実行された場合にコードが生成したであろう HTML と同じ HTML を生成します (そして Google に返します)。 .


pretty=>ugly URL の完全な説明は、 https ://developers.google.com/webmasters/ajax-crawling/docs/specification にあります。

HTML スナップショットの完全な説明は、 https ://developers.google.com/webmasters/ajax-crawling/docs/html-snapshot にあります。

ああ、これまでのところすべてが Google に基づいていましたが、Bing/Yahoo もこの構文を採用しました

于 2013-01-06T17:42:53.300 に答える