{"product_id":"2026-08-19","title":"ShopifyのSearch \u0026 Discoveryで商品ごとに在庫あり・なしを絞り込めるようにする設定例","description":"\u003cp\u003e\u003cspan\u003eSearch \u0026amp; Discoveryの標準「出品状況」フィルターは、バリエーション単位で在庫を見ています。そのため、1つでも欠品しているバリエーションがあれば、その商品は「在庫切れ」の絞り込みに引っかかります。サイズ違いのうちSだけ品切れという商品が「在庫切れ」に並んでしまう、という状態です。\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e理由はURLパラメータに出ています。標準フィルターは \u003ccode\u003efilter.v.availability\u003c\/code\u003e で、\u003ccode\u003efilter.v.\u003c\/code\u003e はバリエーション単位のスコープを意味します。\u003ccode\u003e0\u003c\/code\u003e が在庫切れのバリエーション、\u003ccode\u003e1\u003c\/code\u003e が在庫ありのバリエーションなので、判定される対象は商品ではなくバリエーションです。混在している商品は「在庫あり」と「在庫切れ」の両方にヒットします。\u003c\/p\u003e\n\u003cp\u003e商品単位で「全部売り切れているか」を判定する仕組みは、標準では用意されていません。そこで在庫状況を表す商品メタフィールドを自分で持ち、Shopify Flowで自動更新して \u003ccode\u003efilter.p.\u003c\/code\u003e（商品単位）のフィルターとして使います。全バリエーションが購入できなくなったときだけ「在庫なし」になり、1つでも在庫が戻れば「在庫あり」に戻ります。\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"完成イメージ：在庫状況で商品を絞り込む\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0733\/0381\/8491\/files\/2026-08-19_1_d3b4a31f-d352-4140-a4c0-998bbc0ec166.png?v=1787088780\" class=\"zoomable-image\" style=\"max-width:100%;height:auto;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003eこの構成でやること\u003c\/h3\u003e\n\u003cp\u003e◆在庫状況を表す商品メタフィールドを作る\u003cbr\u003e◆在庫変動を監視するFlowを作り、値を自動で書き換える\u003cbr\u003e◆Search \u0026amp; Discoveryで、そのメタフィールドをソースにした絞り込みを追加する\u003c\/p\u003e\n\u003cp\u003e判定条件をFlow側に置けるので、「全部売り切れたときだけ」以外の基準にも変えられます。表示ラベルも自由に決められるうえ、「入荷待ち」「予約受付中」といった区分を後から足すこともできます。標準フィルターはこのどれもできません。\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003e【設定手順①】在庫状況を表す商品メタフィールドを作る\u003c\/h3\u003e\n\u003cp\u003e◆Shopify管理画面 → 設定 → メタフィールドとメタオブジェクト → 商品 →「定義を追加」\u003cbr\u003e◆名前は「在庫状況」、タイプは「選択リスト（単一行テキスト）」\u003cbr\u003e◆検証の選択肢に「在庫あり」「在庫なし」を登録\u003cbr\u003e◆オプションの「Storefront APIアクセス」をONにする\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"設定手順①：商品メタフィールドの定義\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0733\/0381\/8491\/files\/2026-08-19_2.png?v=1787029314\" class=\"zoomable-image\" style=\"max-width:100%;height:auto;\"\u003e\u003c\/p\u003e\n\u003cp\u003e「Storefront APIアクセス」がOFFのままだと、手順③で絞り込みのソース候補に出てきません。ここだけ忘れやすいので先に確認しておくとよいでしょう。\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003e【設定手順②】在庫変動を監視するFlowを作る\u003c\/h3\u003e\n\u003cp\u003e◆Shopify管理画面 → アプリ → Flow →「ワークフローを作成」\u003cbr\u003e◆トリガーは「商品バリエーションの在庫数が変更された」\u003cbr\u003e◆条件は \u003ccode\u003eproduct \/ variants\u003c\/code\u003e を選び、リスト演算子は「次のすべて」、判定は \u003ccode\u003eavailableForSale\u003c\/code\u003e が False\u003cbr\u003e◆「はい」側に「商品メタフィールドを更新」を置き、在庫状況＝在庫なし\u003cbr\u003e◆「いいえ」側にも同じアクションを置き、在庫状況＝在庫あり\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"設定手順②：Flowの条件と分岐\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0733\/0381\/8491\/files\/2026-08-19_3.png?v=1787029314\" class=\"zoomable-image\" style=\"max-width:100%;height:auto;\"\u003e\u003c\/p\u003e\n\u003cp\u003eリスト演算子には「次のすべて … またはリストが空（非推奨）」という選択肢も残っています。空リストの扱いが違うので、末尾に（非推奨）と付かないほうを選んでください。購入後に表示される \u003ccode\u003e.flow\u003c\/code\u003e ファイルをインポートすれば、このワークフローをそのまま取り込めます。\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003e【設定手順③】Search \u0026amp; Discoveryに絞り込みを追加する\u003c\/h3\u003e\n\u003cp\u003e◆Shopify管理画面 → アプリ → Search \u0026amp; Discovery → 絞り込み →「絞り込みを追加」\u003cbr\u003e◆ソースで「商品メタフィールド: 在庫状況」を選ぶ\u003cbr\u003e◆絞り込みラベルに、ストアフロントで表示したい名前を入れる\u003cbr\u003e◆保存する\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"設定手順③：Search \u0026amp; Discoveryの絞り込み設定\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0733\/0381\/8491\/files\/2026-08-19_4.png?v=1787029314\" class=\"zoomable-image\" style=\"max-width:100%;height:auto;\"\u003e\u003c\/p\u003e\n\u003cp\u003e標準の「出品状況」フィルターは残しておいても構いませんし、紛らわしい場合は外してこちらに寄せることもできます。\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003e在庫の判定に totalInventory を使わない理由\u003c\/h3\u003e\n\u003cp\u003eFlowの条件で \u003ccode\u003eproduct.totalInventory\u003c\/code\u003e を使いたくなりますが、これは在庫追跡がオフのバリエーションを合計に含めません。追跡オフのバリエーションは無制限に購入できるのに、合計には0として寄与します。そのため「合計が0以下なら在庫なし」という条件にすると、まだ買える商品まで「在庫なし」と判定されてしまいます。\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"totalInventoryとavailableForSaleの判定結果の違い\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0733\/0381\/8491\/files\/2026-08-19_5.png?v=1787029314\" class=\"zoomable-image\" style=\"max-width:100%;height:auto;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ccode\u003eavailableForSale\u003c\/code\u003e は、そのバリエーションを今買えるかどうかをShopifyが最終判定した値です。在庫追跡の有無、在庫切れでも販売を続ける設定、在庫数のすべてを織り込んでいるので、これ1つを見れば足ります。\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003e運用時の注意\u003c\/h3\u003e\n\u003cp\u003e◆Flowは在庫が変動した瞬間にしか動きません。既存の商品には値が入らないので、最初に一度まとめて値を入れる作業が必要です\u003cbr\u003e◆該当する商品が0件になった選択肢は、ストアフロントの絞り込みから消えます\u003cbr\u003e◆Search \u0026amp; Discoveryの絞り込みは1ストアあたり25個までです\u003c\/p\u003e","brand":"STORE DOJO","offers":[{"title":"Default Title","offer_id":49190940639483,"sku":null,"price":0.0,"currency_code":"JPY","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0733\/0381\/8491\/files\/2026-08-19-thumb.png?v=1787092298","url":"https:\/\/store-dojo.com\/products\/2026-08-19","provider":"STORE DOJO","version":"1.0","type":"link"}