2026年5月20日
2026年5月20日
WordPressで削除した記事の404の扱い方(301転送・410・Redirection)
WordPressで投稿や固定ページを削除すると、そのURLにアクセスした人には「ページが見つかりません」(HTTPステータス404)が表示されます。404そのものはエラーではなく、「そのページは無い」という正しい応答です。ただ、検索結果や他サイトのリンク、ブックマークから来た人が行き止まりになるので、削除したURLごとに扱いを決めておきます。
削除したページはどう扱われるか
ゴミ箱に入れた時点で404になる
投稿を「ゴミ箱へ移動」すると、その時点で公開ページは404になります。ゴミ箱の投稿は、既定では30日後に自動で削除されます。それまでは「投稿」→「ゴミ箱」から復元でき、復元すると元のURLに戻ります。誤って削除した場合の戻し方はWordPressでゴミ箱から記事を復元する方法を参照してください。
ゴミ箱に残す日数は、wp-config.php の定数で変えられます。
define( 'EMPTY_TRASH_DAYS', 60 );
似たURLへ自動で転送されることがある
WordPressには、404になるURLを受け取ったとき、スラッグの先頭が一致する公開中の投稿を探して転送する機能があります(redirect_guess_404_permalink())。たとえば /sample-post/ を削除しても /sample-post-2/ が残っていれば、そちらへ転送されることがあります。
意図しないページへ転送されるのを止めたい場合は、WordPress 5.5で追加されたフィルターで無効にできます。子テーマの functions.php などに書きます。
<?php
// 404 のときに似たスラッグの投稿を推測して転送する機能を止める
add_filter( 'do_redirect_guess_404_permalink', '__return_false' );
すべて止めるのではなく、スラッグが一致する場合だけ転送させるなら、strict_redirect_guess_404_permalink フィルターで true を返します。
なお、投稿のスラッグを変えただけの場合は、WordPressが古いスラッグを記録して新しいURLへ転送します。こちらは削除とは別の仕組みです。詳しくはスラッグ変更後の転送を確かめる方法を参照してください。
URLごとに扱いを決める
削除したURLは、代わりのページがあるかどうかで扱いを分けます。
| 状況 | 返すステータス | 例 |
|---|---|---|
| 内容を引き継いだページがある | 301(恒久的な転送) | 古い記事を新しい記事にまとめた |
| 代わりのページが無く、今後も公開しない | 410(削除済み) | 終了したキャンペーンのページ |
| 判断がつかない、一時的に非公開にした | 404のまま | 内容を見直して再公開する予定 |
- 転送先は、削除したページとほぼ同じ内容を扱うページにします。関係のないトップページへまとめて転送すると、利用者は探していた情報に行き着けません。
- Googleの説明(2026年10月時点のGoogle検索セントラル)では、429を除く4xxのステータスはどれも同じように扱われ、404でも410でも、以前にインデックスされていたURLは検索結果から外されます。410は「意図して削除した」ことを管理する側で区別するためのものと考えて使い分けます。
方法1: Redirectionプラグインで設定する
管理画面だけで転送や410を設定するなら、無料の Redirection プラグインが使えます。有効化すると「ツール」→「Redirection」に設定画面が追加され、初回は初期設定の案内が表示されます。404のログを記録する設定を有効にしておくと、どのURLに404が出ているかを後から確認できます。
301で転送する
- 「ツール」→「Redirection」を開く
- 新しい転送の追加欄で、「Source URL」に削除したページのパス(例:
/old-post/)、「Target URL」に転送先のURLを入れる - 追加して保存する
410を返す
- 新しい転送を追加し、「Source URL」に削除したページのパスを入れる
- 詳細設定を開き、「When matched」で「Error (404)」を選ぶ
- HTTPコードで「410」(page gone)を選んで保存する
まとめて登録する
転送が多い場合は、「Import/Export」からCSVで取り込めます。1行に「元のURL,転送先のURL」をカンマ区切りで書きます。3列目に正規表現かどうか(0 または 1)、4列目にHTTPコードを書けます。
/old-post/,/new-post/
/2024/old-campaign/,/campaign/,0,301
CSVで取り込めるHTTPコードは転送用(301〜307)だけです。410のようなエラーのコードは、画面から1件ずつ設定するか、次のサーバー設定で書きます。
Redirectionの設定画面の詳しい使い方はRedirectionプラグインの使い方を参照してください。
方法2: .htaccess(Apache)で設定する
Apacheのサーバーでは、ドキュメントルートの .htaccess に書けます。WordPressの記述(# BEGIN WordPress から # END WordPress)の外、その上に書きます。この範囲の中に書くと、パーマリンク設定の保存時に消えることがあります。
# 内容を引き継いだページへ 301 で転送する
RedirectMatch 301 ^/old-post/?$ https://example.com/new-post/
# 削除済みとして 410 を返す
RedirectMatch gone ^/old-campaign/?$
RedirectMatch は正規表現でURLを照合するので、^ と $ で範囲を区切ると、/old-post/ で始まる別のURLまで転送してしまうことを防げます。.htaccess を編集する前に、元のファイルを控えておきます。
方法3: Nginxで設定する
Nginxでは、server ブロックに location =(完全一致)で書きます。
location = /old-post/ {
return 301 https://example.com/new-post/;
}
location = /old-campaign/ {
return 410;
}
設定を確かめてから読み込み直します。
sudo nginx -t
sudo systemctl reload nginx
設定を確かめる
curlでステータスコードと転送先を確かめます。
curl -I https://example.com/old-post/
# HTTP/2 301
# location: https://example.com/new-post/
curl -I https://example.com/old-campaign/
# HTTP/2 410
転送が2回以上続いていないか、転送先が200を返すかも確認します。キャッシュ系プラグインやCDNを使っている場合は、キャッシュを削除してから確かめます。
削除したページへのリンクを直す
サイト内に削除したページへのリンクが残っていると、転送や404を経由することになります。WP-CLIが使える場合は、データベースからURLを探せます。
wp db search 'example.com/old-post/' --all-tables
見つかった投稿のリンクは、転送先のURLに書き換えます。外部サイトからのリンクは、Search Consoleの「リンク」レポートで、どのページへのリンクが多いかを確かめられます。
Search Consoleでの扱い
削除したURLは、Googleが再びクロールしたときに404・410を確認して検索結果から外します。すぐに検索結果から隠したい場合は、Search Consoleの「削除」ツールで一時的に非表示にできますが、効果は約6か月で、ページそのものを404・410にしておく必要があります。
Search Consoleの「ページ」レポートには、削除したURLが「見つかりませんでした(404)」として表示されます。意図して削除したページであれば、対応は不要です。
まとめ
削除したページのURLは、内容を引き継いだページがあれば301で転送し、無ければ410か404で「無い」と返します。Redirectionプラグインなら管理画面から設定でき、転送はCSVでまとめて登録できます。サーバーの設定で書く場合は、Apacheでは RedirectMatch、Nginxでは location = と return を使います。設定後はcurlでステータスコードを確かめ、サイト内に残ったリンクも書き換えておきます。