wordpressサイトの引越しでメッセージを表示してからリダイレクトさせるようにした

サイトの引越しでメッセージを表示させて数秒後に、新しいサイト構造に対応したリダイレクト設定の流れをまとめました。

htaccessですぐにリダイレクトさせる方法もあるんですが、サイト移行した旨のメッセージを見せた後、リダイレクトしたい場合もあるかと思うので、そういう時の役に立てば。

1. リダイレクト先をspreadsheetでまとめる

excelでもいいのですが、自分の場合はgoogle spreadsheetでまとめました。
サイト担当者に移行先をまとめてもらい確認とりましょう。

spreadsheetでは日本語URLにも対応すべく、下記の数式で日本語部分をエンコードして、スラッシュのエンコードを「/」に戻してます。

=SUBSTITUTE(ENCODEURL(A3),"%2F","/")

2. PHPの連想配列で使えるようにテキストエディターで加工

自分はsublime testというエディターを使ってやりました。

上記の画像のB,C列をテキストエディターにコピペしてPHPで使えるようにテキスト整形します。

テキストエディターにコピペした後、改行を「’,’」に、タブを「’=>’」に置換でいけます。

'/test/'=>'https://www.new-site.com/category/test/',
'/%E3%83%86%E3%82%B9%E3%83%88/'=>'https://www.new-site.com/category/test/',

3. リダイレクト用PHP redirect.phpを作成

redirect.phpのコードは下記のように書きました。

1、2の流れで作った連想配列でアクセスしたURIを`$_SERVER[“REQUEST_URI”]`で取得してリダイレクト先の指定があればそのURLに移行するようにして、リダイレクト設定がなければ、新サイトのトップページに移行するようにしています。

あと、SEOを考えてnoindexしたり、canonical設定を入れたりしてます。

<?php $redirect_lists = array(
'/test/'=>'https://www.new-site.com/category/test/',
'/%E3%83%86%E3%82%B9%E3%83%88/'=>'https://www.new-site.com/category/test/', ); $redirect_url = 'https://www.new-site.com/'; $request_uri = $_SERVER["REQUEST_URI"]; if($redirect_lists[$request_uri]!='') { $redirect_url=$redirect_lists[$request_uri]; }
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name='robots' content='noindex, follow'>
<link rel="canonical" href="<?=$redirect_url?>">
<title>サイトタイトル</title>
<script type="text/javascript">
// google analyticsのコードがあればリダイレクト確認用に入れとく
</script>
</head>
<body>
<p><a href="https://www.new-site.com/"><img src="xxx.png" alt="ロゴ"></a></p>
<p>〇〇サイトは「<a href="https://www.new-site.com/">△△サイト</a>」へ移行しました。<br>
5秒後に新サイトへリダイレクトされます。</p>
<p>自動的にリダイレクトされない場合は下記の移行先のページリンクをクリックしてください。</p>
<p><a href="<?=$redirect_url?>"><?=$redirect_url?></a></p>
<script>
var url = '<?=$redirect_url?>';
//5秒後にリダイレクト
window.setTimeout(redirect, 5000);
function redirect(){ location.href=url;
}
</script>
</body>
</html>

4. htaccessファイルを設定

下記のコード部分で、index.phpへの設定をコメントアウトして、redirect.phpにアクセスさせるようにしました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule . /index.php [L]
RewriteRule . /redirect.php [L]
</IfModule>

5. index.phpの名前を変更

.htaccessと同階層にあるindex.phpの名前を変更する。そうしないとドメイントップページのリダイレクトが聞かないため。index-backup.phpとかにファイル名を変更する。

まとめ

テストサイトで確認してから本番サイトに反映させましょう。
SEO評価を落とさない工夫を多少しつつ、ユーザーにいきなりリダイレクトで困惑させないようにするのは地味に大変なんですが、大事だと思います。