IT女子のお気に入りフォルダ

管理人の備忘録と実践を兼ねた(出来るだけ)役に立つ情報を配信するブログです。

Webサイトのメンテナンス中画面を表示する方法

Webサイトのメンテナンス中に、閲覧者にも検索エンジンにも適したメンテナンス中画面の表示方法のメモです。
(メンテナンス中画面とは「只今、メンテナンス中です」という画面のことです。)

おすすめできない方法(3つ)

1)全URLへのアクセスを302リダイレクトでメンテナンス中画面を表示する

ブラウザの表示をメンテナンス中画面にリダイレクトする方法です。
リダイレクトされるのでブラウザのURLが変わってしまい、リロードでメンテナンスが終わったかどうか確認することができません。
また、HTTPステータスコード200なので検索エンジンが一時的なリダイレクトだとは認識できず、通常のリダイレクトと判断され、メンテナンス中画面がインデックスされる可能性があります。

2)全URLへのアクセスをRewriteでメンテナンス中画面を表示する

ブラウザのURLはアクセスしようとしたURLのままで、メンテナンス中画面を表示する方法です。
URLは変わりませんが、やはりHTTPステータスコードは200。検索エンジンにメンテナンス中画面をその時点のコンテンツとしてインデックスされる可能性があります。

3)503でApacheの「Service Temporarily Unabailable」をそのまま表示する

そっけない英語のページが表示されます。
HTTPステータスコードは503なので検索エンジンは一時的な状態だと認識できますが、閲覧者はいつ復旧されるかもわからない、非常に不親切なページになってしまったと感じるでしょう。

メンテナンス中画面を表示するおすすめの方法

正しい手順は2つ。

1)メンテナンス中画面を用意する。

Webサーバーに/maintenance.htmlというファイルを作り、メンテナンス中期間がわかるよう記述をしたページを用意します。

2)htaccessに以下を追記します。

ErrorDocument 503 /maintenance.html

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !=/maintenance.html
  RewriteCond %{REMOTE_ADDR} !=192.0.2.0
  RewriteCond %{REMOTE_ADDR} !=198.51.100.0
  RewriteRule ^.*$ - [R=503,L]
</IfModule>

<IfModule mod_headers.c>
  Header set Retry-After "Mon, 10 Apr 2017 23:59:59 GMT"
</IfModule>

どのURLにアクセスされても、ブラウザに表示されるURLはそのままでメンテナンス中画面が表示されます。
HTTPステータスコードも503なので検索エンジンも一時的なものだと認識し、メンテナンス画面がインデックスされてしまう心配もありません。
また、6、7行目のようにIPアドレスを指定するとそのIPアドレスからのアクセスに対してはメンテナンス中画面を表示せずに通常ページを表示することが可能です。必要ない場合は行ごと記述をなくせばOK。
Retry-Afterフィールドは、”Sun, 10 Apr 2017 8:00:00 GMT”のようにメンテナンス終了時刻をGMTで指定します。

これで、閲覧者にも検索エンジンにも適したメンテナンス中画面を表示することができました。