taupe WebとAIと暮らし

Notes / 実践記録

WordPress移行でURLを置換するSQL|phpMyAdminで実行する前の注意点

WordPress移行でURLを置換するSQL|phpMyAdminで実行する前の注意点

本ページはアフィリエイトプログラムを利用しています

WordPressサイトを別ドメインへ移行したり、デモ環境から本番環境へ切り替えたりすると、データベース内に残った古いURLを置換したくなることがあります。
この記事は、2016年に書いたphpMyAdminでURLを置換するSQLメモを、現在のWordPress運用に合わせて見直したものです。

結論から言うと、いまはphpMyAdminでSQLを直接打つ前に、バックアップと復元手段を用意し、可能ならWP-CLIのsearch-replaceやSearch Replace系ツールを使うほうが安全です。
とくにWordPressのデータベースにはシリアライズされたデータが含まれるため、単純なSQL置換だけで全体を直そうとすると、ウィジェットやテーマ設定、プラグイン設定を壊すことがあります。

ただし、phpMyAdminしか使えない場面もあります。
その場合にどこまでSQLで触るか、どこは触らないかを整理しておきます。

WordPress移行でURL置換が必要になる場面

  • テスト環境のURLを本番URLへ置き換えたい
  • HTTPからHTTPSへ切り替えたあと、本文や画像URLが古いまま残っている
  • ドメイン変更後に、記事本文・画像・内部リンクの一部だけ古いURLを参照している

このあたりが、phpMyAdminでURL置換SQLを調べる典型的な場面です。
ただ、WordPress公式の移行ドキュメントでも、URL変更時にはデータベース内の参照が残ること、そして全体検索置換ではシリアライズデータに注意が必要なことが説明されています。

参考: WordPress公式の移行ドキュメント

まずデータベースをバックアップする

phpMyAdminでSQLを実行する前に、必ずデータベースをバックアップします。
これは注意書きではなく、作業手順の一部として先にやるものです。

WordPress公式のデータベースバックアップ手順では、phpMyAdminで対象データベースを選び、ExportタブからSQL形式で書き出す流れが案内されています。
小さなサイトならQuick exportでも十分ですが、復元や一部テーブルの確認も考えるならCustom exportで内容を確認しておくと安心です。

参考: WordPress公式のデータベースバックアップ手順
参考: phpMyAdmin公式のImport / Exportドキュメント

WP-CLIが使えるならsearch-replaceを優先する

サーバーでWP-CLIが使えるなら、URL置換はphpMyAdminのSQLよりもWP-CLIのsearch-replaceを優先したいです。
WP-CLI公式ドキュメントでは、search-replaceはPHPのシリアライズデータを扱い、主キーは変更しないと説明されています。

まずはdry-runで置換件数だけ確認します。
問題なさそうなら、同じ条件で本実行します。

wp search-replace 'https://old.example.com' 'https://new.example.com' --skip-columns=guid --dry-run
wp search-replace 'https://old.example.com' 'https://new.example.com' --skip-columns=guid

ここで大事なのは、--skip-columns=guid を付けることです。
WordPress公式の移行ドキュメントでも、wp_postsguid列は変更しないものとして扱われています。

参考: WP-CLI公式 wp search-replace

phpMyAdminでSQLを実行する流れ

phpMyAdminで作業する場合は、対象のデータベースを選び、SQLタブから実行します。
以下の画面は古いスクリーンショットですが、作業の考え方は今も同じです。

  1. phpMyAdminに接続し、URLを変更したいWordPressのデータベースを選択します。phpMyAdminでWordPressのデータベースを選択している画面
  2. 上部のタブから「SQL」を選択します。phpMyAdminでSQLタブを選んでいる画面
  3. SQL入力欄に必要なSQLだけを入れ、内容を確認してから実行します。phpMyAdminのSQL入力欄にURL置換SQLを入れる画面

phpMyAdminで使うなら最小限のSQLにする

以前の記事では、wp_optionswp_postswp_postmetaguidをまとめて置換するSQLを載せていました。
ただ、現在の判断では、そのままコピペして全体置換するのはおすすめしません。

phpMyAdminでSQLを使うなら、まずはhomesiteurlの確認、本文中の画像URLや内部リンクなど、範囲が分かる場所に限定します。
テーブル接頭辞を変更している場合は、wp_の部分を自分の環境に合わせます。

-- home と siteurl を明示的に変更する
UPDATE wp_options
SET option_value = 'https://new.example.com'
WHERE option_name = 'home';

UPDATE wp_options
SET option_value = 'https://new.example.com'
WHERE option_name = 'siteurl';

-- 記事本文内の古いURLだけを置換する
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'https://old.example.com', 'https://new.example.com');

このSQLは、あくまで「本文中のURL置換」に寄せた最小サンプルです。
wp_postmetawp_optionsの広い範囲をREPLACEすると、シリアライズされた設定値を壊す可能性があります。
テーマ設定、ウィジェット、ブロック、プラグイン設定まで含めて置換するなら、WP-CLIやSearch Replace系ツールを使うほうが安全です。

phpMyAdminでSQL実行後の結果を確認する画面

GUIDは置換しない

WordPress移行のURL置換で、昔のSQLサンプルによく出てくるのがwp_postsguid列です。
ここは触らないほうがいいです。

WordPress公式の移行ドキュメントでは、GUIDは投稿の一意識別子として扱われ、ドメインを移しても変更しないものだと説明されています。
フィードリーダーなどが既読判定に使うため、URLが古く見えても、通常の移行作業ではguidを置換しません。

そのため、以前のように以下のSQLをそのまま実行する形にはしないほうが安全です。

-- 基本的には実行しない
UPDATE wp_posts
SET guid = REPLACE(guid, 'https://old.example.com', 'https://new.example.com');

実行後に確認すること

URL置換後は、SQLが成功したかだけで終わらせません。
公開ページ、管理画面、画像、内部リンク、ログイン、フォーム、RSS、サイトマップをひと通り確認します。

  • トップページと代表的な記事が表示されるか
  • 画像URLが新しいドメインやHTTPSになっているか
  • 管理画面にログインできるか
  • パーマリンクを再保存して404が出ないか
  • Search Console、GA4、AdSenseなどの確認タグが残っているか
  • 古いURLが残っていないか、DBや公開HTMLで再検索する

WordPress移行は、SQLを実行した瞬間よりも、その後の確認で差が出ます。
戻せるバックアップがあり、どこを置換したかが分かる状態で進めるのが大事です。

WordPress運用まわりの関連記事

WordPressの移行や運用で詰まりやすいところは、別記事にも残しています。

Cocoonカスタマイズ|記事内のカテゴリにアイキャッチを表示する【WordPress】
Cocoonカスタマイズ|記事内のカテゴリにアイキャッチを表示する【WordPress】
WordPressのCocoonで記事内にカテゴリアイキャッチを表示するカスタマイズ手順を、子テーマのfunctions.phpとCSSコード例を交えて具体的に解説します。 
jQuery is not defined|WordPress5.6でJSエラー(Autoptimize)
jQuery is not defined|WordPress5.6でJSエラー(Autoptimize)
WordPress5.6への更新後、AutoptimizeでjQuery(jquery.min.js)が圧縮対象に含まれたことで“jQuery is not defined”エラーが発生した原因と、Autoptimize設定でjquery.min.jsを除外して解消する手順を解説しています。 
WordPressでRSSが検出されないのはプラグインが原因かも
WordPressでRSSが検出されないのはプラグインが原因かも
WordPressでRSSフィードが外部サービスに認識されない原因を探り、Autoptimizeの「HTMLコード最適化」機能でタグの引用符が削除されていたことを発見。設定を解除してRSSが自動検出されるようになる手順を具体的に解説しました。 

WordPressの基本やサイト運用を見直すなら、手元に1冊あると流れを確認しやすいです。
DBを触る前に、WordPress全体の構造をざっと見直しておくのも悪くありません。

楽天Kobo電子書籍ストア
¥2,200 (2026/06/26 03:22時点 | 楽天市場調べ)

続けて読む

次に読むなら、これ。

同じテーマの実践記録や、taupeの読み方へ進めます。

同じテーマWordPress近い実践記録をカテゴリから続けて読めます。サイトの読み方FAQ運用方針や、よくある質問を確認できます。taupeについてこのサイトについてどんな視点で作り、使い、運用しているかをまとめています。

Category

Author / Official hub

イシカワヒデカズの実践記録

Web制作、開発、AI活用、メディア運営の相談先は公式サイトにまとめています。