独自CMSからWordPress移行で詰んだ話。

執筆・編集 板浪 雅樹2005年から WEB 業界一筋。500サイト超を手がける SEO・WordPress のエキスパート。「公開後こそ本番」を掲げ、データ分析とユーザー視点で成果を引き出す運用を提案。

2005年に制作会社へ入社後、プログラマーからキャリアをスタート。サーバー構築・データベース設計で培った技術を強みに、WordPress テーマ/プラグイン開発やサイト移行の難案件を多数担当してきました。
2010年以降は SEO エンジニアとしても活動領域を拡大。コンテンツ設計・内部リンク最適化・高速化チューニングにより、競合の激しいビッグキーワードで上位獲得を実現してきました。
現在は TREVO のウェブディレクターとして、要件定義から運用改善まで一気通貫でリード。AI ライティングや GA4/Looker Studio を活用したレポーティング手法を開発し、「数字で説明できるサイト運用」をポリシーにクライアントの ROI 最大化を支援しています。
趣味/強み:筋トレとランニングで日々の集中力をキープ。複雑な課題を“仕組み”で解決するのが得意。
モットー:「サイトは資産。改善を止めた瞬間から価値は目減りする」
SNS:x(旧 Twitter)@TREVO_WEB
CMS移行の作業でよくあるのが、「記事本文は移行できたのに、画像やPDFなどのファイルが旧サーバーを参照したまま」という問題です。
今回もまさにその状態で、独自CMSからWordPressへの移行作業を進める中で、記事は表示できるが、ファイル周りがまったく整理できていないという状況に直面しました。
旧サイトはWordPressではなく独自CMSを使用しており、さらにFTPサーバーへもログインできない状態でした。そのため、ブログ記事はコピー&ペーストでWordPressへ移行したものの、記事内の画像やPDFは旧サーバーのURLをそのまま参照しており、
「このまま旧サーバーを停止すると、ファイルがすべて表示されなくなる」
という、公開前としては致命的な状態でした。
どの記事が、どのファイルを使っているのかも把握できず、手作業での修正は現実的ではありません。
そこで考えたのが、外部ファイルを一覧で管理し、新しいサーバー(できればWordPressのメディア)へ取り込み、リンクを安全に置き換える仕組みを作ることでした。
こうして自作したのが、今回ご紹介するプラグイン 「trevo-file-download」 です。
株式会社TREVOでは、WordPressでのサイト構築やリニューアル、運用改善はもちろん、今回のように既存環境や制約に合わせて独自プラグインを作成し、実務に耐える運用を支援することも行っています。
「既存CMSからWordPressへ移行したいが、データや運用面に不安がある」という場合でも、状況に応じた柔軟な対応が可能です。
WordPressを中心としたサイト制作・運用については、
TREVOのホームページ制作サービスもぜひご覧ください。
なぜ直リンクではなく「リンク経路を制御」する必要があったのか

独自CMS × FTP不可 × WordPress移行という現実
今回のサイト移行では、旧サイトがWordPressではなく、独自CMSで構築されているという点が大きな課題でした。
さらに、サーバー環境の制約によりFTPにもログインできず、ファイル構成や保存場所を直接確認・操作することができない状態でした。
そのため、移行作業はデータベースやメディアファイルをまとめて移すような方法が取れず、ブログ記事については表示されている内容を一つひとつコピー&ペーストしてWordPressへ貼り付けるという方法を選択しました。
記事本文そのものはこの方法で問題なく移行できましたが、ここで別の問題が浮き彫りになります。
記事内で使用されている画像やPDFなどのファイルは、旧CMS側のサーバーに置かれたままであり、リンク先もすべて旧サーバーのURLを参照していました。
FTPにアクセスできないため、どこにファイルが保存されているのか、どの記事がどのファイルを使っているのかを把握する手段がなく、ファイル単位での移行も非常に困難な状況でした。
このまま旧サーバーを停止すれば、記事は表示されているのに画像や資料だけが表示されない、いわゆるリンク切れの状態になります。
単純にURLを書き換えるだけでは対応できず、「ファイルの所在を管理しながら、安全にリンクを置き換える仕組み」が必要だと強く感じたのが、このプラグイン開発のきっかけでした。
コピー後に発覚した「外部ファイル参照問題」
記事本文をコピー&ペーストしてWordPressへ移行した直後は、見た目上は問題なく表示されていました。しかし、実際にHTMLを確認してみると、画像やPDFなどのリンク先がすべて旧サーバーのURLを参照していることが分かりました。
つまり、記事そのものは新しいWordPress上に存在しているものの、表示に必要なファイルは旧CMSのサーバーに依存している状態です。この状態では、旧サーバーを停止した瞬間に、画像が表示されなくなり、PDFリンクもすべて無効になります。
さらに厄介だったのは、
- どの記事が
- どの外部ファイルを
- どれだけ参照しているのか
を一覧で把握できる手段がなかったことです。
記事数が多い場合、1ページずつ目視で確認し、リンクを探して対応するのは現実的ではありません。リンク切れに気づかないまま公開してしまうリスクも高く、「後から気づいて修正する」では済まされない問題でした。
この時点で、単なるURLの書き換えや、場当たり的な修正では対応できないと判断しました。
WordPressメディアで一元管理したいと考えた理由
こうした状況を整理する中で行き着いた結論が、外部ファイルをすべて新しいサーバーへ移設し、WordPressのメディアで一元管理するという方針でした。
WordPressのメディアに取り込むことができれば、
- ファイルの保存場所が明確になる
- 記事との紐づけが管理しやすくなる
- 将来的なサーバー移転やURL変更にも対応しやすくなる
といったメリットがあります。
特に運用面では、「どのファイルが使われているのか分からない」という状態を避けられることが大きな安心材料になります。
ただし、問題はその作業をどうやって行うかでした。
FTPに入れない以上、手動でファイルを集めることはできません。記事数も多く、リンクを一つずつ探してダウンロードし、アップロードし直す作業は現実的ではありませんでした。
そこで、
- 記事内の外部ファイルURLを自動で抽出し
- 一覧で確認できるようにし
- 新しいサーバーへ取り込み
- WordPress側のURLへ安全に置き換える
という一連の流れをまとめて行える仕組みとして、プラグインという形で解決することを選びました。
これが、「trevo-file-download」を作ることになった直接的な理由です。
最初に作ったのは「ダウンロード機能」ではなかった
「trevo-file-download」という名前から、ファイルを配布・ダウンロードするためのプラグインと思われがちですが、実は最初に作った機能はダウンロードそのものではありません。
当時の最大の課題は、「どうダウンロードするか」以前に、
「何を移行しなければならないのかが分からない」
という点にありました。
まず必要だったのは「外部ファイルの洗い出し」
WordPressへ記事を移行した段階では、
- どの記事に
- どの画像やPDFが
- どのURLで使われているのか
が把握できない状態でした。
この状況でいきなりファイルの取り込みや置換を行うのは危険で、まずは全体像を可視化することが必要だと考えました。
そこで初期段階で実装したのが、投稿コンテンツ内に含まれる外部ファイルURLを抽出し、一覧として表示する機能です。
対象となる投稿を解析し、画像やPDFなどの外部リンクを洗い出すことで、「どれくらいの作業量があるのか」「どこから手を付けるべきか」が初めて見えるようになりました。
初期段階で実装した機能
初期版では、作業効率を最優先に考え、必要最低限の機能に絞って実装しました。
主な機能は次の通りです。
- 投稿コンテンツ内の外部ファイルURLを一覧表示
- 対象となる投稿名の表示(編集画面へのリンク付き)
- チェックボックスによる複数選択
- 選択した投稿に対する一括操作
- ファイルの取り込み
- リンクの置換
- リンク更新処理
この段階では、
「取り込みが成功したかどうか」
「置換が正しく行われたかどうか」
といった状態の分かりやすさまでは重視していませんでした。
まずは、
実際の移行作業を止めずに進められること
手作業では不可能な量を処理できること
を優先し、「とにかく使える状態」にすることを目標にしていました。
結果として、記事内の外部ファイルを効率よく洗い出し、移行作業を前に進めることはできましたが、実際に使い始めると新たな課題が見えてきます。
次の章では、
「取り込みが成功したのか分からない」「同じファイルを何度も取り込めてしまう」
という、運用上の問題とその改修について書いていきます。
改修フェーズ①:取り込み成功・失敗が分からない問題

初期版の機能で、外部ファイルの洗い出しと取り込み作業自体は進められるようになりました。しかし、実際に運用してみると、作業者として不安になるポイントがすぐに見えてきました。
取り込み結果が分からないという不安
初期段階では、「取り込み」ボタンをクリックすればファイルの取得処理が走るだけで、
- 本当に取り込みが成功したのか
- 途中で失敗していないか
- すでに取り込んだファイルなのか
といった状態が画面上からは判断できませんでした。
特に問題だったのは、同じファイルを何度でも取り込めてしまう点です。
すでにWordPressのメディアに取り込んでいるにも関わらず、再度「取り込み」ボタンを押せてしまうため、二重登録や不要な処理が発生する可能性がありました。
移行作業は件数も多く、作業途中で中断することもあります。
「どこまで終わっていて、どこから再開すればいいのか分からない」状態は、運用上かなりのストレスになります。
操作結果を“見える化”する改修
そこで行ったのが、取り込み結果をUI上で明確に分かるようにする改修です。
具体的には、次のような対応を行いました。
- ファイルの取り込みに成功した場合は
→ 取り込み状態を「取り込み済み」と表示 - 取り込み先にファイルが存在しない、または取得に失敗した場合は
→ 状態を「失敗」と表示 - 一度取り込みが完了したファイルについては
→ 「取り込み」ボタンを無効化し、「済」という表記に変更
これにより、
「このファイルはもう処理済みなのか」
「失敗しているので、後で確認が必要なのか」
といった判断が、一覧画面を見るだけでできるようになりました。
運用を止めないための改善
この改修によって、作業の途中で画面を閉じたり、日をまたいで作業を再開した場合でも、現在の進捗状況をすぐに把握できるようになりました。
単に機能が動くかどうかだけでなく、
「人が安心して操作できるか」「同じミスを繰り返さない設計になっているか」
という視点が、プラグインを実務で使う上では非常に重要だと改めて感じたポイントです。
この時点で、
「一括で処理できるツール」から
「状態を管理しながら進められるツール」
へと、プラグインの性格が少しずつ変わっていきました。
改修フェーズ②:リンク置換の成否が分からない問題
ファイルの取り込み状況が一覧で確認できるようになり、作業はかなり進めやすくなりました。しかし、実際に運用を続けていると、次の課題が浮かび上がってきました。
リンクは本当に置き換わっているのか?
ファイルの取り込みが完了しても、それだけでは作業は終わりません。
本来の目的は、記事内のリンク先を旧サーバーから新しいWordPress側のURLへ正しく置き換えることです。
初期段階では、置換処理自体は実行されていたものの、
- 実際にリンクが置き換わったのか
- 途中で失敗していないか
- まだ旧URLのまま残っている箇所がないか
といった点を画面上で確認する手段がありませんでした。
「たぶん置き換わっているはず」という状態で作業を進めるのは不安が残りますし、公開後にリンク切れが発覚するリスクもあります。
取り込みと同様に、置換についても“結果が見えること”が必要だと感じました。
「置換状態」を確認できる項目の追加
そこで行ったのが、リンクの置換結果を一覧で確認できるようにする改修です。
一覧画面に「置換」という項目を追加し、
- 置換が完了している場合は「置換済み」
- まだ置換されていない場合は「未置換」
といった形で状態を表示するようにしました。
これにより、
- ファイルは取り込んだが、リンク置換がまだの記事
- すべて完了している記事
- 作業が途中で止まっている記事
を一覧で把握できるようになりました。
ファイル管理から「投稿内容の整合性管理」へ
この改修によって、プラグインの役割は少し変わりました。
単にファイルを取り込むだけでなく、投稿内容が正しく更新されているかどうかを管理するツールとしても使えるようになったからです。
移行作業では、
- ファイルが存在しているか
- リンク先が正しいか
の両方が揃って初めて「完了」と言えます。
置換状態を明示的に確認できるようになったことで、作業の抜け漏れを防ぎ、安心して次の工程へ進めるようになりました。
改修フェーズ③:投稿以外にも対応する必要が出てきた

ファイルの取り込み状況、リンク置換の状態が一覧で確認できるようになり、投稿の移行作業はかなり安定して進められるようになりました。
しかし、実際のサイト構成を改めて確認すると、もう一つ見落とせない問題がありました。
投稿だけを対象にしていると対応しきれない
初期段階では、このプラグインは「投稿」を対象として作られていました。
ブログ記事の移行が主目的だったため、最初はそれで十分だと考えていたからです。
ところが、実際のサイトを見てみると、
- 固定ページ内にもPDFや画像が使われている
- サービス紹介や実績ページがカスタム投稿タイプで作られている
- 重要な資料リンクが投稿以外のページにも多数存在する
といった状況でした。
このままでは、
「投稿は対応できているが、固定ページやカスタム投稿タイプは未対応」
という中途半端な状態になってしまいます。
移行作業としても、「結局、別の場所で同じ問題が残ってしまう」ことになります。
対象となる投稿タイプを設定できる仕組みを追加
そこで行ったのが、対象とする投稿タイプを柔軟に設定できる仕組みの追加です。
設定画面を新たに用意し、
- 投稿
- 固定ページ
- カスタム投稿タイプ
の中から、今回の移行作業で対象とする投稿タイプを選択できるようにしました。
これにより、サイト構成に合わせて必要な範囲だけを解析・管理できるようになります。
また、一覧画面には「投稿タイプ」の項目を追加し、
どの種類のコンテンツに紐づくファイルなのかが一目で分かるようにしました。
実務で使えるツールに近づいた実感
この改修によって、プラグインは単なる「ブログ移行用ツール」ではなく、
サイト全体を対象としたファイル管理・移行支援ツールとして使えるようになりました。
実務では、
「このページは対象外」
「この投稿タイプは後回し」
といった判断が必要になる場面も多くあります。
対象範囲をコントロールできるようになったことで、作業の計画も立てやすくなり、無駄な処理を減らすことができました。
改修フェーズ④:件数が増えて管理できなくなった

投稿タイプの対応範囲を広げたことで、移行対象となるコンテンツは一気に増えました。
それに伴い、これまで問題になっていなかった「一覧画面の見づらさ」が、次の課題として浮かび上がってきました。
全件表示では状況を把握できない
対象となる記事やページが増えると、
- すでに取り込みが完了しているもの
- 取り込みに失敗しているもの
- まだリンク置換が終わっていないもの
が一覧に混在するようになります。
件数が少ないうちはスクロールしながら確認できていましたが、数が増えてくると、
「今、どこを対応すべきなのか」
「どの作業が残っているのか」
を把握するのが難しくなってきました。
特に移行作業は、
- 途中で中断する
- 日を分けて作業する
- 複数人で状況を共有する
といったケースも想定されます。
その中で、全件を目視で確認する運用は現実的ではありませんでした。
必要な情報だけを絞り込めるようにする
そこで追加したのが、一覧画面での絞り込み検索機能です。
作業者が今必要としている情報だけを、すぐに表示できるようにしました。
絞り込み条件として追加したのは、次の項目です。
- 取り込み状態
・未取り込み
・取り込み済み
・失敗 - 置換の状態
・未置換
・置換済み - 投稿タイプ
これにより、
「未取り込みのものだけを確認する」
「置換が終わっていないページだけを探す」といった作業が、一覧画面だけで完結するようになりました。
「移行ツール」から「管理ツール」へ
この改修を行ったことで、プラグインの役割はさらに変化しました。
単発の移行作業をこなすためのツールではなく、進捗や状態を管理しながら作業を進めるためのツールとして使えるようになったからです。
移行作業では、
「すべて完了したつもりだったが、一部だけ抜けていた」
という状況が最も避けたいトラブルです。
絞り込み機能によって、そうした抜け漏れを事前に防ぎ、安心して次の工程へ進めるようになりました。
一括処理をあえて実装していない理由
ここまで機能を拡張してくると、「すべての記事を一括で取り込み・置換できるボタンがあった方が便利ではないか」と考える場面もありました。
実際、一般に公開するプラグインであれば、一括処理は歓迎される機能だと思います。
しかし、今回の「trevo-file-download」では、あえて一括処理のボタンを実装していません。
一括処理は便利だが、リスクも大きい
一括で処理できるということは、
裏を返せば一度の操作で大量のデータを書き換えてしまう可能性があるということでもあります。
特に今回のプラグインが扱うのは、
- 投稿や固定ページの本文
- ファイルの取り込み
- リンク先URLの置換
といった、サイトの中でも影響範囲が大きい要素です。
万が一、
- 想定外の投稿タイプが対象になっていた
- 正規表現や条件の指定を誤った
- サーバー側で一部の処理が失敗した
といったことが起きると、被害が一気に広がってしまいます。
「一括でできる」という便利さは、社内運用ではそのまま“怖さ”にも直結すると感じました。
社内ツールとしての前提を優先
このプラグインは、最初から不特定多数に配布するためのものではなく、
社内での移行作業を安全に進めるためのツールとして作っています。
そのため、
- 状態を確認しながら
- 少しずつ処理を進める
- 何かあればすぐに止められる
という運用を前提にしています。
一括処理を行わなくても、
- 絞り込み検索
- 状態表示(取り込み・置換)
によって、作業効率自体は十分に確保できていました。
それよりも、誤操作を防ぎ、安心して使えることを優先しています。
バックアップを前提とした運用ルール
このプラグインを使用する際には、必ず次のバックアップを取ってから作業を行っています。
- MySQLデータベースのバックアップ
- wp-content(特に uploads フォルダ)のバックアップ
これは一括処理を実装していないから不要、というわけではなく、
コンテンツを書き換えるツールを使う以上、必須の運用ルールだと考えています。
予想通りの動きをしてくれたことで、
「このやり方なら実務でしっかり使える」
という手応えも得ることができました。
現在の状態と、今後について
現在のプラグインの状態
「trevo-file-download」は、当初想定していた
独自CMSからWordPressへの移行作業という目的に対して、問題なく運用できる状態になりました。
- 外部ファイルの洗い出し
- 新サーバー(WordPressメディア)への取り込み
- 投稿内リンクの置換
- 取り込み・置換状態の可視化
- 投稿タイプ別の対応
- 絞り込みによる進捗管理
といった一連の流れを、実務レベルで安心して進められるツールとして機能しています。
実際の移行作業でも、想定通りの動きをしてくれたことで、
「手作業では現実的ではなかった問題を、きちんと解決できた」
という手応えを得ることができました。
プラグイン公開については思案中
このプラグインは、最初から一般公開を前提に作ったものではなく、
社内での移行・運用作業を安全に進めるためのツールとして制作しました。
そのため、
- 一括処理をあえて実装していない
- 操作の安全性を優先している
- 想定ユーザーがある程度WordPressに慣れている
といった前提があります。
現時点では公開するかどうかは検討中ですが、
「同じような移行で困っている」
「独自CMSからWordPressへの移行で外部ファイル管理に悩んでいる」
といった要望があれば、公開も含めて検討してもよいと考えています。
まとめ:社内課題から生まれたプラグインという選択
今回ご紹介した「trevo-file-download」は、
汎用的なダウンロードプラグインとして作ったものではありません。
- 実際の案件で直面した課題
- 制約のある環境(独自CMS・FTP不可)
- 手作業では対応できない現実
こうした条件の中で、必要に迫られて作り、使いながら改修してきたプラグインです。
最初から完成形を目指したわけではなく、
- まず動くものを作る
- 実務で使ってみる
- 不安や不便を一つずつ潰す
という流れで少しずつ育ててきました。
WordPressでは、既存のプラグインで解決できるケースも多いですが、
「既存の仕組みではうまくいかない」「現場の制約が強い」
という場面では、自作プラグインという選択肢が有効になることもあります。
株式会社TREVOでは、
WordPressでのサイト制作やリニューアルだけでなく、
今回のように実務に合わせた独自プラグインの作成や運用支援も行っています。
WordPressを中心としたサイト構築・運用については、ホームページ制作サービスもぜひご覧ください。
TREVOでは、継続的なサイト改善を見据えたコーポレートサイト制作をご提案しています。目的に応じた運用設計と改善サイクルで、成果につながるサイト運用をサポートします。








