サイトメンテナンス時には、HTTP 503エラーを使う

テクニカルなトピックになります。

サイトのメインテナンスなどで一時的にオフラインにしなければならなく、それが数時間に及びアクセス不能な状態が続くことは、訪問者にとってはもちろんのことサーチエンジンにとっても、好ましいことではありません。

サイトにアクセスできない状態が長く続くと、ランキングに悪影響がでることも考えられます。

訪問者には、「一時メンテナンス中。ご迷惑をおかけします。」とでも通知ページを作っておけば理解してもらえるでしょう。

でもサーチエンジンがこのページを見ても、「はい、分かりました。またあらためて訪問します。」とはなりません。

サーチエンジンには、サービスが一時的に過負荷やメンテナンスで使用不可能になっていることを表す「503: Service Unavailable」というHTTPステータスコードで示さなければなりません。

503を返すと、サーチエンジンのロボットはサイトが一時的にダウンしているだけで、しばらくすれば復旧すると認識してくれます。

サイトメンテナンス時は、ほったらかしにして404エラーを返すのではなく、503エラーを返すように準備しておきましょう。

では具体的にどうやって503エラーを返す設定をするかですが・・・、分かりません。(爆)

いえ、分からなくはないのですがスマートな方法が見つからないのです。

ErrorDocument 503 "Sorry. We're under maintenance."
RedirectMatch 503 .*

.htaccessにこう記述してけば、ロボットには503を返し、ユーザーには「Sorry. We’re under maintenance.」というメッセージを表示します。
ただ、自分でカスタマイズしたエラーページを表示できません。
また、日本語では文字コードを合わせないと文字化けします。
美しくないですね。

Redirect 503 /abc
ErrorDocument 503 /503.html

こうすると、abcディレクトリ配下のアクセスには503を返し、503.htmlを表示させることができます。
503.htmlは自分で自由に作れます。
一見よさそうなのですが、ルートディレクトリ(”/”直下)の中にあるページへのアクセスには適用されません。
abcの中だけです。

Redirect 503 /
ErrorDocument 503 /503.html

こうすると、サイト内のすべてのアクセスに503を返せますが、503.htmlを表示できなくなります。
ルートディレクトリに格納されている503.htmlにを表示しようとしたときにも、503エラーが返されてしまうからです。
503.htmlを別サイトに置けば回避できますが、気分的にイヤです。

RewriteCondを使って条件設定すればいいということで、こんな記述もできるようですが、試したところうまくいきませんでした。

RewriteEngine on
RewriteCond %{REQUEST_URI} !/503\.html$
RewriteRule ^(.*)$ /503.html [R=503,L]


RewriteEngine on
RewriteCond %{REQUEST_URI} !/503\.html$
RewriteRule ^(.*)$ /503.html [R=503,L]

mod_rewriteはやたらと使うものじゃないとか、mod_asisを使えばいいとか、そういうのも見つかりましたが、僕の手には負えません。

ITトレーナをやっていたのですが、UNIXやLINUXのApacheな人ではなく、WindowsのIISな人だったので、.htaccessは詳しくないのです。

どなたか、サイト全体で503ステータスコードを返し、かつサイト内にあるカスタマイズしたエラーページを表示させる、スマートで難しくない方法を教えてください。

【UPDATE】
503の設定についてはこちらのページが非常に役立ちます。
メンテナンス中画面を出す正しい作法と.htaccessの書き方 – Web担当者Forum