web-dev-qa-db-ja.com

パーマネントリダイレクトの定義は何ですか?

301リダイレクト、javascript meta http-equiv="refreshアプローチ、そして最後に404を使用することで少し混乱しています。

301(および302)が元のHTMLページをクライアントに渡さない可能性があることがわかります(IISまたはApacheなどでサーバー上で処理でき、 '新しい'表示するページ、そのページのみがブラウザに渡されます)。ここで、メタ更新ではページをブラウザに渡す必要があり、アクションが実行されます(転送)。

ただし、404ページもブラウザに送信されることはありません!ページを見つけることを検討してください。IISはそれを見つけることができないので、404を使い分けてください。404には、転送ロジックを含むサーバーコードがあります。したがって、1ページのみがブラウザーに送信されます。

サーバーが返すのは1つの結果(1つのHTMLページ)のみであり、これが永続的な301であるため、URL書き換えを使用するか、上記の404の例を使用するかは同じです(301として扱われるという点で同じです)?

この場合、これは実際に302とどのように異なりますか? 302または301であることを説明するために、メタ情報を追加する必要がありますか?私の研究はそうではないことを示唆しています。

1
Dave

主にいくつかの用語が混同されているために、あなたの質問は少し混乱していると思います。

リダイレクトとは、文字通り、クライアントが特定のURLをロードしようとし、サーバーがそれらを別のページにリダイレクトしたことを意味します。これがユーザーが意図したページであるかどうかは、技術的な観点からはほとんど関係ありません。

HTTPステータスコードは、サーバーが要求されたページに関する情報を渡す手段です。たとえば、ページが見つからなかった場合、コード404「見つかりません」を送信します。一般に、サーバーレベルでリダイレクトについて話すとき、人々は301(「永続的に移動」)または302(「一時的に移動」)ステータスコードを参照します。

特定のページ(カスタム404.htmlなど)をエラーページとして表示するように設定する場合、technicallyクライアントは要求されたURLから実際の404ページ。ただし、ステータスコードは変更されないため、何らかのリダイレクションが行われていても、これはすべての意図および目的に対して「見つかりません」と解釈されます。


クライアントにステータスコードを送信するには、いくつかの方法があります。その中には、サーバーレベルで書き換えルールを使用し(Apache/IIS)、実行されるサーバー側コード内からヘッダーを送信します(PHP、Perlなど)。

ただし、<meta http-equiv="refresh">notのいずれかです。これは、サーバーが処理した後、クライアント側で解釈されるHTMLタグです。同じことは、訪問者を別のURLにリダイレクトする可能性のあるクライアント側のJavaScriptにも当てはまります。これは、ページ上にあり、他のページへのリンクをクリックするのと同じように機能します。

少し混乱させるために、SEOの目的で、Googleはhttp-equiv="refresh"を0秒のタイムアウト(インスタントリダイレクト)でステータスコード302として解釈することを選択しました。これは単なる解釈であり、公式ではありません。技術的な観点から(更新を使用してページを読み込むときに開発者コンソールのネットワークタブを見ながらこれを確認できます)、ページ読み込み(ステータス200)の直後に別のページ読み込みが続きます。

2
Stephan Muller