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に取り込む

  1. WordPress 管理画面で「商品」→「すべての商品」を開き、上部の「インポート」をクリックします。
  2. 変換した CSV を選び、「続ける」(Continue)をクリックします。
  3. 列の対応付け(Column mapping)の画面で、各列が正しい項目に割り当てられているか確認します。対応しない列は「インポートしない」(Do not import)を選べます。
  4. 取り込みを実行し、件数・価格・在庫・カテゴリー・画像を数件ずつ確認します。

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 版の機能です。

  1. 検証環境の WordPress にプラグインをインストールして有効化します。
  2. 「ツール」→「インポート」→「Magento」を開きます。
  3. 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 リダイレクトを用意してから切り替える。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲