AIは商品一覧API、検索窓、並び替えボタンを素早く作ることができる。しかし、どの商品を見せ、どの商品を隠し、何を「おすすめ」と呼ぶのかはコードではなく運用ポリシーである。ショッピングモール検索は単純な照会機能ではなく、売り場配置、広告枠、在庫処理、顧客体験、データ収集が一か所に結合された意思決定システムだ。
ポリシーを与えないまま「商品検索機能を作って」とだけ指示すると、AIは最新登録順、商品名の部分一致、単純なページネーションのような慣れた例を任意に埋めることがある。コードは動いても、店舗運営には合わない場合がある。新着商品が品切れなのに最上段に表示され、販売終了商品がカートに入り、顧客が「りんご」と検索しても「青松ふじ」を見つけられない問題が代表的だ。
検索順位は技術機能ではなく運用ポリシーである
商品の陳列順は事業者が設計できる。ただし、画面が消費者に伝える意味と実際の順位算定方式が食い違ったり、経済的利害関係のある露出を一般的なおすすめのように見せたりすると、法的・信頼上のリスクが大きくなる。
公正取引委員会は2024年6月、クーパンとCPLBの検索順位運営および役職員による購入レビュー作成などを問題視し、暫定1,400億ウォンの課徴金を発表した。同年8月の議決書基準では課徴金は1,628億ウォンと定められた。事業者側は処分に不服を申し立てており、2026年4月の報道基準で関連取消訴訟は継続中だった。この事例の実務的な教訓は、「自社商品優遇は常に違法」という単純な命題ではない。おすすめという表示が何を意味するのか、広告・自社の利害関係を明確に示したのか、順位変更をデータと文書で説明できるのかを設計段階で検討すべきだという点である。
法律の適用はサービス構造と表示方法によって変わり得るため、実際のリリース前には関連法令と最新の執行事例を別途確認するのが安全だ。
一行プロンプトが作る「即席版」の失敗ポイント
| 未確定のポリシー | AIが任意に埋め得る実装 | 実際の運用リスク |
|---|---|---|
| 基本並び替え | created_at DESC |
最近登録した品切れ・検収前の商品が上位に露出 |
| 販売状態 | 削除有無だけ確認 | 販売停止・リコール商品が検索されたり注文可能になったりする |
| 一覧読み込み | 全件取得または単純な無限スクロール | 応答が遅い、戻る時に位置を失う、比較が難しい |
| 検索範囲 | 商品名だけ部分一致 | ブランド・品種・モデル名・同義語検索に失敗 |
| 結果なし | 空配列だけ返す | 購入意欲の高い顧客がすぐ離脱 |
| ログ | 検索語と会員・IPをそのまま保存 | 目的外収集、過度な保管、敏感な検索語の露出リスク |
AIは要件の空欄を埋めることはできるが、その選択が店舗の戦略と法的責任に合っているかは判断できない。したがって実装前に、少なくとも次の5つのポリシーを文書で確定しなければならない。
1. 並び替えの基本値:何を「おすすめ順」と呼ぶのか
基本の並び替えは顧客が最初に見る陳列棚だ。多くのユーザーは並び替えオプションを変更しないため、基本値は売上、在庫消化、新商品の育成、顧客満足度に直接影響する。
まず順位算定段階を分離する
検索結果は一度に混ぜて計算するより、次の順序に分けるのが安全だ。
- 露出資格判定: 販売可能、公開可能、法的・運用上のブロック対象ではない商品のみ候補に含める。
- 検索関連度計算: 商品名、ブランド、カテゴリ、属性、同義語が検索語とどれほど合うかを計算する。
- オーガニック順位計算: 販売速度、コンバージョン率、評価の信頼度、配送品質のようなシグナルを組み合わせる。
- ビジネスルール適用: 品切れ減点、新商品の探索機会、多様性制限などを適用する。
- 広告スロット結合: 広告商品はオーガニック順位と分離して挿入し、明確に表示する。
-
安定した同点処理: 同じスコアの場合、
product_idのような固定キーで順序を決める。
おすすめスコアは文書化された公式でなければならない
次は構造を説明するための例にすぎず、すべてのショッピングモールに合う正解ではない。
organic_score =
0.45 × query_relevance
+ 0.20 × conversion_rate_28d
+ 0.15 × sales_velocity_14d
+ 0.10 × rating_confidence
+ 0.10 × fulfillment_quality
各シグナルは同じ範囲に正規化し、期間と集計対象を明示しなければならない。単純平均の星評価は、レビュー1件の5点商品をレビュー1,000件の4.8点商品より高くしてしまう可能性があるため、レビュー数をともに反映した補正スコアを使うほうがよい。販売量だけを使うと、長く売れている商品が恒久的に有利になり得るため、直近期間の販売速度とコンバージョン率を一緒に見る。
必ず決めるべき詳細項目
- おすすめ順の目標が検索適合度、購入可能性、顧客満足、在庫効率のうち何なのか
- 各シグナルの集計期間と更新周期
- キャンセル率、返品率、配送遅延、品切れ可能性のような減点シグナル
- レビューが少ない新商品に与える探索機会と最大加点
- 同一ブランドや同一販売者が上位を過度に占有しないようにする多様性ルール
- スコア同点時に使用する固定並び替えキー
- 順位公式のバージョン、変更理由、適用時刻、承認者を残す監査記録
- A/Bテストの成功指標と中止条件
広告とオーガニックおすすめを混ぜない
広告費、自社商品かどうか、高いマージンのような経済的利害関係を反映することはできるが、これを一般的な「人気順」や「おすすめ順」と誤認させると危険だ。公正取引委員会は2025年、高額商品販売プラットフォーム事件でも、有料オプションを購入した販売者の商品が基本並び替えで優先露出される構造と関連表示を問題視した。広告商品は別の候補群とスロットで管理し、カード単位で識別可能な「広告」または「スポンサー」表示を提供するのが基本だ。管理者画面には広告露出ルールとオーガニック順位公式を分離して見せるべきだ。
2. 異常状態の商品:品切れと販売停止は別の状態である
is_sold_out一つですべての例外を処理すると、検索、詳細、カート、注文検証が互いに食い違う。少なくとも販売状態、在庫状態、公開状態、規制状態を分離しなければならない。
推奨状態モデル
| 状態 | 検索・一覧 | 直接URL詳細 | カート・注文 | 推奨処理 |
|---|---|---|---|---|
| 販売中・在庫あり | 正常露出 | 正常表示 | 可能 | 基本候補 |
| 販売中・一時品切れ | 表示可能だが減点または後順位 | 品切れ・再入荷通知を表示 | 不可 | 再入荷可能性を保持 |
| 一時販売停止 | 基本的に非表示 | 一時停止案内 | 不可 | 再開時に復元 |
| 販売終了 | 検索・カテゴリから非表示 | 終了案内と代替商品 | 不可 | 既存リンクとCS文脈を保持 |
| 下書き・検収中 | 完全非表示 | 権限のある管理者のみ | 不可 | 公開前検収 |
| リコール・法的ブロック | 完全非表示 | 必要時に安全告知 | 不可 | 代替おすすめより安全案内を優先 |
品切れ商品は再入荷通知と検索需要把握に価値があるため、無条件に削除する必要はない。一方、販売終了商品は一般一覧から除外しつつ、既存のブックマークや外部リンクから入ってきた顧客に「販売が終了しました」という説明と類似商品を提供できる。詳細URLを維持するか410 Goneで終了するかは、検索流入、法的告知の必要性、代替コンテンツの価値によって決める。
検索インデックスは注文可能可否の最終権限ではない
検索インデックスには同期遅延が生じ得る。したがって検索結果で在庫があるように見えても、次の段階で再度検証しなければならない。
- カート投入時に販売状態と在庫を再検証
- 注文書進入時に価格、割引、在庫を再検証
- 決済直前に在庫予約または原子的減算
- 販売停止イベント発生時に検索インデックスから緊急削除
- インデックス遅延時間と失敗件数をモニタリング
このルールがないと、検索画面は正常なのに決済段階でだけ失敗するCS事故が繰り返される。
3. 一覧露出方式:ページネーション、もっと見る、無限スクロールのどれを使うのか
商品が数千・数万個あるなら、一度にすべて送ってはいけない。ただし「ショッピングモールは常に数字ページが正解」と断定するのも正確ではない。比較中心の検索では位置と状態の復元が重要で、カテゴリ探索では「もっと見る」が便利な場合がある。
| 方式 | 強み | 弱み | 合う状況 |
|---|---|---|---|
| 数字ページネーション | 現在位置と結果規模を理解しやすい、特定ページへの再訪問が可能 | ページ遷移が途切れ、ページ間比較が煩雑 | デスクトップ検索、深い探索、共有可能な結果 |
| もっと見る | 既存商品を維持したままユーザーが読み込みを制御 | 結果が非常に多いとDOMとメモリが大きくなる | モバイル・カテゴリ探索、中規模結果 |
| 無限スクロール | 連続探索が自然 | 位置・終端・全体規模が不明確で戻る時の復元が難しい | 比較より発見が重要なフィード型画面 |
実務的には、検索結果にはページネーションまたは「もっと見る + 復元可能なページURL」、発見型おすすめフィードには無限スクロールを優先検討できる。純粋な無限スクロールを使う場合でも、次の条件を満たす必要がある。
- 検索語、並び替え、フィルター、ページまたはカーソルをURLや復元可能な状態に保存
- 詳細ページから戻った時に以前の商品とスクロール位置を復元
- キーボード探索、スクリーンリーダー、フォーカス移動をサポート
- フッターと主要ナビゲーションリンクにアクセス可能な代替手段を提供
- 読み込み失敗と再試行UIを提供
- 各結果群にアクセス可能な固有URLまたはリンク構造を用意
オフセットとカーソルページネーション
OFFSET 5000 LIMIT 40のような深いオフセットは、データが多く更新が頻繁なほど遅くなり、重複・欠落が生じやすい。浅いページと管理者画面ではオフセットが単純だが、大規模検索には最後の結果の並び替えキーを渡すカーソル方式が安定的だ。
ORDER BY score DESC, product_id DESC
cursor = last_score + last_product_id
スコアだけをカーソルに使うと同点商品が抜ける可能性があるため、固有キーを一緒に使用する。おすすめスコアがリアルタイムで頻繁に変わるなら、検索セッション中はスナップショットバージョンやランキング基準時刻を固定するポリシーも必要だ。
4. 検索範囲と結果なし画面:顧客の表現を商品データにつなぐ
顧客は運営者が登録した正確な商品名を知らない。「りんご」を探す顧客に「青松ふじ」、「紅露」、「家庭用りんご」を見せるには、商品データと検索辞書を一緒に設計しなければならない。
検索フィールドの優先順位
| フィールド | 推奨優先順位 | 例 |
|---|---|---|
| SKU・モデル名・バーコード | 非常に高い |
SM-S928N, 880...
|
| 商品名 | 高い | 青松ふじりんご 3kg |
| ブランド・メーカー | 高い | Samsung, Apple |
| カテゴリ・商品タイプ | 中以上 | 果物、ランニングシューズ |
| 主要属性 | 中以上 | 容量、色、規格、互換機種 |
| 同義語・別称・品種・タグ | 中以上 | ジョギングシューズ↔ランニングシューズ、りんご↔ふじ |
| 詳細説明 | 低い | 長い説明のノイズを減らすため低い重み |
| レビュー本文 | 選択的 | 品質・スパム・個人情報の検討後、限定的に使用 |
韓国語検索では、分かち書きの違い、字母分離、英語・ハングルのブランド表記、数字と単位、複合名詞も考慮しなければならない。たとえば「에어팟프로2」、「에어팟 프로 2」、「AirPods Pro 2」が同じ商品群につながるように正規化ルールを置く。
推奨検索パイプライン
- 入力長と許容文字を検証する。
- 大文字小文字、空白、特殊文字、単位を正規化する。
- 商品コードとの完全一致を先に確認する。
- トークン化と形態・綴りの変形を適用する。
- 運営者が管理する同義語とカテゴリ辞書を拡張する。
- テキスト検索で候補を探す。
- 必要なら意味検索を補助候補生成に使う。
- 販売・公開・規制状態をフィルタリングする。
- オーガニックスコアを計算し、広告を別途結合する。
- 結果と診断情報を返す。
生成AIやベクトル検索を導入する場合でも、SKU、ブランド、モデル名のような完全一致を弱めてはいけない。ショッピング検索では、正確検索 + テキスト関連度 + 選択的な意味検索を組み合わせたハイブリッド方式が一般的に安全だ。AIがカタログにない商品、価格、在庫を作り上げて話さないように、すべての応答を実際の商品IDと現在データにつなぐ必要がある。
結果なし画面は第二の陳列棚である
検索結果がない時、空画面だけを見せてはいけない。ただし、関連のない人気商品を検索結果であるかのように混ぜてもいけない。
推奨構成は次のとおりだ。
- ユーザーが入力した検索語をそのまま見せ、一致商品がないことを明確に案内
- 誤字修正候補と同義語提案
- フィルターによって0件になった場合、削除可能なフィルターを案内
- 範囲を広げた結果を別ラベルで提示
- 関連カテゴリ、代替商品、全体人気商品を区分して露出
- 再入荷・入店リクエストまたはカスタマーセンターへの接続
- 結果のない検索イベントを管理者分析に記録
「結果なし」と「フィルター適用後なし」は別の問題だ。元の候補はあったが価格・色フィルターで0件になった場合はフィルター緩和が最も有用で、カタログ自体に商品がないなら調達データとして活用すべきだ。