1)通常、デフォルトでは、いわば、このようなweb.config設定で404をキャッチします
<customErrors defaultRedirect = "GenericError.htm" mode = "On">
<error statusCode = "404" redirect = "404.html" />
</ customErrors>
Odanko、このアプローチには、SEOオプティマイザーが私に言った問題があります。 少しテストして、ASP.NETが404エラーの場合に返すHTTPコードの種類を見てみましょう。
したがって、最初に302(リダイレクト)を取得し、次に200を取得します。つまり、すべて正常です。 しかし、これは実際には、判明したように、SEOの最適化には良くありません。
問題: ASP.NETは、ページが見つからず、コード200のページにエラーをリダイレクトするだけではない状況でHTTP 404コードを返す必要があります。
解決策1
web.configを少し変更して、静的HTMLファイルではなく、.aspxでリダイレクトが行われるようにします
<customErrors defaultRedirect = "GenericError.htm" mode = "On">
<error statusCode = "404" redirect = "404.aspx" />
</ customErrors>
この404.aspxページのPage_Loadに次のコードを追加します
protected void Page_Load(object sender, EventArgs e)
{
Response.StatusCode = 404;
}
ではテストしてみましょう
よく見えますが、出力に404コードが残っていますが、最初の302リダイレクトコード、次に404という二重の答えがあるので、私のSEOは満足していません。 404コードだけで、1つの答えを返す必要があります。
決定2
web.configの設定をコメントアウトしましょう
<!-<customErrors defaultRedirect = "GenericError.htm" mode = "On">
<error statusCode = "404" redirect = "404.html" />
</ customErrors>->
さて、次のコードをglobal.asaxファイルに追加するか、突然このファイルがプロジェクトにない場合は、最初にプロジェクトに追加します。 コードのロジックは、404エラーをキャッチし、エラー情報をページにリダイレクトすることです。
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpException)
{
if (((HttpException)(ex)).GetHttpCode() == 404)
Server.Transfer("~/404.html");
}
//
Server.Transfer("~/GenericError.htm");
}
わかりました、今私達はテストします
ヤフー、ASP.NETからエラーのために大切な孤独な404コードを受け取りました。 CEOオプティマイザーは満足し、私も興味を持って時間を過ごしました:)
たぶん誰かが助けるでしょう;)