テクニック

Shopify商品CSVインポート一括登録の手順|列の意味とエラー対処

この記事の対象: Shopifyで商品を大量に登録する担当者、EC構築・リニューアルを検討している事業者
読了時間: 約12分

商品が10点なら管理画面で手入力すれば済みます。これが300点になると話が変わります。1点あたり3分でも15時間、しかも途中で規則が揺れて、あとから「この商品だけタグの付け方が違う」という手直しが発生します。

ShopifyにはCSVで商品を一括登録する仕組みが標準で用意されていて、追加料金もアプリも要りません。ただしテンプレートの列が50以上あり、しかも「空欄にする列」と「必ず埋める列」と「1行目だけ埋める列」が混在しています。ここを理解しないまま流すと、バリエーションが消えたり、画像が1枚しか付かなかったりします。

この記事では、列の意味・バリエーションの書き方・画像の指定方法を整理したうえで、実際によく出るエラーを原因ごとに潰していきます。


Shopify商品CSVインポートの全体像

まずテンプレートを手に入れる

ゼロからCSVを書き起こすのは得策ではありません。列名が1文字でも違うとShopifyは無視するか弾くため、既存の形式をそのまま使うのが安全です。

手に入れ方は2通りあります。

方法 手順 向いている場面
ストアからエクスポート 管理画面 → 商品管理 → エクスポート → 「すべての商品」 既に数点でも商品がある。推奨
Shopify公式のサンプルCSV ヘルプセンターからダウンロード 完全な新規ストアで商品が1点もない

ストアが空でも、まずダミー商品を1点だけ手入力で作り、バリエーションと画像も付けた状態でエクスポートするやり方をおすすめします。自分のストアの実データが入った見本が手に入るので、列の意味が一目でわかります。作り終えたらダミーは削除すれば済みます。

作業の流れ

CSVインポートの標準的な進め方
見本を出すダミー1点を作ってエクスポート
3件で試す本番ストアに少数だけ流して確認
全件を流す問題なければ残りをインポート
差分を確認件数・バリエーション数・画像を照合

いきなり300件を流さないこと。3件のテストインポートを挟むだけで、致命的な手戻りはほぼ防げます。300件流したあとに「Optionの書き方が間違っていた」と気づくと、300件の削除からやり直しになります。

文字コードはUTF-8で固定

日本語の商品名が「譁�ュ怜喧縺�」のように化ける事故は、ほぼこれが原因です。ShopifyはUTF-8しか受け付けません。

Excelで編集すると、保存時にShift_JISになることがあります。対策は次のいずれかです。

  • Excelで「CSV UTF-8(コンマ区切り)」を明示的に選んで保存する
  • Googleスプレッドシートで編集し、ダウンロード → 「カンマ区切り形式(.csv)」で書き出す
  • テキストエディタ(VS Codeなど)で開き、エンコーディングをUTF-8にして保存する

実務ではGoogleスプレッドシート経由が一番事故りません。UTF-8以外で書き出す選択肢がそもそも無いためです。複数人で同時に触れるのも利点で、商品説明文だけ別の担当者に書いてもらう、といった分担がしやすくなります。


CSVテンプレートの列の意味

列は多いのですが、役割で分けると4グループしかありません。

商品CSVの列を役割で分けた4グループ

商品そのものの情報(1商品につき1回だけ書く)

  • Handle / Title / Body (HTML)
  • Vendor / Type / Tags
  • Published / SEO列

バリエーションの情報(行ごとに書く)

  • Option1〜3 Name / Value
  • Variant SKU / Price / 在庫
  • Variant Weight / 課税設定

画像の情報

  • Image Src / Position / Alt Text
  • Variant Image

配送・関税・メタ情報

  • HSコード / 原産国
  • Google Shopping系

このうち手が止まりやすいのは上2つの境目です。「1商品につき1回だけ書く列」と「行ごとに書く列」を混ぜると、バリエーションが別商品として登録されます。

Handle — すべての鍵になる列

Handleは商品を識別するIDであり、同時にURLの一部になります。

https://example.com/products/cotton-tshirt
                              ↑ ここがHandle

ルールは3つです。

  • 半角英数字とハイフンのみ。スペース・全角・記号は使わない
  • ストア内で一意。同じHandleは同じ商品を指す
  • 同じHandleの行が複数あれば、それは1つの商品のバリエーションとして扱われる

3つ目が最重要です。Shopifyは「Handleが同じ連続した行」を1商品とみなします。逆に言えば、バリエーションを分けたつもりでHandleを変えてしまうと、色違いが全部別商品になります。

日本語の商品名をそのままHandleにすると、Shopify側でURLエンコードされて %E3%82%B7%E3%83%A3... のような読めないURLになります。SEO面でもシェア時の見た目でも損なので、Handleは必ず英数字で設計してください。ローマ字でも英訳でも構いませんが、ルールを決めて全商品で統一します。

商品名 良いHandle 避けたいHandle
コットンTシャツ(白) cotton-tshirt コットンTシャツ
有田焼マグカップ arita-mug ARITA_MUG_01
定期便 3ヶ月コース subscription-3months sub 3months

商品情報の列

列名 内容 補足
Title 商品名 1商品の最初の行だけ埋める
Body (HTML) 商品説明 HTMLタグが使える。セル内改行は<br>推奨
Vendor メーカー・ブランド名 絞り込みの軸に使える
Product Category Shopify標準の商品カテゴリ 税計算や広告連携で効く
Type 商品タイプ 自由入力。自社分類に使う
Tags タグ カンマ区切り。セル全体をダブルクォートで囲む
Published 公開する/しない TRUE / FALSE

Tagsは事故が多い列です。CSVはカンマで列を区切るので、"新作,春夏,メンズ" のようにセル全体を " で囲まないと、タグの数だけ列がずれます。スプレッドシートで編集していれば書き出し時に自動で囲まれますが、テキストエディタで直接書くときは要注意です。

タグの設計はあとから直すのが面倒なので、インポート前に決め切ってください。表記ゆれ(メンズ と men's と Men)が混ざると、コレクションの自動条件が効かなくなります。 一覧表を作って、そこに無いタグは使わない運用にするのが確実です。

Body (HTML) にどこまで書くか

Body (HTML) にはHTMLが書けますが、CSVにゴリゴリのHTMLを詰め込むのは避けたほうがいいというのが実装側の感覚です。理由は3つあります。

  1. CSVのセル内にタグが入ると、ダブルクォートのエスケープ("")が絡んで壊れやすい
  2. 商品ごとにHTML構造が微妙にずれ、デザインが揃わなくなる
  3. 更新するたびにCSVを触ることになり、管理画面から直せない

装飾が必要なら、テーマ側でproduct descriptionを整形するか、メタフィールドに分けて構造化するほうが後が楽です。CSVに入れるのはプレーンなテキストと最低限の <p> <br> <ul> くらいに留め、レイアウトはテーマが持つ。この分担にしておくと、商品が増えても崩れません。

Dawnベースでどこまでテーマ側に寄せるかの考え方は、こちらの記事で整理しています。


バリエーション(サイズ・色)の書き方

ここがCSVインポートで一番つまずくところです。

基本の形

サイズ3種 × 色2種=6バリエーションのTシャツを登録するとします。6行必要です。そして、商品情報の列を埋めるのは1行目だけです。

Handle Title Option1 Name Option1 Value Option2 Name Option2 Value Variant SKU Variant Price
cotton-tshirt コットンTシャツ サイズ S カラー ホワイト TS-S-WH 3800
cotton-tshirt (空) サイズ M カラー ホワイト TS-M-WH 3800
cotton-tshirt (空) サイズ L カラー ホワイト TS-L-WH 3800
cotton-tshirt (空) サイズ S カラー ブラック TS-S-BK 3800
cotton-tshirt (空) サイズ M カラー ブラック TS-M-BK 3800
cotton-tshirt (空) サイズ L カラー ブラック TS-L-BK 3800

押さえるポイントは4つです。

  • Handleは全行で同じ。ここが違うと別商品になる
  • Titleは1行目だけ。2行目以降に書くと不整合の原因になる
  • Option Nameは全行に書く。Valueだけでなく、Nameも各行に必要
  • 行は連続させる。他の商品の行を間に挟まない

「Option1 Name」を1行目にしか書かずに流して、2行目以降のバリエーションが無視される——これが最頻出のミスです。

オプションは3つまで

Shopifyの商品オプションはOption1〜Option3の3つが上限です。オプションの追加仕様は今後アップデートされる可能性があるため、正確な上限は自分のストアの実際のエクスポート結果で列数を確認してください。

「サイズ × 色 × 素材 × 長さ」のように4軸必要になったら、設計を疑ってください。バリエーションの数は掛け算で増えるので、4軸だと在庫管理も画面の選択UIも破綻します。取りうる手は2つです。

オプションが3軸を超えるときの2つの選択肢

商品を分ける(推奨)

  • 素材ごとに別商品にする
  • URLが分かれてSEO上有利
  • 在庫と画像の管理が単純
  • コレクションでまとめて見せられる

アプリで拡張する

  • オプション追加アプリを入れる
  • 月額が積み上がる
  • 在庫連動が弱いものがある
  • 解約時にデータの扱いを要確認

図の左側を推している理由は、商品を分けたほうが後の運用が軽いからです。アプリで軸を足すと登録は楽になりますが、在庫・注文明細・レポートの各所でバリエーションとして扱われず、出荷やCS対応で手間が増えることがあります。

そもそもアプリで足すべきかテーマ改修で解くべきかの線引きは、こちらで詳しく書いています。

在庫と価格の列

列名 書き方 注意点
Variant SKU 自社の管理コード 空でも登録できるが、必ず入れる。後の照合が別物になる
Variant Price 数値のみ 3,800 や ¥3800 はNG。カンマも通貨記号も入れない
Variant Compare At Price 定価(打ち消し価格) セール表示用。不要なら空
Variant Inventory Tracker shopify または空 在庫を追跡するなら shopify
Variant Inventory Qty 在庫数 ロケーションが複数あると扱いが変わる
Variant Inventory Policy deny / continue 在庫0で売るかどうか
Variant Requires Shipping TRUE / FALSE デジタル商品は FALSE
Variant Taxable TRUE / FALSE 課税対象か
Variant Weight Unit g / kg など 送料計算に使うなら必須

SKUは空でも通るからこそ、空のまま流してしまいがちです。 あとからPOSや在庫システムと繋ぐ、外部サービスへ商品データを渡す、といった場面でSKUが無いと照合のキーが無くなります。全商品を手作業で開き直すことになるので、最初から入れてください。

重量は、送料を重量ベースで出す設計なら必須です。送料の組み方そのものは配送プロファイルの設計に関わるので、こちらを合わせて確認してください。

価格を入れるときは、消費税を内税で持つか外税で持つかを先に決めておく必要があります。あとから切り替えると表示価格が全商品でずれるためです。→ Shopifyの消費税設定|内税・外税の切り替えと総額表示の手順


画像の指定方法

画像はCSVの中で最も誤解が多い部分です。CSVに画像ファイルそのものは含められません。 指定できるのは「公開されているURL」だけです。

Image Src には公開URLを書く

Image Src: https://cdn.example.com/products/tshirt-white-01.jpg

Shopifyはインポート時にこのURLへアクセスして画像を取得し、自社CDNにコピーします。つまりインポートの瞬間だけ画像が公開されていればいいということです。取り込み後は元のURLが消えても、商品画像は残ります。

ではどこに置くか。実務での置き場は主に3つです。

置き場 使い勝手 注意点
Shopifyのファイル(設定→ファイル) 一番安全。同じストア内で完結 先に全画像をアップロードしてURLを控える手間がある
自社サーバー / 既存サイト URLが自由に組める インポート中は落とさない
クラウドストレージ 手軽 直リンクが取れない共有URLだと失敗する。 要事前確認

Googleドライブなどの共有リンクは、そのまま貼っても画像として取得できないことが多いです(HTMLのプレビューページを返すため)。事前にブラウザのシークレットウィンドウでURLを開き、画像そのものが表示されるかを確認してください。ここを確認せずに流すと、画像が全部空になります。

1商品に複数画像を付ける

Handleと同じ考え方です。画像の枚数だけ行を足します。

Handle Title Option1 Value Image Src Image Position Variant Image
cotton-tshirt コットンTシャツ S …/white-01.jpg 1 …/white-01.jpg
cotton-tshirt (空) M …/white-02.jpg 2 …/white-01.jpg
cotton-tshirt (空) L …/black-01.jpg 3 …/black-01.jpg
cotton-tshirt (空) (空) …/detail-01.jpg 4 (空)
  • Image Src … 商品ギャラリーに並ぶ画像。行ごとに1枚
  • Image Position … ギャラリー内の並び順。1が最初
  • Variant Image … そのバリエーションを選んだときに表示される画像

Image Src と Variant Image は別の列で、役割が違います。ホワイトを選んだら白い写真に切り替わってほしいなら、ホワイトの全バリエーション行のVariant Imageに同じ白画像のURLを入れます。

バリエーション数より画像枚数が多い場合は、4行目のようにOption Valueが空の行を足して画像だけ書きます。この行はバリエーションとしては登録されず、画像だけが商品に紐づきます。

Image Alt Text は必ず埋める

Alt Textはアクセシビリティ上も検索上も効く要素ですが、管理画面から1枚ずつ入れるのは現実的ではありません。商品点数と画像枚数が増えるほど、この作業量は膨らみます。

CSVで一括投入できる数少ないタイミングがここです。スプレッドシート上なら、商品名と色を組み合わせる数式で機械的に埋められます。

=A2 & " " & D2 & " 正面"
→ 「コットンTシャツ ホワイト 正面」

完璧な説明文である必要はありません。「画像に何が写っているか」が伝われば十分です。空欄のまま公開して、あとから直そうとした案件は、だいたい直されないまま残ります。


よく出るエラーと原因

インポート実行後、Shopifyは結果をメールで送ってきます。「◯件成功、◯件失敗」という形式で、失敗した行の理由も出ます。このメールを読まずに管理画面だけ見て「登録できた」と判断しないでください。部分的に成功して部分的に失敗している、が一番厄介な状態です。

エラー一覧と対処

症状 原因 対処
商品名が文字化けする 文字コードがShift_JIS UTF-8で保存し直す
バリエーションが別商品になった Handleが行ごとに違う Handleを全行で統一
バリエーションが1つしか登録されない Option1 Nameが1行目にしかない 全行にNameを書く
画像が付かない URLが公開されていない/直リンクでない シークレットウィンドウでURL確認
価格が0になる ¥ やカンマが混入 数値のみにする
タグが変な位置に入る カンマ区切りセルが囲まれていない セル全体を " で囲む
列が認識されない 列名のスペル違い・余分な空白 エクスポートした見本と1文字ずつ照合
「Handleが必要です」 Handle列が空の行がある 空行を削除、またはHandleを入れる
既存商品が上書きされた 同じHandleが既存商品と衝突 仕様。意図しないなら別Handleに
途中で止まる ファイルが大きすぎる 分割する(目安1,000行程度ずつ)

「上書き」の挙動を理解しておく

CSVインポートには上書きモードがあります。インポート画面で「同じハンドルを持つ既存の商品を上書きする」にチェックを入れると、既存商品がCSVの内容で置き換わります。

これは便利ですが、危険な列がいくつかあります。

  • Published … 空にすると公開状態が変わる可能性がある
  • Variant Inventory Qty … 在庫数が上書きされる。運用中のストアでは致命的
  • Tags … CSVにある内容で置換される(追記ではない)
  • Image Src … 既存画像との差し替え挙動を必ずテストしてから

価格改定のためにCSVを流したら在庫が全部リセットされた、というのは実際に起こり得ます。運用中のストアで上書きモードを使うときは、変更したい列以外の値が正しく入っているかを確認したうえで、まず1商品だけで試してください。

実行前チェックリスト

インポート実行前に必ず見る5項目
文字コードUTF-8で保存されているか
Handle全行が英数字・バリエーションは統一
価格記号とカンマが混ざっていないか
画像URLシークレットで開いて表示されるか
3件テスト少数で流して結果を目視

この5つを通しておけば、大きな事故はまず起きません。特に最後の「3件テスト」は、他の4つを全部カバーする保険になります。


制作側から見た、CSV運用の設計論点

ここからは、実装・運用する側の判断の話です。

CSVで持つべきか、テーマ・メタフィールドで持つべきか

商品に紐づく情報を全部CSVに詰め込みたくなりますが、CSVは「初期投入と一括更新の道具」であって、恒常的なデータの置き場ではありません。

分けて考える基準はこうです。

情報の性質 置き場
商品名・価格・在庫・SKU CSV(標準の列)
産地・素材・サイズ表・使用上の注意など、商品ごとに決まった項目 メタフィールド
「おすすめ」「送料無料対象」など、条件で変わる分類 タグ+自動コレクション
表示レイアウト・装飾 テーマ(Liquid)

メタフィールドで持つと、テーマ側で「素材がある商品だけ素材欄を出す」といった制御ができます。Body (HTML) に全部書き込む方式だと、この制御が一切効きません。商品点数が多いストアほど、メタフィールドへの切り分けが効いてきます。

メタフィールドもCSVで一括投入できます(エクスポートすると Metafield: で始まる列として出てきます)。ただし定義を先に作っておく必要があるので、商品投入の前にメタフィールド設計を済ませておく順番になります。

更新フローを誰が回すか

構築フェーズでCSVを使うのは当然として、公開後に誰がどう更新するかを決めておかないと、結局管理画面で1点ずつ触る運用に戻ります。

現実的な分岐はこうなります。

  • 商品の入れ替えが年数回 → 管理画面で十分。CSVは初期投入だけ
  • 月次で数十点の追加・価格改定がある → CSVのマスタをスプレッドシートで持ち、そこから書き出して流す運用に固める
  • 毎日在庫が動く / 基幹システムがある → CSVではなくAPI連携か、在庫同期アプリを検討する

真ん中のケースで効くのが、スプレッドシート上に「マスタ」を1枚置いて、そこを正とするやり方です。Handle・SKU・タグの命名規則をシートの入力規則で縛っておけば、担当者が変わっても表記ゆれが起きません。列の順番はエクスポート結果に合わせておき、そのまま書き出せる状態にしておきます。

自社でShopifyストアを運用していても、この「正がどこにあるか」を決めていないストアは早晩崩れます。管理画面で直した内容とスプレッドシートの内容がずれると、次にCSVを流したときに古い値で上書きされるためです。上書きモードを使う運用にするなら、マスタを正にすると決め切ること。

アプリに頼る前にCSVで足りないか確認する

商品登録まわりには一括編集系のアプリが多数あり、無料枠のあるものから有料プランまで幅があります(料金は各アプリのページで確認してください)。

ただ、標準のCSVインポート/エクスポートで済む作業にアプリを入れると、月額が積み上がるだけになります。 判断の目安は次のとおりです。

  • CSVで足りる … 初期投入、月1回程度の一括更新、価格の一斉改定、タグの付け替え
  • アプリを検討する … 日次の在庫同期、外部システムとのリアルタイム連携、非エンジニアが頻繁に一括編集する

3つ目が実は重要です。CSVの運用は「スプレッドシートを扱える人」が前提になります。その人が社内にいない、あるいは辞めたら止まる、という状態なら、管理画面で完結する一括編集アプリのほうが結果的に安くつくこともあります。ツールの月額だけでなく、操作する人の負担まで含めて比較してください。

アプリの積み上がりをどう管理するかは、こちらに詳しくまとめています。

コーポレートサイトと兼用する場合の注意

ShopifyをECだけでなく会社のコーポレートサイトとしても使う構成を採る場合、商品CSVの設計に一点だけ追加の考慮が要ります。商品でないもの(サービス紹介、事例など)を商品として登録しないことです。

一見すると「商品」の枠は便利な入れ物に見えます。画像もテキストも入るし、一覧ページも自動で作られます。しかし商品として登録すると、カートに入る・在庫概念がつく・サイトマップに商品として出る、といった副作用がついてきます。事例紹介やサービスページは、ページかブログ記事、あるいはメタオブジェクトで持つのが筋です。ECとコーポレートを1つのShopifyで兼ねる場合の構成の考え方は、Shopifyをコーポレートサイトと兼用する考え方の記事で全体像を整理しているので、そちらを先に読んでおくと迷いません。


よくある質問

Shopifyの商品CSVインポートは何件まで一度に流せますか

ファイルサイズと行数の両方に上限があり、大きすぎると途中で止まります。実務では1,000行程度ずつに分割するのが安全です。1商品が6バリエーション×4画像なら、それだけで数十行になるので、商品点数ではなく行数で数えてください。分割してもHandleが同じ行は同じファイル内に収めます。

CSVで登録した商品をあとから一括で修正できますか

できます。管理画面からエクスポートして必要な列だけ書き換え、「同じハンドルを持つ既存の商品を上書きする」にチェックを入れてインポートし直します。ただし在庫数やタグなど上書きで置き換わる列があるため、必ず1商品でテストしてから全件に適用してください。エクスポートした元ファイルはバックアップとして残しておきます。

画像はCSVに直接添付できますか

できません。指定できるのは公開URLのみで、Shopifyがインポート時にそのURLから取得します。Shopifyの「設定→ファイル」に先にアップロードしてURLを取得するのが最も確実です。クラウドストレージの共有リンクは画像そのものを返さない場合があるため、事前にシークレットウィンドウで表示確認をしてください。

バリエーションが別々の商品として登録されてしまいます

Handleが行ごとに違っているのが原因です。同じ商品のバリエーションは、全行でHandleを完全に一致させ、かつ行を連続させる必要があります。加えてOption1 Name(「サイズ」など)は1行目だけでなく全行に書いてください。この2点でほぼ解決します。

SKUは空欄のままでも登録できますか

登録自体は通ります。ただし後から在庫管理システム・POS・外部サービスと連携するときの照合キーが無くなり、全商品を手で埋め直す作業が発生します。最初から入れてください。 命名規則(商品コード-サイズ-色 など)を決めてスプレッドシートの数式で生成すれば、手間はほとんどかかりません。


まとめ

Shopifyの商品CSVインポートは、標準機能だけで大量の商品登録を大きく効率化できる仕組みです。つまずくポイントは限られていて、押さえるべきは次の5つに集約されます。

  1. UTF-8で保存する — 文字化けの原因はほぼこれ
  2. Handleを英数字で統一し、バリエーション行で完全に一致させる — 別商品化を防ぐ最大の要
  3. Option Nameは全行に書く — 1行目だけだとバリエーションが消える
  4. 画像は公開URLで、シークレットウィンドウで表示確認してから流す
  5. 本番の前に3件テストする — 他の4つを全部カバーする保険

そのうえで、構築側の視点としてもう一段あります。CSVは初期投入の道具であって、恒常的なデータの置き場ではないということです。商品ごとの固定項目はメタフィールドへ、条件で変わる分類はタグと自動コレクションへ、装飾はテーマへ振り分ける。この切り分けができていると、商品が増えても運用が重くなりません。

そして最後に、公開後の更新を誰がどう回すかを決めること。CSVマスタを正とするのか、管理画面を正とするのか。ここが曖昧なまま上書きモードを使うと、古い値で本番を潰します。手順そのものより、この設計の合意のほうが後々効いてきます。