Webサイトをメンテナンス状態とする場合、単にページ内容を変更したり、メンテナンスページへリダイレクトする方法ではSEO対策として問題があります。検索エンジンのクローラにとっては、メンテナンス状態であるかの判断はできないため、通常のページ更新があったものとみなされてメンテナンスページが収集されてしまうことになります。
HTTPステータスコードを 503 Service Temporarily Unavailable
で応答することで、クローラに通常のページ応答ではないことを伝えることができます。
以下は、Apache httpd + mod_rewrite + PHPを使って、503 エラーで応答する例です。
.htaccess
# /maintenance/ ディレクトリ以外のURLの場合は /maintenance/index.php にリライト RewriteEngine on RewriteCond %{REQUEST_URI} !^/maintenance/ RewriteRule ^.*$ /maintenance/index.php [L]
/maintenance/index.php
<php header('HTTP/1.1 503 Service Temporarily Unavailable'); include '/path/to/maintenance.html';
/maintenance/ ディレクトリ内であればリライトされませんので、メンテナンスページで用いる画像/CSSファイルはこのディレクトリ内に置くようにします。
Apache2.2系であれば、mod_rewrite だけで 503 のレスポンスコード指定ができます。
# 503 エラー用の maintenance.html を用意します。 ErrorDocument 503 /maintenance/index.html RewriteEngine on RewriteCond %{REQUEST_URI} !^/maintenance/ RewriteRule ^.*$ - [R=503,L]
この場合 /maintenance/index.html 自身へのリクエストは 503 となりません。/maintenance/index.html へのリンク/サイトマップが存在すればクロールされる可能性はあります。meta タグや robot.txt と併用してクロール対象外であることを伝えるようにします。