これは目からウロコ。よくやるのが200 OKのまま文面は「ただいまメンテナンスを行っております。しばらくしてから再度ごアクセスください。」って出している。auのEZwebだとApacheエラーは画面表示させてくれないのでユーザビリティ上しかたないとか(得に404に関してはレギュレーションで指定されているし)あるのでつい200 OKのままなんですよね。それだと検索エンジンのクロールでキャッシュされてしまう危険を伴う。403/404出していると次回からクロール来なくなる可能性があるし500は論外。でも下記URLの記事によれば503の場合は検索エンジンも次回のクロールの機会が来るまで待ってくれるみたいなので大丈夫だそうです。
サイトメンテナンス時には、HTTP 503エラーを使う » 海外SEO情報ブログ・メルマガ
http://www.suzukikenichi.com/blog/using-503-error-at-site-maintenance/
元記事ではドキュメントルートからメンテする場合の設定で困っているそうですが、とりあえず動作した設定をここで公開しておきます。
Alias /maintenance/ “/home/www/maintenance/”
ErrorDocument 503 /maintenance/503.html
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/maintenance/503.html$
RewriteRule ^.*$ – [R=503,L]
<Directory “/home/www/maintenance/”>
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ドキュメントルート以下にメンテ用ファイルを置きたくなかったのでAliasにしましたが、R=503としたのでRewriteRule の飛び先はこの場合何書いても同じだったので – にしました。あと必ず ErrorDocument 503 を定義しておくことです。
他には外部サーバや内部でバーチャルホストを作ってそこにスクリプトを置き、リバースプロキシで転送という方法も思いつきましたがリソースの無駄遣いなので伏せておきます。(本当の理由は自宅サーバにProxy入れて無かった・・・)