6

durandal 2.0 を使用して SPA を作成し、ナビゲーションの変更に HTML5 プッシュステートを使用しています。Googleの仕様に従ってすべてをセットアップしました。ハシャバングは含めません /#! 私の URL では、代わりにメタ フラグメント タグを使用しています。

<meta name="fragment" content="!">

私はヘッドレス ブラウザ、ファントム JS を使用して、AJAX アプリケーションの完全にレンダリングされた HTML を Google ボットに提供しています。MVC で ?_escaped_fragment_= を検出し、完全にレンダリングされた HTML を提供する URL への 302 リダイレクトを実行しています。その部分は正常に動作しています。それをテストするには、https://insureflo.com/?_escaped_fragment_= に移動します。リダイレクトと、私のサイトhttps://insureflo.comの完全にレンダリングされた HTML コンテンツが表示されます。

ルートを含むすべての URL を含むサイトマップがあります。これらすべてにもかかわらず、Google はアプリケーションを適切にキャッシュまたはクロールせず、アプリケーションの読み込みページを表示したままです。pushstate を使用して、Google が解析するメタ フラグメント メタ タグに依存し、URL に escaped_fragment を自動的に含めることができるという印象を受けました。

ただし、ウェブマスター ツールで Googlebot として取得すると、次の応答が返されます。

 HTTP/1.1 302 Found
 Cache-Control: private
 Content-Type: text/html; charset=utf-8
 Location: /HtmlSnapshot?url=https%3A%2F%2Finsureflo.com%2F%23
 Server: Microsoft-IIS/8.0
 X-AspNetMvc-Version: 4.0
 X-AspNet-Version: 4.0.30319
 X-Powered-By: ASP.NET
 Date: Sun, 08 Sep 2013 06:59:28 GMT
 Connection: close
 Content-Length: 168

 <html><head><title>Object moved</title></head><body>
 <h2>Object moved to <a href="/HtmlSnapshot?url=https%3A%2F%2Finsureflo.com%2F%23">here</a>.</h2>
 </body></html>

この 302 は仕様によれば正しいと思いますが、リダイレクトされたコンテンツをインデックス化し、サイトの HTMl ビューと画像プレビューの両方に表示しないのはなぜですか?? また、Google の検索結果でキャッシュを表示すると、空白のページが表示され、期待どおりに完全にレンダリングされた HTML ではなく、通常のページでレンダリングされたソースが表示されます。例えば:

http://webcache.googleusercontent.com/search?q=cache:https://insureflo.com

この時点で、私は仕様を読んで読み、AJAX アプリケーションをクロールするための要件を満たしていると信じており、これを理解するためにいくつかの助けが必要です. ここで何か不足していますか?ありがとうございました!

4

2 に答える 2

1

同じことをしようとしたとき、私が見つけたことがいくつかあります。

  1. ウェブマスター ツールの Fetch as Google は、リダイレクトがあったことを通知しますが、それに従いません。

  2. クロール中に Google Bot が実際にリダイレクトをたどるには、ウェブマスター ツールにもリダイレクト先のサイトが必要です。

  3. Google にサイトマップからサイトをクロールさせて _escaped_fragment_ を実行させたい場合は、サイトマップ内のリンクを次の形式にする必要があります。

    http://yourlink.com/#!/stuff

のブログに詳しく書いています。

http://mark.stratmann.me/articles/the-great-ajax-seo-saga

于 2014-10-29T16:19:23.920 に答える