リダイレクトと Google 検索

リダイレクト URL は、既存の URL を別の URL に解決することで、ページが別の場所にあることをユーザーや Google 検索に伝えるものです。リダイレクトは、次のような場合に特に役立ちます。

  • サイトを新しいドメインに移転済みで、可能な限りシームレスに移行したい場合。
  • サイトにアクセスする際に入力する URL が、ユーザーによって異なる場合。たとえば、複数の URL(http://example.com/home、http://home.example.com、http://www.example.com など)でホームページにアクセスできる場合、1 つの URL を優先宛先(正規の宛先)として選び、リダイレクトで他の URL からその URL にトラフィックを送信することをおすすめします。
  • 2 つのウェブサイトを結合したため、使わなくなった URL へのリンクが正しいページにリダイレクトされるようにしたい場合。
  • ページを削除して、ユーザーを新しいページに誘導する場合。

リダイレクト タイプの概要

通常、ユーザーはリダイレクトのタイプの違いを区別できません。Google 検索では、強弱のあるシグナルとしてリダイレクトを使用してリダイレクト先が正規版であることを示します。リダイレクトが必要だと予想される期間と、Google 検索の検索結果に表示させたいページに応じて、選択するリダイレクトを決定してください。

  • 永続的なリダイレクト: 検索結果に新しいリダイレクト先を表示します。
  • 一時的なリダイレクト: 検索結果にリダイレクト元のページを表示します。

次の表は、永続的なリダイレクトと一時的なリダイレクトを設定するためのさまざまな方法を、Google によって正しく解釈される可能性が高い順に説明しています(たとえば、サーバー側のリダイレクトは Google によって正しく解釈される可能性が最も高くなります)。状況やサイトに適したリダイレクト タイプを選択してください。

リダイレクト タイプ
永続的

Googlebot はリダイレクトを追跡します。リダイレクトはインデックス登録パイプラインによって、リダイレクト先が正規版であることを示す強いシグナルとして使用されます。

HTTP 301 (moved permanently)

サーバー側のリダイレクトを設定します。

HTTP 308 (moved permanently)
meta refresh(0 秒)

meta refresh リダイレクトを設定します。

HTTP 更新(0 秒)
JavaScript location

JavaScript リダイレクトを設定します。

Crypto リダイレクト

詳しくは、crypto リダイレクトをご覧ください。

一時的

Googlebot はリダイレクトを追跡します。リダイレクトはインデックス登録パイプラインによって、リダイレクト先が正規版であることを示す弱いシグナルとして使用されます。

HTTP 302 (found)

サーバー側のリダイレクトを設定します。

HTTP 303 (see other)
HTTP 307 (temporary redirect)
meta refresh(>0 秒)

meta refresh リダイレクトを設定します。

HTTP refresh(>0 秒)

サーバー側のリダイレクト

サーバー側のリダイレクトを設定するには、サーバー設定ファイル(Apache の .htaccess ファイルなど)にアクセスするか、サーバー側のスクリプト(PHP など)を使ってリダイレクト ヘッダーを設定する必要があります。サーバー側で永続的なリダイレクトと一時的なリダイレクトの両方を作成できます。

サーバー側の永続的なリダイレクト

検索エンジンの結果に表示されるページの URL を変更する必要がある場合は、可能な限りサーバー側の永続的なリダイレクトを使用することをおすすめします。これは、Google 検索とユーザーを確実に正しいページに導くための最善の方法です。ステータス コード 301308 は、ページが別の場所に完全に移転したことを意味します。

サーバー側の一時的なリダイレクト

ユーザーを別のページに一時的に誘導するには、一時的なリダイレクトを使用します。これにより、Google は古い URL を検索結果に長期間保持することもできます。たとえば、サイトのサービスが一時的に利用できなくなった場合、一時的なリダイレクトを設定して、検索結果にある元の URL に影響を与えずに、その状況を説明するページにユーザーを誘導できます。

サーバー側のリダイレクトの実装

サーバー側のリダイレクトの実装は、ホスティングとサーバーの環境や、サイトのバックエンドのスクリプト言語によって異なります。

PHP で永続的なリダイレクトを設定するには、header() 関数を使用します。画面にコンテンツを送信する前に、ヘッダーを次のように設定する必要があります。

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com/newurl');
exit();

同様に、PHP で一時的なリダイレクトを設定する場合は、次のようになります。

header('HTTP/1.1 302 Found');
header('Location: http://www.example.com/newurl');
exit();

ウェブサーバーの構成ファイルにアクセスできる場合は、リダイレクト ルールを自分で記述できる可能性があります。次のうち、該当するウェブサーバーのガイドをご確認ください。

  • Apache: Apache .htaccess チュートリアルApache URL Rewriting GuideApache mod_alias のドキュメントをご覧ください。たとえば、最も簡単な形式のリダイレクトを設定するには、以下のように mod_alias を使用します。

    # Permanent redirect:
    Redirect permanent "/old" "http://example.com/new"
    
    # Temporary redirect:
    Redirect temp "/two-old" "http://example.com/two-new"

    より複雑なリダイレクトの場合は、mod_rewrite を使用します。次に例を示します。

    RewriteEngine on
    # redirect the service page to a new page with a permanent redirect
    RewriteRule   "^/service$"  "/about/service"  [R=301]
    
    # redirect the service page to a new page with a temporary redirect
    RewriteRule   "^/service$"  "/about/service"  [R]
  • NGINX: NGINX ブログの Creating NGINX Rewrite Rules をご覧ください。Apache と同様、リダイレクトを作成するにはさまざまな方法があります。次に例を示します。

    location = /service {
      # for a permanent redirect
      return 301 $scheme://example.com/about/service
    
      # for a temporary redirect
      return 302 $scheme://example.com/about/service
    }

    より複雑なリダイレクトの場合は、rewrite ディレクティブを使用します。

    location = /service {
      # for a permanent redirect
      rewrite service?name=$1 ^service/offline/([a-z]+)/?$ permanent;
    
      # for a temporary redirect
      rewrite service?name=$1 ^service/offline/([a-z]+)/?$ redirect;
    }
  • その他のウェブサーバーについては、サーバーの管理者またはホスティング事業者にお問い合わせください。ご使用の検索エンジンでガイドを検索することもできます(例: 「LiteSpeed redirects」を検索)。

meta refresh とそれに対応する HTTP

サーバー側のリダイレクトをプラットフォームに実装できない場合、代わりに meta refresh リダイレクトを実行できる可能性があります。Google では、次の 2 種類の meta refresh リダイレクトを区別しています。

  • 即時の meta refresh リダイレクト: ページがブラウザに読み込まれるとすぐにトリガーされます。Google 検索では、即時の meta refresh リダイレクトは永続的なリダイレクトとして解釈されます。
  • 遅延型の meta refresh リダイレクト: サイト所有者が任意設定する秒数の後にトリガーされます。Google 検索では、遅延型の meta refresh リダイレクトを一時的なリダイレクトと解釈します。

meta refresh リダイレクトを、HTML の head セクションに配置するか、HTTP ヘッダーにサーバー側のコードとともに配置します。たとえば、HTML の head セクションに即時の meta refresh リダイレクトを次のように含めることができます。

<!doctype html>
<html>
  <head>
  <meta http-equiv="refresh" content="0; url=https://example.com/newlocation" />
  <title>Example title</title>
  <!--...-->

次は HTTP ヘッダーを使用したリダイレクトの例で、これはサーバー側のスクリプトを使用して挿入できます。

HTTP/1.1 200 OK
Refresh: 0; url=http://www.example.com/newlocation
...

遅延型のリダイレクト(Google によって一時的なリダイレクトと解釈されます)を作成するには、content 属性を、リダイレクトを遅延させる秒数に設定します。

<!doctype html>
<html>
  <head>
  <meta http-equiv="refresh" content="5; url=https://example.com/newlocation" />
  <title>Example title</title>
  <!--...-->

JavaScript location リダイレクト

URL のクロールが完了すると、Google 検索は、ウェブ レンダリング サービスを使用して JavaScript を解釈し、実行します。

JavaScript リダイレクトを設定するには、HTML head 内の script ブロックで location プロパティをリダイレクト先 URL に設定します。次に例を示します。

<!doctype html>
<html>
  <head>
    <script>
      window.location.href('http://www.example.com/newlocation')
    </script>
    <title>Example title</title>
    <!--...-->

Crypto リダイレクト

従来のリダイレクト方法を実装できない場合でも、ページやそのコンテンツが移転したことをユーザーに知らせる必要があります。これを行うための最も簡単な方法は、新しいページへのリンクと、簡単な説明を追加することです。たとえば、次のようなリンクです。

<a href="https://newsite.example.com/newpage.html">We moved! Find the content on our new site!</a>

そうすることで、ユーザーは新しいサイトを見つけやすくなり、Google は crypto リダイレクトとして認識できるようになります。

URL の代替バージョン

URL をリダイレクトすると、Google は、リダイレクト元(元の URL)とリダイレクト先(新しい URL)の両方を記録します。URL の 1 つが正規版 になります。どちらが使用されるかは、リダイレクトが一時的か永続的かなどを示すシグナルによって異なります。もう 1 つの URL は正規 URL の代替名になります。ユーザーのクエリから、古い URL がより信頼されていると解釈される場合、検索結果に代替名が表示されることがあります。

たとえば、サイトが新しいドメイン名に移転した場合、新しい URL がインデックスに登録されていても、Google は検索結果に引き続き古い URL を表示することがあります。これは正常な動作で、ユーザーが新しいドメイン名に慣れてくると、何もしなくとも代替ドメイン名が非表示になります。