WordPressでブログを長年運用していると、「wp-content/uploads フォルダに画像がありすぎて管理できない」「サーバーのファイル数が多すぎる」という問題に直面することがあります。
特に、WordPress設定の「アップロードしたファイルを年月ベースのフォルダに整理する」のチェックが外れていた場合、uploads/ 直下に大量の画像ファイルが散乱してしまいます。
「じゃあ物理的に新しいフォルダを作って移動させればいいや!」と安易にファイルを移動してしまうと、過去の全記事で画像が表示されなくなる(404 Not Found リンク切れ)という大惨事になります。
この記事では、過去記事の画像リンク切れを起こさずに、uploads直下の画像を安全にフォルダ整理・転送し、不要な自動生成画像を削減する手順を分かりやすく解説します。

なぜ「単にファイルを移動する」とリンク切れになるのか?
WordPressで投稿した記事の本文(データベース)には、以下のように画像の絶対パスURLが直接記録されています。
<img src="https://eguchi.net/wp-content/uploads/archive/sample.jpg" alt="サンプル画像" />
そのため、ファイルマネージャーやFTPで uploads/sample.jpg を uploads/images/sample.jpg に移動してしまうと、記事内のリンク先と実体ファイルの場所がズレてしまい、画像が表示されなくなってしまいます。
安全に整理するためには、「ファイルの移動」+「転送設定(エイリアス・リダイレクト)」+「データベースURLの置換」をセットで行う必要があります。
作業前の最重要注意事項:必ずバックアップを取る
画像ファイルの移動やデータベースの書き換えを行います。作業前には必ずサイト全体のバックアップを取得してください。
- データベースのバックアップ(プラグイン「UpdraftPlus」などがおすすめ)
wp-content/uploadsフォルダのバックアップ(FTPやファイルマネージャーでローカルに保存)
【手順1】今後の大量生成を防ぐ&不要サムネイルの削除
WordPressは1枚の画像をアップロードすると、自動的に「300×200」「768×500」などのリサイズ画像(サムネイル)を複数生成します。まずはこれを整理しましょう。
① 設定で自動生成をストップする
- WordPress管理画面の 「設定」>「メディア」 に移動します。
- 「アップロードしたファイルを年月ベースのフォルダに整理する」にチェックを入れます(今後のために必須!)。
- 使っていない画像サイズ(中サイズ・大サイズ等)の幅・高さを 「0」 に変更して保存します。
② プラグインで不要な旧サムネイルを一括削除
プラグイン 「Regenerate Thumbnails」 を導入すると、現在テーマや記事で使われていない不要なサイズ画像を一括削除できます。
【手順2】直下画像を専用フォルダ(archive)へ移動する
uploads/ 直下に散乱しているファイルを専用フォルダへ移動してスッキリさせます。
- WP File Manager や FTP を開き、
wp-content/uploads/内にarchive(またはold-imagesなど)という新しいフォルダを作成します。 uploads/直下にある画像ファイル・サムネイルファイルをすべてarchive/フォルダへ移動します。
※「2021」「2022」「2023」などの既存の年月フォルダは移動せずそのまま残してください。
【手順3】.htaccess に転送ルールを追加(リンク切れ防止エイリアス)
物理ファイルを移動しただけでは旧URL(uploads/sample.jpg)へのアクセスがエラーになります。Webサーバーの転送ルール(RewriteRule)を使って、旧URLへのアクセスを自動的に uploads/archive/sample.jpg へ転送(エイリアス)させます。

WordPressルートディレクトリ(または wp-content/uploads/ 直下)の .htaccess に以下を追記します。
# uploads直下の旧画像アクセスを archive/ フォルダへ自動転送
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp-content/uploads/
# 実在しない直下画像へのリクエストを archive/ フォルダへリライト
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+\.(jpg|jpeg|png|gif|webp))$ archive/$1 [L,R=301]
</IfModule>
この設定を入れておくと、万が一旧URLへのアクセスが来ても自動的に新しい archive/ フォルダ内の画像が表示されるため、リンク切れを確実に防ぐことができます。
【手順4】データベース内の画像URLを一括置換(Better Search Replace)
転送設定ができたら、記事本文(データベース)に書かれている画像URLも新しいフォルダのパスに書き換えましょう。
- プラグイン 「Better Search Replace」 をインストールして有効化します。
- 「ツール」>「Better Search Replace」 に移動します。
- 以下のように入力します:
- 検索 (Search for):
https://eguchi.net/wp-content/uploads/archive/ - 置換 (Replace with):
https://eguchi.net/wp-content/uploads/archive/archive/ - 対象テーブル:
wp_posts,wp_postmetaを選択
- 検索 (Search for):
- まずは「Run dry-run(テスト実行)」で変更対象件数を確認し、問題なければ「Run Search/Replace」を実行します。
【手順5】使われていない孤立画像のクリーンアップ(Media Cleaner)
過去に削除した記事の画像や、メディアライブラリにアップロードしたもののどこにも使われていない「不要な画像」がまだ残っている可能性があります。
- プラグイン 「Media Cleaner」 を導入します。
- サイト内(記事、固定ページ、アイキャッチ等)で参照されていない画像を自動スキャン。
- 検出された不要画像を一括でゴミ箱へ移動・削除します。
まとめ
WordPressの uploads フォルダ直下に画像が溢れてしまった場合も、焦って直移動するのではなく、以下のステップを踏むことで安全に整理できます。
- 事前バックアップの実施
- メディア設定で「年月ベースのフォルダに整理」をONにし、不要サイズ幅を0にする
- 直下画像を専用フォルダ(
archive/)へ移動 .htaccessに転送ルールを記述しエイリアス化Better Search ReplaceでデータベースのURLを一括置換
設定を見直して綺麗に整理し、サーバー容量とファイル数をすっきり軽量化させましょう!
