SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CodeZineニュース

[PHPプロ!] 重複するURLを防ぐことでSEO効果を上げるTips

  • このエントリーをはてなブックマークに追加

  • このエントリーをはてなブックマークに追加

onPHP5.comで、非常に見落としやすいSEOのTipsが掲載されています。http://www.example.com/ というサイトに http://example.com/ でも繋がるようであれば、これは重複するURLであるといえます。このような重複するURLがあると、同じページへのリクエストが複数に分散されてしまうためSEO的に不利になるということです。この記事ではこれらをmod_rewriteとPHPスクリプトを用いて防ぐ方法が紹介されています。

 onPHP5.comで、非常に見落としやすいSEOのTipsが掲載されています。これは、重複するURLを無くすことに重点が置かれたSEO対策です。

 たとえば、http://www.example.com/ というサイトに http://example.com/ でも繋がるようであれば、これは重複するURLであるといえます。このようなURLが存在すると、同じページへのリクエストが複数のURLに分散されてしまうためSEO的に不利になるということです。

 この記事ではこのような重複URLを、mod_rewriteとPHPスクリプトを用いて防ぐ方法が紹介されています。記事で取り上げられているのは、どちらを入力しても同じページが開く以下のような3つのケースです。

  1. ドメイン名の違いによる重複
  2. (http://www.example.com/ と http://example.com/ )
  3. 「/index.php」 と 「/」
  4. (http://www.example.com/ と http://www.example.com/index.php)
  5. 異なるGET値による同一ページの指定
  6. (http://www.example.com/ と http://www.example.com/?dummy=v)

 これらについて、それぞれの対策を紹介します。

ドメイン名の違いによる重複

 これは http://example.com/ と入力しても http://www.example.com/ に繋がるような場合です。次の2つのうちのどちらかでこれを回避することができます。

  • .htaccessが編集できる場合
  • 下記のリライトルールを.htaccessに記述します。
    RewriteEngine on
    RewriteCond %{http_host} ^example.com[NC]
    RewriteRule (.*) http://www.example.com/$1 [L,R=301]
    
  • .htaccessが編集できない場合
  • 下記のようなPHPスクリプトを、全てのページで実行されるようなスクリプトに仕込みます。
    <?php
    if(strtolower($_SERVER['HTTP_HOST']) == 'example.com'){
      header("HTTP/1.1 301 Moved Permanently");
      header("Location: http://www.example.com$_SERVER[REQUEST_URI]");
      exit;
    }
    

 これで http://example.com/ を指定しても、http://www.example.com/にリダイレクトさせることができます。ここで重要なのは、http: //example.com/に接続した際に HTTP/1.1 301 Moved Permanentlyステータスコードを出し、それが外部リダイレクトであることを知らせることです。

「/index.php」 と 「/」

 http://www.example.com/ と http://www.example.com/index.php など、どちらを指定しても同じページが表示される場合です。これも同様にmod_rewriteかPHPスクリプトで対応することができます。

  • .htaccessが編集できる場合
  • RewriteCond %{request_uri} ^/$ 
    RewriteCond %{request_method} GET [NC] 
    RewriteRule ^/$ /index.php [L,R=301] 
    
  • .htaccessが編集できない場合
  • <?php
    if($_SERVER['REQUEST_URI'] == '/' && $_SERVER['REQUEST_METHOD'] == 'GET'){
      header("HTTP/1.1 301 Moved Permanently");
      header("Location: http://www.example.com/index.php");
      exit;
    }?>
    

 これでディレクトリを直接指定しても、index.phpに飛ばすことができます。

異なるGET値による同一ページの指定

 これはほとんどのページで起こり得るものです。たとえば、http://www.example.com/?dummy=v など、ページ内のコンテンツには影響しないGET値があっても、大抵のページではそれを無視してページを表示しまうことから発生します。

 ページャー機能が実装されているページにおいて、存在しないページ番号を指定してもエラーを出さず他のページを表示させてしまうような場合や、/list.php だけで /list.php?page=1 のページを開いてしまう場合も含まれます。

 次のようなスクリプトで、有効なURLの配列を$linksに生成することができるので、この配列に含まれないURLがリクエストされたらエラーページにリダイレクトさせるようにしましょう。

<?php
for($i = 1; $i <= $numPages; $i++){
  $links[$i] = preg_replace('~(\?|&)page=\d+~',
    '$1page=' . $i, $_SERVER['REQUEST_URI']); 
}
?>

 onPHP5.comでは、このような重複コンテンツの可能性を防ぐためには以下の点に注意することが必要と言っています。

  • サイト内のURLはリライト済みのURLのみを使用する。
  • 無効なURLは全て404ページに飛ばしてしまうくらいリライトルールは厳重にする。
  • サイト内に使用するURLは、それを有効なURLに書き換える関数に全て通す。

 SEOランキングが上がらずお困りの方は参考にしてみてはいかがでしょうか。(PHPプロ!

関連リンク

関連ニュース

転載元

 PHPプロ!:最新のPHPニュース

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
この記事の著者

PHPプロ!(PHPプロ!)

PHPプロ!」は、アシアル株式会社が運営するPHP開発者のためのポータル&コミュニティサイトです。同サイトでは、PHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座、PHP中級者のためのTIPSメーリングリスト、中・上級者向けの技術ノウハウ満載のPHPプロ!マガジンの提供など、PHP開発...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1096 2007/03/08 14:23

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング