ガイド
WooCommerceに商品を一括登録する方法
WooCommerceでは、CSVファイルから数百点の商品を一度にインポートできます。このガイドでは、標準のインポーターの使い方、プラグインやREST APIが適する場面、そしてCSVに最初から整ったデータを用意する方法を説明します。
WooCommerceの管理画面で商品を1点ずつ追加する方法は、小規模なショップなら問題ありませんが、サプライヤーのカタログをそのやり方で登録すると何日もかかることがあります。WooCommerceには商品CSVインポーターが標準で備わっており、大規模な作業や定期的な作業にはインポート用プラグインやAPIも利用できます。
難しいのはインポートそのものではなく、正しいCSVを作ることです。商品またはバリエーションごとに1行、適切な列、一貫した属性、公開に値する説明文が必要になります。
方法1:WooCommerce標準のCSVインポーター
WooCommerceには、商品CSVのインポーターとエクスポーターが標準搭載されています。WordPressの管理画面で「商品」→「商品一覧」を開き、「インポート」を選択します。CSVをアップロードして列をWooCommerceの項目に対応付け、インポートを実行します。「Update existing products」にチェックを入れると、重複して作成せず、IDまたはSKUが一致する既存の商品を更新できます。
- まず既存の商品を1点エクスポートし、そのファイルをテンプレートとして使います。ストアが想定する正確な列名がわかります。
- 一般的な列には、Type、SKU、Name、Published、Short description、Description、Regular price、Categories、Tags、Images、Attribute 1 name / Attribute 1 value(s) があります。
- 画像はURLからインポートされるため、インポート実行時に一般公開されている必要があります。
- 可変商品には、タイプが「variable」の親行と、その親を参照するバリエーションごとの行が必要です。
- 共有ホスティングでは、非常に大きなファイルはタイムアウトすることがあります。数百行ずつのバッチに分割してください。
方法2:インポート用プラグイン
サードパーティ製のインポートプラグインは、標準のインポーターにない機能を追加します。たとえば、サプライヤーのフィードからのスケジュールインポートや定期インポート、XMLへの対応、項目の変換ルール、非常に大きなファイルの処理の改善などです。サプライヤーが価格や在庫のファイルを定期的に更新して送ってくる場合に向いています。
ただし、プラグインも構造化された入力を前提としています。サプライヤーがフィードではなくPDFを提供している場合、プラグインを使ってもPDFを行データに変換する作業はなくなりません。
方法3:WooCommerce REST API
開発者や連携ツールは、WooCommerce REST APIを使って商品を作成できます。1回のリクエストで多数の商品を作成または更新するバッチエンドポイントもあります。CSVを介さずに商品を直接作成する自動化パイプラインやアプリに適しています。
Doc2Shelfはこの方法を採用しています。レビュー後、商品を長い説明文と短い説明文付きのシンプルな下書き商品としてWooCommerceに送信するため、公開する前にWooCommerce上で内容を確認できます。グローバルなフィルター属性や可変商品は、WooCommerce側で別途設定します。
一括登録に向けた商品データの準備
どのインポート方法を使う場合でも、結果を左右するのはデータの品質です。インポートの前に、次の点を確認してください。
- すべての商品に一意のSKUを付けます。後からの更新で正しい商品を特定するための手がかりになります。
- カテゴリーとグローバル属性を先にWooCommerceで作成し、一貫して参照します。
- 仕様を正規化します。単位と属性名を統一し、1セルには1つの値だけを入れます。
- サプライヤーの文章をそのまま貼り付けず、きちんとした説明文を書きます。マーケットプレイスや検索エンジンは独自の文章を評価します。
- 最初はドラフトとしてインポートしてください。Publishedを-1に設定します(0にすると商品が非公開になります)。サンプルを確認してから、すべてを公開します。
サプライヤーがPDFしか送ってこない場合
多くのサプライヤーは、データシートやカタログをCSVフィードではなくPDFで提供します。その場合のボトルネックは抽出作業です。各PDFを読み、列を埋め、説明文を書く人が必要になります。
これは手作業でも可能ですが、ツールでデータを抽出して確認する方法もあります。Doc2ShelfはサプライヤーのPDFを読み取って確認用に仕様を抽出し、WooCommerceの長い説明文と短い説明文の下書きを作成して、REST API経由で商品を下書きとして作成します。PDFから作るカタログでは、スプレッドシートの工程が不要になります。
WooCommerceのインポートでよくあるエラー
インポートが失敗したり、想定外の結果になったりした場合は、まず次の点を確認してください。
- SKUの重複や欠落により、行がスキップされたり、商品が重複したりしている。
- ファイルのエンコーディングが誤っている。アクセント付き文字などを正しく取り込むには、CSVをUTF-8で保存してください。
- 画像URLがリダイレクトされる、ログインが必要、または非常に大きなファイルを指している。
- カテゴリーのパスの書き方が統一されていない(階層化したカテゴリーは「親 > 子」の形式を使います)。
- バリエーションの属性値が、親商品の属性値と一致していない。
WooCommerce商品CSVの列リファレンス
標準のインポーターは、決まった列名を読み取ります。自分のストアから商品を1件エクスポートすると、お使いのWooCommerceのバージョンが想定する正確なヘッダーが分かります。下の表では、一括登録で特に重要な列を説明しています。必須なのはNameのみで、それ以外の列はすべて任意ですが、Type、SKU、価格、カテゴリーのないカタログをインポートすると、後で手作業が大量に残ります。
WeightやWidthなど、ヘッダーに単位が含まれる列には、ストア設定で指定した単位が表示されます。そのため、これらのヘッダーは手入力せず、エクスポートしたものからコピーしてください。専用の列がないカスタムデータは、meta:で始まり、そのあとにフィールドキーが続くヘッダーの列に入力します。
| 列名 | 内容 | 例 | 備考 |
|---|---|---|---|
| ID | 既存のWooCommerce商品ID | — | 新規商品では空欄にします。更新のインポートでは、まずIDで照合されます。 |
| Type | 商品タイプ | simple | variable、variation、grouped、externalも使用できます。virtualとdownloadableは商品に付加する区分であり、独立したタイプではありません。 |
| SKU | 自社の一意の商品コード | ACME-KTL-17 | 更新時の2番目の照合キー(IDの次)。ストア内で一意である必要があります。 |
| GTIN, UPC, EAN, or ISBN | グローバルな商品識別子 | 4006381333931 | 標準フィールド。WooCommerce 11.2以降は、IDとSKUがどちらも空欄のときの代替の照合キーになります。 |
| Name | 商品タイトル | ステンレスケトル 1.7 L | 唯一の必須列です。 |
| Published | インポート後のステータス | -1 | 1 = 公開、0 = 非公開、-1 = ドラフト、2 = レビュー待ち。 |
| Regular price / Sale price | 価格 | 49.90 | 通貨記号なしの数値のみ。 |
| Stock | 在庫数 | 25 | 必要に応じてIn stock?およびBackorders allowed?と併用します。 |
| Weight (unit), Length (unit), Width (unit), Height (unit) | 配送用の重量と寸法 | 1.2 | ヘッダーにはストアで設定した単位(kgやcmなど)が表示されます。 |
| Categories | 商品カテゴリー | Kitchen > Kettles, Gifts | カンマ区切り。「>」はサブカテゴリーを示します。 |
| Images | 画像のURL | https://cdn.example.com/ktl-front.jpg | カンマ区切り。最初の画像がアイキャッチ画像(商品の代表画像)になります。 |
| Parent | バリエーション行の親商品 | ACME-KTL | 親商品のSKU、またはid:に続けて親商品のID。 |
| Attribute 1 name / Attribute 1 value(s) | 属性とその値 | Color / Red, Blue | 属性を増やすには、Attribute 2、Attribute 3というように追加します。 |
| Attribute 1 visible / Attribute 1 global | その属性のフラグ | 1 / 1 | visibleは商品ページに表示するかどうか、globalはストア全体で共通の属性を使うかどうかを指定します。 |
| Attribute 1 default | 可変商品であらかじめ選択される値 | Red | 親行に設定します。 |
| meta:supplier_code | カスタムメタフィールド | D-4471 | meta:で始まるヘッダーは、カスタムメタとして保存されます。 |
CSVでの可変商品:親行とバリエーション行
可変商品は複数の行にまたがります。商品とその属性値を定義する親行が1行、そして1つの組み合わせの価格、SKU、在庫を持つバリエーション行がバリエーションごとに1行です。親行のTypeは「variable」、各バリエーション行のTypeは「variation」で、Parent列に親商品のSKU、またはid:に続けてそのIDを指定して、親行を参照します。
行どうしを結び付けるのが属性列です。親行のAttribute 1 value(s)には、その商品が提供するすべての値をカンマ区切りで列挙します。各バリエーション行には、同じAttribute 1 nameと、それらの値のうちちょうど1つが入ります。表記と大文字・小文字は一致させる必要があります。親が「Red」を提供しているのに、バリエーションが「red」としていると、使用できる属性値がない状態になることがあります。
商品 → 属性で作成したストア全体共通の属性を使う場合は、親行とそのバリエーション行のAttribute 1 globalを1にします。レイヤードナビゲーションやフィルターウィジェットは、これを利用して動作します。WooCommerce 11.1以降は、更新のインポートで既存の可変商品に新しいバリエーションを追加することもできるため、親行を作り直さずにラインナップを拡張できます。
- ファイルを確認しやすく、バリエーションが参照する時点で親行が存在するよう、各親行はそのバリエーション行の上に置く。
- すべてのバリエーションに固有のSKUと価格を設定する。価格のないバリエーションは購入できない。
- 親行のAttribute 1 defaultで、あらかじめ選択される選択肢を指定する。
| 行 | Type | SKU | Parent | Attribute 1 name | Attribute 1 value(s) |
|---|---|---|---|---|---|
| 親行 | variable | ACME-KTL | — | Color | Red, Blue |
| バリエーション1 | variation | ACME-KTL-RED | ACME-KTL | Color | Red |
| バリエーション2 | variation | ACME-KTL-BLU | ACME-KTL | Color | Blue |
CSVで商品画像を追加する
Images列には、カンマ区切りで1つ以上の画像URLを指定できます。最初のURLがアイキャッチ画像(商品の代表画像)になり、残りは記載順に商品ギャラリーを構成します。インポート時にWordPressが各ファイルをメディアライブラリにダウンロードするため、すべてのURLがその時点で公開されている必要があります。ログインが必要なURL、有効期限付きの共有リンク、ファイルではなくWebページへのリダイレクトは使えません。
画像は、インポートで最も時間のかかる部分になりがちです。1商品につき画像5枚で数百商品なら、ダウンロードは1,000回を超えます。画像はホスティングする前にリサイズし、IMG_0042.jpgではなくkettle-red-front.jpgのように内容が分かるファイル名を付け、大規模なカタログは小さなファイルに分割してください。
標準のインポーターでは、画像のalt(代替テキスト)を設定できません。alt属性は、インポート後にメディアライブラリで追加するか、REST APIを使うか、設定に対応したインポート用拡張機能を使って追加します。バリエーションが持てる画像は1枚のみのため、各バリエーション行のURLは多くても1つにしてください。
WooCommerce REST APIで商品を一括作成する
インポートを繰り返し行う場合、商品データがすでに別のシステムにある場合、あるいはCSVをまったく扱いたくない場合は、REST APIのほうが適しています。商品のバッチエンドポイント(POST /wp-json/wc/v3/products/batch)は、作成、更新、削除の操作を1回のリクエストでまとめて受け付けます。
既定では、1回のバッチリクエストで扱えるオブジェクトは、作成・更新・削除の合計で100件までです。バリエーション、カテゴリー、属性、属性タームのバッチエンドポイントにも同じ上限が適用されます。そのため、1,000商品のカタログでは少なくとも10回のリクエストが必要で、バリエーションを加えるとさらに増えます。
- WooCommerce → 設定 → 詳細設定 → REST APIで、読み取り/書き込み権限を持つREST APIキーを作成します。または、アプリにWooCommerceの認可画面からキーを要求させます。
- 先にカテゴリー、グローバル属性、属性タームを作成し、それぞれのIDを控えておきます。
- ステータスをドラフトに設定して、単一商品と親商品を最大100件ずつのバッチで送信します。
- 各可変商品のバリエーションを、その商品のバリエーション用バッチエンドポイントで作成します。
- レスポンスで各項目の結果を確認し、失敗した項目だけを再試行します。
- 管理画面でドラフトの一部をサンプルとして確認してから、公開します。
WooCommerce商品一括アップロード用のプラグインや方法の選び方
標準のインポーターでは足りない場合は、機能一覧の長さではなく、自社のデータをどう扱えるかでインポート用プラグインや拡張機能を判断してください。導入を決める前に、ストアのステージング用コピーで実際のサプライヤーのファイルを使って試しましょう。次の表で4つの方法を比較し、その後にどのプラグインにも確認しておきたい点を挙げています。
- 対応する元データの形式:CSVのみか、XMLやスプレッドシートのファイル、URLで取得するリモートフィードにも対応しているか。
- スケジュール実行:新しい価格や在庫を取り込むために、インポートを定期的に再実行できるか。
- マッピングと変換:インポート中の列名の変更、値の分割、単位の変換、価格ルールの適用。
- 可変商品:親商品、バリエーション、グローバル属性を確実に作成できるか。
- 画像:ダウンロードの方法、重複を検出できるか、alt属性を設定できるか。
- 大きなファイル:長時間のインポートがタイムアウトしないよう、バックグラウンド処理または分割処理に対応しているか。
- 更新ルール:どのキー(ID、SKU、GTIN)で照合するか、どの項目を上書きしてよいか。
| 方法 | 向いているケース | 注意点 |
|---|---|---|
| 標準CSVインポーター | ストア担当者による単発のインポートや一括更新 | サーバーのアップロード容量や実行時間の制限。画像のalt属性は設定不可 |
| インポート用プラグインまたは拡張機能 | 定期的なサプライヤーフィード、XMLやスプレッドシートの元データ、スケジュール更新 | 保守と互換性の維持が必要なプラグインが1つ増える |
| REST APIのバッチリクエスト | 自動化されたパイプライン、別システムからの同期 | 開発工数がかかる。既定では1回のバッチリクエストにつき100オブジェクトまで |
| 商品を作成してくれるアプリ | サプライヤー文書など、スプレッドシート以外から始まる商品データ | アプリが実際に設定する商品タイプと項目を確認する |
インポート前のチェックリストとエラーの対処法
インポートの失敗の多くは、準備の手順を省いたことが原因です。大規模なインポートの前には毎回このチェックリストを確認し、それでも問題が起きた場合は表を使って原因を調べてください。
- データベースをバックアップするか、ストアのステージング用コピーでインポートを実行する。
- 既存の商品を1件エクスポートし、そのヘッダー行を自分のファイルにコピーする。
- ファイルが参照するカテゴリー、グローバル属性、属性タームを作成する。
- すべてのSKUが一意であること、およびすべてのバリエーションのParentの値が既存の親商品のSKUと一致していることを確認する。
- 価格、在庫、重量、寸法の列には、数値のみを入力する。
- 画像URLの一部をプライベートウィンドウで開き、ログインなしで表示されることを確認する。
- Publishedを-1に設定し、商品がドラフトとして取り込まれるようにする。
- ファイルをUTF-8のCSVで保存する。
- 10行のテスト用ファイルをインポートして結果を確認し、問題がなければ残りをバッチに分けてインポートする。
| 問題 | 考えられる原因 | 対処法 |
|---|---|---|
| 商品が更新されず重複して登録される | 「既存の商品を更新する」にチェックが入っていない、またはIDやSKUがストアと一致していない | オプションにチェックを入れ、最新のエクスポートからIDやSKUをコピーする |
| 更新のインポートで行がスキップされる | IDまたはSKUで一致しない(GTINによる照合は、11.2以降、両方が空欄の場合のみ) | 各行に既存商品のSKUまたはIDを追加する |
| バリエーションが別々の商品としてインポートされる | Typeがvariationになっていない、またはParent列が空、もしくは綴りが誤っている | Typeを「variation」にし、親商品のSKUを正確に指定する |
| 画像が表示されない | URLにログインが必要、リダイレクトされる、またはホスト側がダウンロードをブロックしている | 画像を公開された直接のURLでホスティングし、インポートを再実行する |
| アップロード時にファイルが拒否される | ファイルサイズがサーバーの最大アップロードサイズを超えている | ファイルを分割するか、ホスティング会社に上限の引き上げを依頼する |
| インポートが途中で止まる | サーバーの実行時間またはメモリの上限に達した | ファイルを小さくしてインポートする |
本番のインポート前にダミー商品でテストする
小さなダミーファイルを使えば、マッピングの誤りを、数百件の商品に影響が出る前に見つけられます。ヘッダーが完全に同じになるよう、実際のテンプレートから作成し、すべてのテスト用商品に、後で見つけて削除できるよう、SKUの「TEST-」接頭辞や「test」タグなど、目立つ目印を付けておきます。
簡単なケースだけでなく、実際のファイルに含まれるすべてのケースを網羅してください。通常は10行程度で十分です。
- 使用する予定の列をすべて入力した、単一商品1件。
- 2つの属性と3つ以上のバリエーションを持つ可変商品1件。
- 複数枚の画像を持つギャラリー付きの商品1件と、画像のない商品1件。
- まだ存在しない、階層構造のカテゴリーに属する商品1件。
- アクセント付き文字、引用符、説明文中のカンマを含む商品1件。
- SKUで既存商品を更新する行1件。
- 管理画面とストアの表側で、価格、バリエーションのドロップダウン、画像の順序、カテゴリーページを確認してから、本番のインポートの前にテスト用商品を削除します。
よくある質問
- WooCommerceには標準の商品一括登録機能がありますか?
- はい。WooCommerceには、「商品」→「商品一覧」→「インポート」から使える商品CSVインポーターと、対応するエクスポーターが備わっています。標準的なCSVインポートにプラグインは不要です。
- WooCommerceに一度にインポートできる商品数はどれくらいですか?
- インポーターに固定の商品数の上限はありませんが、ホスティング環境のサーバーのタイムアウトやメモリ制限によって、現実的な数が決まります。大規模なカタログは数百行ずつのバッチに分割するのが一般的な対処法です。
- CSVインポートで既存の商品を更新できますか?
- はい。インポーターで「Update existing products」を有効にすると、IDまたはSKUで既存の商品と照合され、CSVに含めた列だけが更新されます。
- PDFから直接WooCommerceに商品をインポートできますか?
- 標準のインポーターはCSVを前提としているため、直接はできません。まず、手作業または抽出ツールでPDFから商品データを抽出し、そのうえでCSVでインポートするか、REST APIで商品を作成する必要があります。
- WooCommerceの商品CSVに必要な列は何ですか?
- 標準のインポーターで必須なのはNameのみです。実用的なカタログにするには、少なくともType、SKU、Published、Regular price、Categories、Images、Descriptionを含めてください。お使いのバージョンが想定する正確なヘッダー名は、ストアから商品を1件エクスポートすると分かります。
- CSVで可変商品をインポートするにはどうすればよいですか?
- すべての属性値を列挙した、Typeが「variable」の親行を1行追加します。続いて、バリエーションごとに、Typeを「variation」とし、Parent列に親商品のSKU、属性値を1つ、そして固有のSKUと価格を指定した行を追加します。
- CSVインポーターで商品画像とalt属性もインポートできますか?
- 画像は可能です。Images列に、公開されている画像URLをカンマ区切りで記載し、アイキャッチ画像を先頭にします。alt属性はできません。標準のインポーターでは設定できないため、後から追加するか、REST APIまたは拡張機能を使ってください。
- WooCommerce REST APIの1回のリクエストで、何件の商品を作成できますか?
- バッチエンドポイントは、既定で1回のリクエストにつき最大100オブジェクトを受け付けます。作成、更新、削除は合算してカウントされます。それより大きなカタログは、一連のバッチリクエストに分けて送信します。