Tuesday, June 19, 2012

Webサイトのメンテナンス時の注意点

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 と併用してクロール対象外であることを伝えるようにします。