GoogleのAjaxベースのWebページのクロールに関するドキュメント によると、URLにハッシュフラグメント、または#helloworld
のようなURLの末尾に何かが含まれ、!
の後に#
がある場合、 #!helloworld
で、googleはURL url?_escaped_fragment_=helloworld
を要求します。
現在、GoogleでクロールできるようにしたいajaxベースのWebページがあります。時々、ページはハッシュフラグメントを使用します。そのような状況では、_escaped_fragment_
を使用してそのページのhtmlスナップショットを返すようにサーバーをセットアップします。
ただし、多くの場合、そのWebページはハッシュフラグメントをロードせず、その場合でもWebページはajaxを使用してコンテンツをロードします。
ハッシュフラグメントがある場合とない場合があるページでAjaxクロールを有効にするための適切なソリューションが見つかりませんでした。 ハッシュフラグメントがある場合に_escaped_fragment_
を使用し、ハッシュフラグメントがない場合にページのHTMLスナップショットを取得するようにGoogleに指示するにはどうすればよいですか?
Googleのセクション3 Ajaxコンテンツのクロールに関するドキュメント は、ハッシュフラグメントなしでこれらのページでMETAタグを使用することを宣言しています。
ハッシュフラグメントのないページをクロール可能にするには、ページのHTMLの先頭に特別なメタタグを含めます。
したがって、ページに時々あるものとないものがある場合、そのサーバー側を決定し、ハッシュフラグメントが公開されていないときに適切なMETAタグを提供したいようです。
Googleがプロトコルを決定したので、あなたは本当に違うものを使うようにそれを伝えることはできません。あなたがajaxページに#がない場合Googleは通常のページとしてクロールしようとします。 #を持たないページをクロールするようにGoogleに指示するために、特別なメタタグ(通常はホームページ専用)を追加できます。 Googleはエスケープされたフラグメントで同じ置換を行い、サーバーが結果を返すことを期待します。
このメタタグをindex.phpに追加すると:
<meta name="fragment" content="!">
そのindex.phpにハッシュフラグメントがない場合でも、Googleはindex.php?_escaped_fragment _ =というサーバーからページを取得しようとし、サーバーで同じスナップショットを提供できるようにします。他のページで行う方法。
それ以外は、なぜハッシュフラグメントを常に技術的に使用できないのか、実際にはわかりません。
プロジェクトによっては、プログレッシブエンハンスメントの手法に依存する方が便利で実用的であることがわかりました。つまり、Googleや他の検索エンジンがページをクロールしてからJavaScriptを追加できるように、ページがjavascriptなしでコンテンツを提供することを確認します。このテクニックは、私が最近取り組んだ非常にアジャキシ化されたノックアウトベースのプロジェクトで完全に機能し、Googleプロトコルを無視し、基本に戻りました(特に、サイトをクロールする他の検索エンジンにも興味がありました)。
@Christofianは、リンクのクリックなどのイベントの後にハッシュタグが表示されるため、ハッシュタグが使用されているかどうかを判断できるはずです。これは通常、javascript location.hash
またはjQueryメソッドをトリガーして、ハッシュをURLクライアント側に追加します。 URLにハッシュタグがなく、ページにAJAXメタタグを使用している場合、ハッシュタグがある場合は!
を使用します。どちらか一方が他方をオーバーライドしません。メタタグを追加しない場合、ハッシュが追加されているかどうかを確認する前に、ハッシュタグを追加している関数を探す必要があります。
サンプル
var projectSlug = location.hash.replace("\#","");
if(projectSlug != "index"){
processProject(projectSlug);
}