2026年5月21日
2026年5月21日
MagentoからWooCommerceへ移行する手順(商品CSV・移行プラグイン・顧客と注文・301リダイレクト)
Magento から WooCommerce への移行は、「商品は標準の CSV 取り込みや移行プラグインで移せるが、顧客のパスワードと注文履歴はそのままでは移らない」という前提で計画を立てると手戻りが減ります。この記事では、移すデータの棚卸しから、商品の移し方、顧客と注文の扱い、旧 URL からの 301 リダイレクト、切り替えまでを順番に説明します。
内容は WooCommerce・Adobe Commerce(Magento)の公式ドキュメントと、プラグインディレクトリの説明で確認しています(2026年11月時点、WordPress 7.1・WooCommerce 11.2)。
移行の前に棚卸しする
Magento のストアには、商品以外にも移すデータがあります。一覧を作って件数を数えておくと、移行後の検証にそのまま使えます。
| データ | WooCommerceへの移し方 |
|---|---|
| 単純商品・カテゴリー・画像・在庫 | WooCommerce 標準の商品 CSV 取り込み、または移行プラグイン |
| 構成可能商品(色・サイズ違い)・グループ商品 | CSV の作り直しが必要。移行プラグインの有料版が対応 |
| 顧客アカウント・住所 | WooCommerce 標準では取り込めない。移行プラグインの有料版などを使う |
| 注文履歴 | WooCommerce 標準では取り込めない。移行プラグインの有料版を使うか、Magento 側の書き出しを記録として保管する |
| レビュー・クーポン・SEO 用のメタ情報 | 移行プラグインの有料版が対応。件数が少なければ手作業 |
| CMS ページ(会社概要など) | 移行プラグイン、または固定ページとして作り直す |
| 商品・カテゴリーの URL | 301 リダイレクトで新しい URL に転送する |
| 決済・配送・税・メールの設定 | 移せない。WooCommerce で設定し直す |
移行方法を選ぶ
| 方法 | 向いている場合 | 注意点 |
|---|---|---|
| WooCommerce 標準の商品 CSV 取り込み | 単純商品が中心で、顧客・注文は移さない小規模なストア | Magento の CSV は列の形が違うため変換が必要 |
| FG Magento to WooCommerce(プラグイン) | Magento のデータベースに接続できる。商品数が多い | 無料版は商品・カテゴリー・画像・在庫・CMS ページまで。顧客・注文・リダイレクトなどは有料の Premium 版 |
| 移行サービス・制作会社に依頼 | 拡張機能や独自改修が多い、マルチストア | 費用と、移せる範囲を事前に確認する |
どの方法でも、作業は本番とは別の検証環境で行い、Magento は切り替えまで動かしたままにします。
手順1: Magentoのバックアップを取る
最初に、データベースと画像を含むファイルをバックアップします。パスワードはコマンドに直接書かず、実行時に入力します。
# データベース(InnoDB を止めずに一貫した状態で書き出す)
mysqldump --single-transaction --quick -u magento_user -p magento_db > magento_db.sql
# 商品画像などのメディア(Magento 2 の場合)
tar czf magento_media.tar.gz -C /var/www/magento pub/media
データベースの接続情報は、Magento 2 なら app/etc/env.php、Magento 1 なら app/etc/local.xml に書かれています。
手順2: 検証環境にWordPressとWooCommerceを用意する
WP-CLI を使う場合の例です。ドメイン・データベース名は自分の環境に置き換えてください。
wp core download --locale=ja
wp config create --dbname=wp_shop --dbuser=wp_user --prompt=dbpass
wp core install --url=https://staging.example.com --title="ショップ名" --admin_user=shopadmin --admin_email=admin@example.com --prompt=admin_password
wp plugin install woocommerce --activate
--prompt を付けると、パスワードを対話で入力できます。WooCommerce を有効化したら、通貨・税・配送の基本設定を先に済ませます。
手順3a: 商品をCSVで移す(WooCommerce標準)
Magentoから商品を書き出す
Magento 2 の管理画面で「System」→「Data Transfer」→「Export」を開き、Entity Type に「Products」を選んで CSV を書き出します。公式ドキュメントでは、書き出せる種類は Advanced Pricing・Products・Customers Main File・Customer Addresses・Stock Sources などで、注文はこの画面からは書き出せません。
WooCommerceの形式に変換する
Magento の CSV は列名も値の書き方も WooCommerce と違います。たとえばカテゴリーは Magento では Default Category/Gear/Bags のように「/」区切り、WooCommerce では Gear > Bags のように「>」区切りです。画像も Magento はファイルのパスだけを持っているので、WooCommerce が取りに行ける URL に直す必要があります。
次の Python スクリプトは、単純商品だけを WooCommerce の取り込み形式に変換する例です。Magento 2.4 の標準の書き出しの列名(sku・name・price・qty・url_key・base_image など)を前提にしているので、実際のファイルの見出し行と照らし合わせてから使ってください。
import csv
import sys
from decimal import Decimal
SRC, DST = sys.argv[1], sys.argv[2]
# 旧ショップの商品画像のURL(Magento 2 の pub/media/catalog/product に当たるURL)
MEDIA = "https://shop.example.com/media/catalog/product"
FIELDS = [
"Type", "SKU", "Name", "Published", "Short description", "Description",
"Regular price", "Sale price", "Categories", "Images", "In stock?", "Stock",
"Meta: _magento_url_key",
]
def categories(value):
# 「Default Category/Gear/Bags,Default Category/Men」→「Gear > Bags, Men」
out = []
for path in filter(None, (v.strip() for v in value.split(","))):
parts = path.split("/")[1:] # 先頭のルートカテゴリを除く
if parts:
out.append(" > ".join(parts))
return ", ".join(out)
def images(row):
files = [row.get("base_image", "")] + row.get("additional_images", "").split(",")
seen = []
for name in (f.strip() for f in files):
if name and name not in seen:
seen.append(name)
return ", ".join(MEDIA + name for name in seen)
def price(value):
# 「34.0000」→「34」
return format(Decimal(value).normalize(), "f") if value.strip() else ""
def stock(value):
return str(int(float(value))) if value.strip() else ""
written = skipped = 0
with open(SRC, newline="", encoding="utf-8-sig") as src, \
open(DST, "w", newline="", encoding="utf-8") as dst:
writer = csv.DictWriter(dst, fieldnames=FIELDS)
writer.writeheader()
for row in csv.DictReader(src):
# ストアビュー別の行と、単純商品以外(configurable など)は対象外
if row.get("store_view_code") or row.get("product_type") != "simple":
skipped += 1
continue
writer.writerow({
"Type": "simple",
"SKU": row["sku"],
"Name": row["name"],
"Published": "1" if row.get("product_online", "1") == "1" else "0",
"Short description": row.get("short_description", ""),
"Description": row.get("description", ""),
"Regular price": price(row.get("price", "")),
"Sale price": price(row.get("special_price", "")),
"Categories": categories(row.get("categories", "")),
"Images": images(row),
"In stock?": "1" if row.get("is_in_stock") == "1" else "0",
"Stock": stock(row.get("qty", "")),
"Meta: _magento_url_key": row.get("url_key", ""),
})
written += 1
print(f"書き出し {written} 件 / 対象外 {skipped} 件")
magento_to_woo.py として保存し、次のように実行します。
python magento_to_woo.py catalog_product.csv woo_products.csv
変換時の注意は次のとおりです。
- 見出しは WooCommerce の英語の列名にしています。WooCommerce は日本語の管理画面でも英語の列名を自動で対応付けます。
Meta: _magento_url_key列は、あとでリダイレクトを作るために Magento の URL キーを商品のカスタムフィールドに残すためのものです。- 構成可能商品(
configurable)・バンドル商品・グループ商品は対象外にしています。WooCommerce の「バリエーション商品」として作り直すか、移行プラグインを使います。 - 商品説明に Page Builder の HTML や
{{media url=...}}のような Magento 独自の記法が残っている場合は、取り込み後に表示を確認して直します。 - カテゴリー名に「/」や「,」を含む場合、このスクリプトでは正しく分けられません。
WooCommerceに取り込む
- WordPress 管理画面で「商品」→「すべての商品」を開き、上部の「インポート」をクリックします。
- 変換した CSV を選び、「続ける」(Continue)をクリックします。
- 列の対応付け(Column mapping)の画面で、各列が正しい項目に割り当てられているか確認します。対応しない列は「インポートしない」(Do not import)を選べます。
- 取り込みを実行し、件数・価格・在庫・カテゴリー・画像を数件ずつ確認します。
WooCommerce の公式ドキュメントのとおり、画像の URL は WooCommerce がダウンロードできる場合だけ取り込まれます。旧サーバーが外部からの画像の取得を拒否している場合は、画像をメディアライブラリに直接アップロードします。同じ CSV を修正して取り込み直すときは、アップロード画面で「既存の商品を更新」(Update existing products)にチェックを入れると、ID または SKU が一致する商品が更新されます。
手順3b: 移行プラグインで移す(FG Magento to WooCommerce)
Magento のデータベースに接続できる場合は、プラグインディレクトリにある「FG Magento to WooCommerce」で直接移す方法もあります。説明によると Magento 1.3〜2.4 で動作確認されており、無料版で移せるのは商品カテゴリーとその画像、商品、商品タグ、商品画像とギャラリー、在庫、CMS ページです。商品属性・バリエーション、ユーザー・顧客、注文、レビュー、クーポン、SEO メタ情報、旧 URL のリダイレクトは有料の Premium 版の機能です。
- 検証環境の WordPress にプラグインをインストールして有効化します。
- 「ツール」→「インポート」→「Magento」を開きます。
- Magento のデータベースのホスト名・ポート・データベース名・ユーザー名・パスワード・テーブル接頭辞と、Magento のサイトの URL(画像の取得に使う)を入力して取り込みます。
プラグインの FAQ にある主な注意点です。
- プラグインは Magento のデータベースを読むだけで、Magento 側は変更しません。
- WordPress のサーバーから Magento のデータベースに接続できない場合は、手順1で書き出した SQL を WordPress と同じデータベースに読み込み、WordPress のデータベースの接続情報で取り込みます。
- 画像を取り込むには、PHP の
allow_url_fopenが有効である必要があります。 - 途中で止まった場合は、移行に使うもの以外のプラグインを止めてから再実行すると、止まったところから続きます。
手順4: 顧客と注文の扱いを決める
顧客のパスワードは、Magento と WordPress でパスワードの保存形式(ハッシュの方式)が違うため、データだけ移してもそのままではログインできません。方法は次の2つです。
- 移行後に、顧客にパスワードの再設定を案内する(「パスワードをお忘れですか?」から再設定してもらう)
- FG Magento to WooCommerce の Premium 版のように、Magento のパスワードで WordPress にログインできる機能を持つ方法を使う
顧客データは個人情報です。移行用に書き出した CSV や SQL は、作業が終わったら削除し、受け渡しは暗号化した経路で行います。
注文履歴は、WooCommerce 標準の機能では取り込めません。移行プラグインの有料版で移すか、Magento 管理画面の注文一覧(「Sales」→「Orders」)から CSV を書き出し、会計や問い合わせ対応用の記録として保管します。顧客が「マイアカウント」で過去の注文を見られる必要があるかどうかで選びます。
手順5: 旧URLから301リダイレクトする
Magento の商品 URL は、既定では https://shop.example.com/url-key.html の形です(商品 URL の接尾辞の既定値は .html)。WooCommerce の商品 URL は https://shop.example.com/product/スラッグ/ の形になるため、検索エンジンの評価やブックマークを引き継ぐには、旧 URL から新 URL への 301 リダイレクトが必要です。
手順3a で _magento_url_key を残した場合は、次の PHP を WP-CLI で実行すると、商品のスラッグを Magento の URL キーに合わせたうえで、Apache 用のリダイレクト行を出力できます。
<?php
/**
* 取り込んだ商品のスラッグを Magento の url_key に合わせ、
* 旧URL→新URLの Apache 用リダイレクト行を出力する。
* 実行: wp eval-file magento-slugs.php > magento-redirects.txt
*/
$products = wc_get_products(
array(
'limit' => -1,
'status' => 'publish',
)
);
foreach ( $products as $product ) {
$key = $product->get_meta( '_magento_url_key' );
if ( '' === $key ) {
continue;
}
$id = $product->get_id();
if ( get_post_field( 'post_name', $id ) !== $key ) {
wp_update_post(
array(
'ID' => $id,
'post_name' => $key,
)
);
}
$path = wp_parse_url( get_permalink( $id ), PHP_URL_PATH );
printf( "Redirect 301 /%s.html %s\n", $key, $path );
}
出力は Redirect 301 /joust-duffle-bag.html /product/joust-duffle-bag/ のような行です。内容を確認してから、本番の .htaccess に貼ります。# BEGIN WordPress から # END WordPress の間は WordPress が書き換えるので、その外側に置きます。Nginx の場合は同じ対応表から location や map の設定を作ります。
Magento で「商品 URL にカテゴリーのパスを含める」設定を有効にしていた場合や、ストアコードを URL に含めていた場合は、旧 URL の形が変わるので、実際のアクセスログや Magento の URL 書き換えの一覧と照らし合わせて対応表を作ります。カテゴリーページも、件数が少なければ同じように対応表を作ってリダイレクトします。
URL の変更に伴う確認は、サイト移行後に404エラーが出るときの対処も参考にしてください。
手順6: 切り替え前のテストと切り替え
検証環境で、次の項目を確認します。
- 商品の件数・価格・在庫・画像・カテゴリーが Magento と一致するか(棚卸しの一覧と照合)
- カートから注文完了までの流れ。決済はテストモードで確認する
- 送料・税の計算、注文確認メールの送信
- 旧 URL のサンプルを開いて、新しい商品ページに 301 で転送されるか
切り替えの当日は、Magento で新しい注文を受け付けない状態にしてから、最後の差分(在庫や移行プラグインで移す注文・顧客)を取り込み、DNS や公開ディレクトリを WooCommerce に切り替えます。Magento のサーバーとバックアップは、問題がないことを確認できるまで残しておきます。
逆方向の移行の流れは、WooCommerceからBigCommerceへ移行する手順でも説明しています。
まとめ
- 移すデータを棚卸しし、商品・顧客・注文・URL ごとに移し方を決める。
- 単純商品中心なら、Magento の Products 書き出しを WooCommerce の CSV 形式に変換して標準の取り込み機能で移せる。
- データベースに接続できるなら FG Magento to WooCommerce で直接移せる。顧客・注文・リダイレクトは Premium 版の機能。
- 顧客のパスワードはそのままでは使えない。再設定の案内か、旧パスワードでログインできる仕組みを用意する。
- 旧 URL(
.html)から新しい商品 URL への 301 リダイレクトを用意してから切り替える。