.htaccessなど、サーバー側でリダイレクトが利用できない場合どのように対処すれば良いですか?

URL変更時や、URLの正規化の際、.htaccessなどのサーバー側でリダイレクトが行えない場合の対処法について解説してます。

リダイレクトする理由

SEO対策をしていく上で、リダイレクト(転送)という言葉を聞いたことがあるかと思います。まずは実際にどういった場合にリダイレクトを行うかをおさらいしましょう。リダイレクトを行うのは例えば以下のような場合です。

  • WebサイトのURLを変更した場合
  • URLを正規化する場合

簡単にそれぞれについてリダイレクトを行う理由を解説します。

WebサイトのURLを変更した場合

URLの変更の例

ドメインを変更する場合や、同じドメインでディレクトリやファイルを変える場合など、URLが変わった場合のことです。この場合、以下のような理由でリダイレクトを行います。

  • 旧URLから、検索エンジンの評価を受け継ぐ
  • 旧URLの被リンクを引き継ぐ
  • 旧URLにアクセスしたユーザーやクローラーが正しいURLにアクセスできるようにする
正規化の場合

URLを正規化する例
例えばwwwの有無や、index.html・index.php等の有無のURLが存在する場合です。検索エンジンは、WebサイトをURL単位で評価するため、wwwの有無など複数のURLが存在していると、正しい評価が得られない可能性があります。そこで、その分散したURLを1つにすることを正規化と呼びます。この正規化にリダイレクトが用いられるわけです。

どちらの場合も「恒久的な移転」を表す301リダイレクトを使用することが重要です。リダイレクトには、もう一つ302リダイレクトというものがありますが、これは「一時的な移転」を意味するため、検索エンジンが度々、古いWebサイトに訪れるます。そのため、新しいWebサイトが評価されにくい状態になります。

リダイレクトを有効にする方法

通常、リダイレクトは、Webサーバーの設定で行います。Apacheの場合、.htaccessというファイルを、nginxの場合は、nginx.confというファイルを利用して設定します。なお、IISの場合は、ウィザードに従えば設定が行うことが可能です。

.htaccessの例

http://www.hoge.com/のURLで、www有り、index.htmlなしに正規化する例です。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^hoge\.com
RewriteRule (.*) http://www.hoge.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://www.hoge.com/$1 [R=301,L]

Apacheでは、この.htaccessが利用できなくなっている場合や、また、.htaccessは利用できるのものの、リダイレクトが利用できなくなっている場合があります。その場合は、Apacheの設定ファイルhttpd.confの設定を変えることで、.htaccessが使用できるようになります。

このhttpd.confというファイルのAllowOverrideという項目をAllにします。

AllowOverride All

また、RewriteEngineを利用するには、mod_rewriteというモジュールを有効化する必要があります。同じhttpd.confの

LoadModule rewrite_module modules/mod_rewrite.so

という行が#でコメントアウトされていないかご確認ください。

なお、httpd.confの設定を変えた場合、Apacheを再起動する必要があるので注意です。

これらの設定は、サーバーのroot権限がないと、設定出来ません。専有サーバーやVPS等の一部を除き、共用サーバーをご利用の場合は、設定ができない場合が多いので、サーバーの管理者などに確認されることをおすすめします。

リダイレクトが使用できないときには

リダイレクトは、.htaccess等サーバー側の設定で行うことが理想ですが、サーバーの仕様やCMSの仕様などで、リダイレクトが使用できない場合があると思います。その代替案をいくつか紹介したいと思います。

rel=”canonical”

rel=”canonical”とは、類似したコンテンツを持つ複数のURLの中から、検索エンジンに優先させるページを伝えるためのものです。このcanonicalで、リダイレクト先のURLを指定します。こうすることで、Googleに対し、「優先すべきURLはこっちですよ」と示すことができます。

rel=”canonical”の記述例

<link rel="canonical" href="http://www.hoge.com" />

ただし、rel=”canonical”は、あくまでも、Googleへの提案として扱われます。したがって、必ずしも、検索結果がcanonicalの設定通りになるわけではなので、注意が必要です。

PHP等プログラムによる対応

PHPなどのプログラムでも301リダイレクトを行うことが可能です。プログラムで指定しているため、個別に設定する必要がありますが、SEO上、サーバー側での設定と同じ結果が得られます。
PHPの場合の設定例

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.hoge.com");
exit();
?>

Ruby on Railsの場合の設定例

redirect_to “http://www.hoge.com”, :status => 301

meta refresh

metaタグのタグの1つで、meta refreshというものがあります。これを用いると、指定した秒数後に、指定したURLにリダイレクトされます。このmeta refreshを利用したリダイレクトは、通常302リダイレクトです。秒数が0のmeta refresh 0は、一応301リダイレクトとして扱われるという話は聞きますが、定かではありません。Googleは、meta refreshを推奨していませんので使用されない方がよいでしょう。

meta refreshの使用例

<meta http-equiv="refresh"content="0;URL=http://www.hoge.com">

JavaScriptによる設定

JavaScriptも、location.hrefやlocation.replaceといった関数を用いることで、リダイレクトを使用することが可能です。しかし、Googleは、JavaScriptを読み込むことができませんので、Googleに正しくリダイレクトが伝わる保証はありません。meta refresh同様に、使用されない方がよいでしょう。

まとめ

  • リダイレクトは、極力.htaccessなど、サーバーの設定で行うことが理想。
  • .htaccessは、無効になっている場合があるので注意。
  • リダイレクトが行えない場合は、rel=”canonical”を使用する。
  • PHP等のプログラムでもリダイレクトを使用することができる。
  • meta refreshやJavaScriptによるリダイレクトは推奨されない

Webサイトの運用でお困りではありませんか?

私たちが得意とするコンテンツマーケティングやSEOに限らず、Webの運営・改善に関する総合的な知見を持つ私たちなら、きっと御社の悩みを解決できると考えています。

サイト内検索

SEO・サイト運用・コンテンツマーケティングでお困りの際には ぜひお気軽にご相談ください

初級者から上級者まで幅広くコンテンツマーケティングの知識を学べるセミナーもございます

実務に役立つeBookが
無料でダウンロードできます

SEOやコンテンツマーケティングに
ご関心のある方はぜひご利用ください。

×