管理しているサイトの 1 つを閉じたときのことです。
小さな情報サイトで、WordPress で作っていました。
サイトを閉じるときは、ただファイルを消すだけでは足りません。
バックアップ、ほかのサイトからのリンク、配っていたもの、検索エンジンへの伝え方まで、順に片付けます。
この記事では、実際に行った順に手順をまとめます。
閉じると決めた理由
サイトを続けるには、サーバー・ドメインの費用と、WordPress やプラグインの更新の手間がかかります。
運営しているサイトを見直す中で、コストを抑えるため、このサイトは閉じることにしました。
ほかのサイトには移さず、次の手順で片付けています。
手順の一覧
| 順 | やること | ねらい |
|---|---|---|
| 1 | ドメインの自動更新を止める | 次の更新の費用をかけない |
| 2 | ファイルと DB のバックアップを取り、手元に保存する | 消したあとでも戻せるようにする |
| 3 | 記事の中身を CSV に出す | WordPress がなくても中身を見られるようにする |
| 4 | ほかのサイトからのリンクを外す | 閉じたサイトへのリンクを残さない |
| 5 | 配っていたプラグインの利用を確かめる | 使っている人のサイトを困らせない |
| 6 | WordPress・DB・ファイルを消す | 閉鎖のページだけにする |
| 7 | .htaccess で、すべての URL に 410 を返す | 「もうない」ことをはっきり伝える |
| 8 | 外から確かめる | どの URL も閉鎖のページになっているかを見る |
消す前に、バックアップがあって開けることを必ず確かめました。
1. ドメインの自動更新を止める
まず、ドメインの管理画面で、このドメインの自動更新を止めました。
止めても、今の期限までは、ドメインは持ったままです。
そのあいだは、閉鎖のページを出し続けられます。
期限の前に、サーバー側のドメイン設定を外す予定です。
管理画面によっては、全体の設定と、ドメインごとの設定があります。
ドメインごとの設定が優先されるかどうかも、あわせて見ておきます。
2. ファイルと DB のバックアップを取る
サーバーに SSH で入り、ファイルを tar コマンドで 1 つにまとめました。
DB は mysqldump コマンドで出しました。
# ファイルをまとめる(公開のフォルダの上の階層で) tar -czf site-files-20261010.tar.gz example.com # DB を出す(DB 名・ユーザー・ホストはサーバーの管理画面で確かめる) mysqldump -h DBのホスト -u DBのユーザー -p --single-transaction --default-character-set=utf8mb4 DB名 | gzip > site-db-20261010.sql.gz
| 書き方 | 役目 |
|---|---|
tar -czf |
フォルダをまとめて、gzip で縮める |
mysqldump |
DB の表と中身を SQL の形で出す |
-p |
パスワードを、あとで聞かれて入れる(コマンドに書かない) |
--single-transaction |
出しているあいだに書き込みがあっても、同じ時点の中身で出す(InnoDB の表) |
--default-character-set=utf8mb4 |
日本語や絵文字が化けないようにする |
| gzip |
出した SQL を縮めて保存する |
バックアップは、置いただけで終わりにしません。
手元に保存したあと、ファイルのバックアップと DB のバックアップが、どちらも開けることを確かめました。
3. 記事の中身を CSV に出す
DB のバックアップは、MySQL に戻さないと中身を読めません。
そこで、記事のタイトル・カテゴリ・タグを、CSV にも出しました。
文字コードは UTF-8 で、先頭に BOM を付けています。
BOM を付けると、Excel でそのまま開いても日本語が化けません。
4. ほかのサイトからのリンクを外す
管理しているサイトには、運営しているサイトの一覧を出すフッターがあります。
この一覧は、別のサイトが作って配っています。
各サイトは、それを取ってきて 1 日保存し、保存したものを出しています。
そのため、配る側の一覧から外しても、すぐには各サイトに出なくなりません。
保存が切れる時間が過ぎてから、各サイトを外から開いて、一覧から消えていることを確かめました。
5. 配っていたプラグインの利用を確かめる
このサイトは、ほかのサイトにデータを出すウィジェットのプラグインを配っていました。
プラグインは、5 分ごとに、このサイトの配信の PHP(/request/get.php のような URL)へ、file_get_contents() でデータを取りに来る作りです。
サイトを閉じると、このプラグインを使っているサイトにも影響が出ます。
アクセスログで数える
閉じる前に、アクセスログの 1 日分を使って、配信の URL へのアクセスを IP ごとに数えました。
grep '/request/get.php' access_log | awk '{print $1}' | sort | uniq -c | sort -rn
| 書き方 | 役目 |
|---|---|
grep '/request/get.php' |
配信の URL へのアクセスの行だけを残す |
awk '{print $1}' |
行の 1 つ目(アクセス元の IP)だけを取り出す |
sort | uniq -c |
同じ IP をまとめて、回数を付ける |
sort -rn |
回数の多い順に並べる |
結果は、1 日で 41 回でした。
41 回すべてが、サーバー自身からのアクセスでした。
配った先のサイトからの利用は、ありませんでした。
待たせずに、すぐ終わらせる
利用がなくても、どこかにプラグインが残っているかもしれません。
そこで、閉じたあとの配信の URL は、「すぐ 410 を返す」形にしました。
サーバーが応答せず、タイムアウトまで待たせる形にはしません。
file_get_contents() は、答えが返るまで待ちます。
待たせると、取りに来たサイトのページの表示まで遅くなるためです。
すぐ 410 が返れば、取りに来た側は、ウィジェットの欄が出ないだけで済みます。
また、管理しているほかのサイトにも、このプラグインが無効のまま入っていました。
使っていないので、そのプラグインは削除しました。
6. WordPress・DB・ファイルを消す
バックアップがあることを確かめてから、消す作業に入りました。
サーバーはエックスサーバーです。
サーバーパネルの「WordPress 簡単インストール」から、このサイトの WordPress を削除しました。
ここで削除すると、WordPress のファイルと一緒に、DB と DB ユーザーも消えます。
そのあと、WordPress 以外に残っていたファイルも消しました。
最後に、公開のフォルダ(public_html)には、次の 2 つだけを置きました。
| ファイル | 役目 |
|---|---|
closed.html |
閉鎖したことを知らせるページ |
.htaccess |
すべての URL に 410 を返し、閉鎖のページを出す |
7. .htaccess で、すべての URL に 410 を返す
実際に置いた .htaccess です。
# サイトの閉鎖
# - すべての URL に 410(このページはなくなりました)を返し、閉鎖のページ(closed.html)を出す
# - ウィジェットが取りに来る配信の PHP も 410 ですぐに終わる(待たせない)
ErrorDocument 410 /closed.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^closed\.html$ - [L]
RewriteRule ^ - [G,L]
</IfModule>
| 書き方 | 役目 |
|---|---|
ErrorDocument 410 /closed.html |
410 を返すときに、中身として closed.html を出す |
<IfModule mod_rewrite.c> |
mod_rewrite が使えるときだけ、中の行を使う |
RewriteEngine On |
URL の書き換えの決まりを使う |
RewriteRule ^closed\.html$ - [L] |
closed.html は書き換えずに、そのまま出す(ここで終わり) |
RewriteRule ^ - [G,L] |
それ以外のすべての URL に、410(Gone)を返す |
2 行目の RewriteRule の G は、410 を返す指定です。
410 を返すとき、Apache は ErrorDocument で決めた closed.html を中から読みます。
closed.html は 1 行目の RewriteRule でそのまま通るので、閉鎖のページが出ます。
closed.html を直接開いたときは、ふつうのページとして 200 が返ります。
閉鎖のページ
closed.html は、外のファイルを読まない 1 枚の HTML にしました。
サイトの名前・ドメイン・運営者は、ここでは伏せています。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex">
<title>(サイトの名前)は閉鎖しました</title>
<style>
body { margin: 0; font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif; background: #f5f6f8; color: #333; }
main { max-width: 560px; margin: 80px auto; padding: 32px 24px; background: #fff; border-radius: 8px; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08); }
h1 { font-size: 1.3rem; margin: 0 0 16px; }
p { line-height: 1.8; margin: 0 0 12px; }
</style>
</head>
<body>
<main>
<h1>(サイトの名前)は閉鎖しました</h1>
<p>(ドメイン)は、2026 年 10 月に閉鎖しました。</p>
<p>これまでご覧いただき、ありがとうございました。</p>
<p>運営:(運営者の名前とリンク)</p>
</main>
</body>
</html>
| 書き方 | 役目 |
|---|---|
<meta name="robots" content="noindex"> |
閉鎖のページ自体を、検索結果に出さない |
<style> |
見た目をページの中に書く(ほかのファイルが消えていても崩れない) |
| 運営者のリンク | 来た人が、運営者のほかのサイトへ行けるようにする |
なぜ 404 ではなく 410 にしたか
Google 検索セントラルの説明では、429 を除く 4xx は同じように扱われます。
4xx を返す URL はインデックスに登録されず、すでに登録されている URL はインデックスから削除されます。
つまり、Google 検索では、404 でも 410 でも、インデックスから外れる点は同じです。
一方で、HTTP の決まりでは、410 は「このページはもうなく、それがずっと続く見込み」という意味です。
404 は「見つからない」だけで、一時的なのかどうかは伝えません。
サイトをまるごと閉じたので、意味がはっきりしている 410 を使いました。
インデックスから外れるまでの日数は、まだ確かめていません。
8. 外から確かめる
閉じたあと、外から URL を開いて、ステータスコードと中身を見ました。
| 開いた URL | ステータス | 中身 |
|---|---|---|
| トップ | 410 | 閉鎖のページ |
| 記事 | 410 | 閉鎖のページ |
プラグインを配っていた /plugin |
410 | 閉鎖のページ |
wp-login.php |
410 | 閉鎖のページ |
| 配信の PHP | 410 | 閉鎖のページ |
robots.txt |
410 | 閉鎖のページ |
feed |
410 | 閉鎖のページ |
| www 付きのトップ | 410 | 閉鎖のページ |
| http(https でない)のトップ | 410 | 閉鎖のページ |
closed.html |
200 | 閉鎖のページ |
410 の応答は、どれも 0.03〜0.05 秒で返りました。
配信の PHP も、待たされずにすぐ終わります。
このあと残っていること
- ドメインの期限の前に、サーバーのドメイン設定を外す
- メールアカウントや SSL の設定が残っていれば、そのときに外す
まとめ
- 消す前に、ファイル(tar)と DB(mysqldump)のバックアップを取り、開けることを確かめる
- 記事の中身は CSV(UTF-8・BOM 付き)にも出しておくと、WordPress がなくても読める
- ほかのサイトが保存して出しているリンクは、保存が切れてから外から確かめる
- ほかのサイトから取りに来られる URL は、待たせずにすぐ 410 を返す。アクセスログで、だれが取りに来ているかを先に数える
- .htaccess の
RewriteRule ^ - [G,L]とErrorDocument 410で、すべての URL に 410 と閉鎖のページを返せる - Google 検索では 404 も 410 もインデックスから外れる。410 は「もうない」ことをはっきり伝える


