302のリダイレクトからエラーページのためにASP.NETサイトをインデックスできない検索エンジン
質問
私は、ASP.NETサイトの原因が検索エンジン(サイト全体でインデックスが付けられていないことを決定するのに最も困難な時間)を持っています。 Googleの「GoogleBotとしてのFetch」ツールを使用すると、以下のエラーがスローされます。自分のサイトが無効になっていることを確認しました(つまり、web.configでsessionmode = "off"の設定)、Web全体でグーグルで検索しましたが、まだ運がありません。
GoogleBotから得ているエラーは次のとおりです。
HTTP/1.1 302 Found
Date: Thu, 02 Dec 2010 23:05:49 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Location: /ErrorPage.aspx?aspxerrorpath=/Default.aspx
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 168
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="%2fErrorPage.aspx%3faspxerrorpath%3d%2fDefault.aspx">here</a>.</h2>
</body></html>
解決
私は自分で答えを見つけました。
使用する前に、request.userlanguages!= nullを確認してください。また、現在のカルチャーが有効なデフォルト値に設定されていることを確認してください。これらの両方のチェックの理由は、ボットがrequest.userlanguagesを使用しないためです - それは常にnullです。ブラウザはrequest.userlanguagesを使用します。言い換えればそれを言い換えるには: request.userlanguagesがnullの場合、現在の培養を設定しないでください。
これが問題です:
私のサイト内のすべてのASPXページは、System.web.ui.pageから継承するカスタムベースクラスから継承されます。これは、ボットのみの例外をスローするコードでonload()またはinitイベントをオーバーライドするまで問題ではありません。 onload()イベントにこのコードラインがありました:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);
このコードは、ブラウザからASPXページにアクセスするときにうまく機能します。ああ!ブラウザを使用するつもりはないのは誰ですか?回答:GoogleBotおよび他のすべてのボット。
GoogleBotがサイトのインデックスを備えているのに問題があるかどうかを確認する方法:
- まだ行っていない場合は、Google WebMasterToolsにサインアップしてください。
- Labsに移動します - > GoogleBotとしてフェッチします
- 確認するURLを入力します。次に、ステータスリンクをクリックして、GoogleBotが見つけたものを確認します。 GoogleBotがリダイレクト(302のような)を返した場合、通常は良いことではありません。サイト上のすべてのページがカスタムエラーページに302リダイレクトを取得している場合、問題があります。 それが意味するのは、GoogleBotがそれらにアクセスしようとするたびに、あなたのWebページがエラー(未解決の例外)を投げていることです。 GoogleBotが持つ可能性のあるエラーについては、page_load()およびinit()関数を調べてください。また、Cool Command Lineアプリを使用してページをテストすることもできます カール (http://curl.haxx.se/)。このツールを使用して、生産にリリースする前にテストサーバーでサイトをテストすることができました(これは、Google Fetchを使用するときに変更するたびに行う必要があることです)。