1

ログを確認したところ、検索エンジンが私のWebサイト上の多くの偽のURLにアクセスしていることがわかりました。多くのリンクが変更される前のものである可能性が高く、301リダイレクトを行ったにもかかわらず、一部のリンクが非常に奇妙な方法で変更され、.htaccessファイルで認識されません。

すべてのリクエストはindex.phpによって処理されます。URLが正しくないために応答を作成できない場合は、代わりにカスタムエラーページが表示されます。簡略化されたコードでは、index.phpは次のようになります

try {
  $Request = new Request();
  $Request->respond();
} catch(NoresponseException $e) {
  $Request->presentErrorPage();
}

このページがステータス200を返し、ボットにページが有効でなくても有効であることを通知していることに気づきました。

ボットにそのページへのアクセスを停止するように指示するために、catchステートメントに404を含むヘッダーを追加するだけで十分ですか?

このような:

header("HTTP/1.0 404 Not Found");

テストすると問題ないように見えますが、SEボット(およびおそらくユーザーエージェント)が混乱するのではないかと心配しています。

4

3 に答える 3

3

あなたはそこに着きます。考え方は正しいです。404を指定します。ただし、クライアントがHTTP / 1.1を使用してクエリを実行し、1.0を使用して応答すると、一部のクライアントが混乱します。

これを回避する方法は次のとおりです。

header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
于 2012-11-18T16:43:11.987 に答える
1

SEボット、これを見ると混乱します。

HTTP/1.1 200 OK

<h1>The page your requested does not exist</h1>

またはこれ:

HTTP/1.1 302 Object moved
Location: /fancy-404-error-page.html

ここで説明されています:

存在しないページに対して404または410以外のコードを返す(または、404を返す代わりに、ユーザーをホームページなどの別のページにリダイレクトする)と、問題が発生する可能性があります。まず、そのURLに実際のページがあることを検索エンジンに通知します。その結果、そのURLがクロールされ、そのコンテンツにインデックスが付けられる可能性があります。Googlebotが存在しないページに費やす時間のために、一意のURLがすぐに検出されなかったり、頻繁にアクセスされたりする可能性があり、サイトのクロールカバレッジに影響が及ぶ可能性があります(また、サイトが検索で上位にランク付けされることを望まない場合もあります)クエリファイルが見つかりません)。

プログラムで404ヘッダーを送信することについてのあなたの考えは正しく、検索エンジンに、要求したURLが存在しないため、クロールしてインデックスを作成しないように指示します。応答ステータスを設定する方法:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");

header(":", true, 404);  // this is used to set a header AND modify the http response code
                         // ":" is used as a hack to avoid specifying a real header

http_response_code(404); // PHP >= 5.4
于 2012-11-18T17:44:48.510 に答える
1

正常に動作するクローラーは、サイトのトップレベルでrobots.txtを尊重します。クローラーを除外する場合は、@SalmanAの応答が機能します。サンプルのrobots.txtファイルは次のとおりです。

User-agent: *
Disallow: /foo/*
Disallow: /bar/*
Disallow: /hd1/*

すべての人が読める必要があります。これはユーザーをページから外すことはなく、robots.txtを尊重するボットであることに注意してください。ほとんどのユーザーはそうしています。

于 2012-11-18T18:14:51.080 に答える