{"content_id":"rl3zchhyg6","slug":"five-policies-before-ai-ecommerce-search-development","locale":"en","schema_type":"HowTo","category":"how_to","category_name":"How-to","title":"5 Operational Policies to Establish Before Developing an AI-Powered E-Commerce Search Engine","summary":"While AI can quickly generate search code for online stores, the operator must first determine the product display criteria and exception handling. This guide outlines sorting, product status, listing formats, search scope, and logging policies at the practical implementation and testing levels.","author":{"name":"Injoys Editorial Team","url":"https://injoys.com/ko/about"},"key_points":["The default ranking should combine search relevance with sales and quality signals using a documented formula, and ad impressions should be separated from organic rankings.","\"Out of stock,\" \"Temporarily unavailable,\" \"Discontinued,\" and \"Recall\" must be modeled as distinct statuses and handled consistently across search, product details, the shopping cart, and checkout.","For large product lists, you should choose between pagination, \"Load More,\" and infinite scrolling based on your needs, and ensure that URL state and the \"Back\" button functionality are preserved.","In addition to product names, the search scope should include brands, categories, attributes, synonyms, and model names, and the \"No Results\" page should be designed as a separate display section.","Search logs should be used as demand data, but personal identifiers and sensitive search terms should be minimized, and raw data should be stored separately from aggregated data."],"content_markdown":"AI can quickly create product listing APIs, search bars, and sorting buttons. However, **which products to display, which to hide, and what to label as “recommendations”** are determined by operational policies, not code. E-commerce search is not merely a lookup function; it is a decision-making system that integrates shelf placement, ad space allocation, inventory management, customer experience, and data collection all in one place.\n\nIf you simply instruct the AI to “build a product search feature” without providing specific policies, it may arbitrarily fill in familiar examples such as sorting by most recently added, partial product name matches, or simple pagination. Even if the code runs, it may not align with store operations. Typical issues include the latest products appearing at the top even when they’re out of stock, discontinued items being added to shopping carts, and customers failing to find “Cheongsong Busa” apples even when they search for “apples.”\n\n## Search Ranking Is an Operational Policy, Not a Technical Feature\n\nMerchants can design the order in which products are displayed. However, if the meaning conveyed to consumers on the screen does not align with the actual ranking calculation method, or if sponsored listings with economic interests are made to appear like general recommendations, the legal and trust-related risks increase significantly.\n\nIn June 2024, the Korea Fair Trade Commission (KFTC) announced a provisional fine of 140 billion won against Coupang and CPLB for issues related to search ranking operations and the posting of purchase reviews by executives and employees; based on the resolution issued in August of the same year, the fine was set at 162.8 billion won. The companies contested the decision, and as of April 2026, the related lawsuit seeking to overturn the ruling was still pending. The practical lesson from this case is not simply the proposition that “favoring one’s own products is always illegal.” **It is essential to review at the design stage what the “recommendation” label actually means, whether advertising and the company’s vested interests are clearly disclosed, and whether changes in rankings can be explained with data and documentation.**\n\nSince the application of the law can vary depending on the service structure and display methods, it is safest to separately verify relevant laws and the latest enforcement precedents before the actual launch.\n\n## The Pitfalls of a “Quick-and-Dirty Version” Created by a One-Line Prompt\n\n| Undefined Policy | Implementation Where AI Can Fill in Arbitrarily | Actual Operational Risks |\n|---|---|---|\n| Default Sorting | `created_at DESC` | Recently listed out-of-stock or pre-inspection products appear at the top |\n| Sales Status | Checks only whether an item has been deleted | Products that have been discontinued or recalled may appear in search results or be available for order |\n| List Loading | Full retrieval or simple infinite scrolling | Slow response, loss of position when using the back button, difficulty comparing items |\n| Search Scope | Partial match on product name only | Fails to search by brand, variety, model name, or synonyms |\n| No Results | Returns only an empty array | Customers with high purchase intent immediately leave |\n| Logs | Search terms, member IDs, and IP addresses are stored as-is | Risk of data collection beyond intended purposes, excessive retention, and exposure of sensitive search terms |\n\nAI can fill in the gaps in requirements, but it cannot determine whether those choices align with the store’s strategy and legal responsibilities. Therefore, at least the following five policies must be documented and finalized before implementation.\n\n## 1. Default Sorting: What Will Be Considered “Recommended Order”?\n\nThe default sorting order is the display customers see first. Since most users do not change the sorting options, the default setting directly impacts sales, inventory depletion, new product promotion, and customer satisfaction.\n\n### First, Separate the Ranking Calculation Steps\n\nIt is safer to divide search results into the following steps rather than calculating them all at once.\n\n1. **Eligibility Check:** Include only products that are available for sale, publicly viewable, and not subject to legal or operational restrictions.\n2. **Calculate Search Relevance:** Calculate how well the product name, brand, category, attributes, and synonyms match the search query.\n3. **Calculate Organic Ranking:** Combine signals such as sales velocity, conversion rate, rating reliability, and delivery quality.\n4. **Application of Business Rules:** Apply penalties for out-of-stock items, prioritize new product discovery opportunities, and enforce diversity limits.\n5. **Ad Slot Integration:** Insert ad products separately from organic rankings and clearly label them.\n6. **Stable Tie-Breaking:** When scores are tied, order is determined using a fixed key such as `product_id`.\n\n### The recommendation score must be a documented formula\n\nThe following is merely an example to illustrate the structure; it is not a one-size-fits-all solution for every online store.\n\n```text\norganic_score =\n  0.45 × query_relevance\n+ 0.20 × conversion_rate_28d\n+ 0.15 × sales_velocity_14d\n+ 0.10 × rating_confidence\n+ 0.10 × fulfillment_quality\n```\n\nEach signal must be normalized to the same range, and the time period and aggregation scope must be specified. Since a simple average rating could make a product with a single 5-star review appear higher-rated than a product with 1,000 reviews averaging 4.8 stars, it is better to use a weighted score that accounts for the number of reviews. Using only sales volume could give products that have been on the market for a long time a permanent advantage, so we also consider recent sales velocity and conversion rates.\n\n### Essential Details to Define\n\n- Which of the following is the goal of the recommendation ranking: search relevance, purchase likelihood, customer satisfaction, or inventory efficiency\n- The aggregation period and update frequency for each signal\n- Negative signals such as cancellation rates, return rates, shipping delays, and the likelihood of being out of stock\n- The exploration opportunities and maximum bonus points to be granted to new products with few reviews\n- Diversity rules to prevent a single brand or seller from excessively dominating the top of the rankings\n- A fixed sorting key to use in case of tied scores\n- An audit log documenting the version of the ranking formula, reasons for changes, implementation dates, and approvers\n- Success metrics and termination conditions for A/B testing\n\n### Do not mix paid ads with organic recommendations\n\nWhile it is acceptable to reflect economic interests—such as advertising spend, whether a product is the company’s own, or high profit margins—it is risky to allow users to mistake this for a general “popularity” or “recommended” ranking. In the 2025 case involving a high-end product sales platform, the Fair Trade Commission took issue with a system where products from sellers who purchased paid options were given priority in the default sorting, as well as the related labeling. As a general rule, advertised products should be managed in separate pools and slots, and clearly identifiable “Ad” or “Sponsored” labels should be provided at the card level. The admin dashboard must display advertising exposure rules and organic ranking algorithms separately.\n\n## 2. Products in Abnormal States: Out of Stock and Sales Suspension Are Different States\n\nIf you handle all exceptions with just `is_sold_out`, discrepancies will arise between search results, product details, the shopping cart, and order verification. At a minimum, you must separate **sales status, inventory status, visibility status, and regulatory status**.\n\n### Recommended Status Model\n\n| Status | Search/Listings | Direct URL Details | Cart/Order | Recommended Handling |\n|---|---|---|---|---|\n| For Sale · In Stock | Normal display | Normal display | Possible | Default candidate |\n| For Sale · Temporarily Out of Stock | Displayable but with lower ranking or demoted | Display “Out of Stock” and “Restock Notification” | Not possible | Preserve restock possibility |\n| Temporarily Suspended | Hidden by default | Notice of suspension | Not allowed | Restore upon resumption |\n| Discontinued | Hidden from search and categories | Notice of discontinuation and alternative products | Not allowed | Preserve existing links and customer service context |\n| Draft·Under Review | Completely hidden | Accessible only to authorized administrators | Not allowed | Review before publication |\n| Recall·Legal Block | Completely hidden | Safety notice if necessary | Not allowed | Safety notices take priority over alternative recommendations |\n\nOut-of-stock products are valuable for restock notifications and gauging search demand, so they do not need to be deleted unconditionally. On the other hand, discontinued products should be excluded from general listings; however, customers arriving via existing bookmarks or external links can be provided with a “Sales have ended” message and similar products. Whether to retain the product detail URL or return a `410 Gone` status should be determined based on search traffic, the need for legal notices, and the value of alternative content.\n\n### The search index does not have the final authority on order availability\n\nSearch indexes may experience synchronization delays. Therefore, even if search results show that an item is in stock, it must be verified again at the next stage.\n\n- Re-verify sales status and inventory when adding to the cart\n- Re-verify price, discounts, and inventory when proceeding to the order form\n- Reserve inventory or perform atomic deduction immediately before checkout\n- Immediately remove items from the search index when a “Sale Stopped” event occurs\n- Monitor indexing latency and failure rates\n\nWithout these rules, customer service incidents will recur where the search results appear normal but the order fails only at the checkout stage.\n\n## 3. List Display Methods: Paginated, “See More,” or Infinite Scroll—Which Should You Use?\n\nIf there are thousands or tens of thousands of products, they should not all be loaded at once. However, it is also inaccurate to assume that “numeric pagination is always the right answer for online stores.” In comparison-based searches, restoring position and state is important, while “Load More” may be more convenient for category browsing.\n\n| Method | Strengths | Weaknesses | Ideal Scenarios |\n|---|---|---|---|\n| Numeric Pagination | Easy to understand current position and result volume; allows revisiting specific pages | Page transitions are disjointed, and comparing across pages is cumbersome | Desktop search, deep exploration, shareable results |\n| See More | Allows users to control loading while retaining existing content | DOM and memory usage increase when there are a large number of results | Mobile and category browsing, medium-sized result sets |\n| Infinite Scroll | Natural, continuous browsing | Unclear position, end point, and total volume; difficult to restore previous pages | Feed-style screens where discovery is more important than comparison |\n\nIn practice, you can prioritize **pagination or “See More + restorable page URLs”** for search results, and infinite scroll for discovery-based recommendation feeds. Even when using pure infinite scroll, the following conditions must be met:\n\n- Save the search term, sort order, filters, page number, or cursor position in the URL or in a restorable state\n- Restore the previous product and scroll position when navigating back from a detail page\n- Support keyboard navigation, screen readers, and focus movement\n- Provide accessible alternatives for the footer and primary navigation links\n- Provide a UI for loading failures and retries\n- Provide an accessible, unique URL or link structure for each result batch\n\n### Offset and Cursor Pagination\n\nDeep offsets like `OFFSET 5000 LIMIT 40` tend to slow down as the data volume increases and updates become more frequent, and they are prone to duplication andomissions. While offsets are simple for shallow pages and admin screens, the cursor method—which passes the sort key of the last result—is more stable for large-scale searches.\n\n```text\nORDER BY score DESC, product_id DESC\ncursor = last_score + last_product_id\n```\n\nUsing only the score as the cursor may omit products with tied scores, so a unique key is used in conjunction with it. If recommendation scores change frequently in real time, a policy is also needed to fix a snapshot version or a specific time for the ranking criteria during the search session.\n\n## 4. Search Scope and “No Results” Page: Linking Customer Queries to Product Data\n\nCustomers do not know the exact product names registered by the operator. To show “Cheongsong Busa,” “Hongro,” and “household apples” to a customer searching for “apples,” the product data and search dictionary must be designed together.\n\n### Search Field Priorities\n\n| Field | Recommended Priority | Example |\n|---|---:|---|\n| SKU, Model Name, Barcode | Very High | `SM-S928N`, `880...` |\n| Product Name | High | Cheongsong Busa Apples 3kg |\n| Brand·Manufacturer | High | Samsung, Apple |\n| Category·Product Type | Medium or higher | Fruit, Running Shoes |\n| Key Attributes | Medium or higher | Capacity, Color, Size, Compatible Models |\n| Synonyms·Aliases·Varieties·Tags | Medium or higher | Jogging Shoes ↔ Running Shoes, Apple ↔ Busa |\n| Detailed Description | Low | Low weighting to reduce noise in long descriptions |\n| Review Body | Optional | Used sparingly after reviewing for quality, spam, and personal information |\n\nFor Korean searches, differences in spacing, separation of letters and consonants, brand names in English and Korean, numbers and units, and compound nouns must also be considered. For example, “AirPods Pro 2,” “AirPods Pro 2,” and “AirPods Pro 2” are all mapped to the same product category through normalization rules.\n\n### Recommended Search Pipeline\n\n1. Validate input length and allowed characters.\n2. Normalize case, spaces, special characters, and units.\n3. First, check for an exact match with the product code.\n4. Apply tokenization and morphological and spelling variations.\n5. Expand the synonym and category dictionaries managed by the operator.\n6. Find candidates using text search.\n7. If necessary, use semantic search to generate additional candidates.\n8. Filter by sales, public availability, and regulatory status.\n9. Calculate organic scores and combine them separately with ads.\n10. Return results and diagnostic information.\n\nEven when introducing generative AI or vector search, exact matches such as SKUs, brands, and model names must not be compromised. In shopping search, a hybrid approach combining **exact search + text relevance + optional semantic search** is generally the safest approach. All responses must be linked to actual product IDs and current data to prevent AI from inventing products, prices, or inventory that do not exist in the catalog.\n\n### The “No Results” Screen Is Your Second Shelf\n\nWhen there are no search results, do not simply display a blank screen. However, you should also avoid mixing in unrelated popular products as if they were search results.\n\nThe recommended structure is as follows:\n\n- Display the user’s search query exactly as entered and clearly indicate that there are no matching products\n- Offer typo correction suggestions and synonym recommendations\n- If the count is 0 due to filters, provide guidance on which filters can be removed\n- Present results with broader search criteria under a separate label\n- Display related categories, alternative products, and all popular products separately\n- Include options to request restocking or new listings, or link to customer support\n- Log searches with no results in the administrator’s analytics\n\n“No results” and “No results after applying filters” are different issues. If there were originally matching products but the count dropped to zero due to price or color filters, relaxing the filters is the most useful solution; if the product is not in the catalog at all, the data should be used for sourcing purposes.\n\n## 5. Search History: Manage Market Research Data and Personal Information Together\n\nSearch terms that yield no results reveal demand—customers who searched for a product but did not purchase it. Popular search terms help with product display and inventory planning, and the flow from search to clicks, cart additions, and purchases serves as a key metric for evaluating search quality.\n\nHowever, it cannot be assumed that “simply storing search terms and their frequency never constitutes personal information.” Search terms themselves may contain phone numbers, order numbers, names, or sensitive information such as health, religion, or sexual activity; when combined with account, IP, or device information, the likelihood of identifying or tracking an individual increases significantly.\n\n### Recommended Data Collection Items\n\n| Category | Recommended Processing |\n|---|---|\n| Normalized Search Terms | Aggregate by day and hour; minimize retention period for raw data |\n| Number of Results | Store whether the result count is 0 and the range value |\n| Applied Filters and Sorting | Store only the scope necessary for search quality analysis |\n| Clicks, Shopping Cart, Purchases | Store as aggregated metrics by search term whenever possible |\n| Session Links | Use short-lived random identifiers only when absolutely necessary |\n| Member ID, IP, and Exact Location | Exclude from search analysis logs unless there is a clear purpose and justification |\n| Personal Information in Raw Data | Mask or discard patterns of email addresses, phone numbers, and order numbers |\n\nEven hashed member IDs do not automatically become anonymous information. If they can be linked back to a specific user, they must be treated as pseudonymous information or personal information. Retention periods should not be set uniformly; instead, they should be determined separately for raw data and aggregated data based on purpose, analysis cycle, and security risks.\n\n### Metrics Required for the Administrator Dashboard\n\n- Search volume and number of unique search terms\n- “No results” rate\n- Search result click-through rate\n- Cart addition rate and purchase conversion rate following a search\n- Search term modification rate and filter removal rate\n- Percentage of out-of-stock products displayed\n- Concentration of top results and brand diversity\n- Metrics that distinguish between the performance of ads and organic results\n- Freshness of the search index and number of indexing failures\n\nSince low-frequency raw search terms may contain personal information, it is also useful to display only those items that exceed a minimum aggregation threshold on the administrator’s screen.\n\n## Practical Prompt: How to Translate Policies into Code\n\nIt is more important to clearly define operational rules than to use a lot of technical jargon. You can fill out the following template to suit your service’s specific context and provide it to the AI.\n\n```text\nPlease design and implement the product search feature for our online store.\n\n1. Eligibility Criteria\n- Include only products that are currently for sale, publicly listed, and not subject to regulatory restrictions in search results.\n- Display temporarily out-of-stock items, but rank them lower than in-stock items with the same conditions.\n- Hide discontinued products and temporarily suspended products from search results and categories.\n- For direct URLs of discontinued products, display a discontinuation notice and alternative products, and remove the purchase button.\n\n2. Default Sorting\n- Prioritize relevance to the search term above all else.\n- Factor in the conversion rate over the last 28 days, sales velocity over the last 14 days, adjusted rating, and shipping quality.\n- Allow each weighting factor to be adjusted via configuration files or administrator policies.\n- In the event of a tie, sort reliably in descending order by product_id.\n- Do not mix advertised products with organic results; place them in separate slots and label them as “Ads.”\n\n3. List Navigation\n- Return 40 items at a time.\n- Allow users to restore search terms, sorting, filters, page numbers, or cursor position from the URL.\n- When navigating back from a detail page, restore the list and scroll position.\n- Use cursor pagination for large result sets.\n\n4. Search Scope\n- Give top priority to exact matches for SKUs and model names.\n- Search by product name, brand, category, attributes, and synonym tags.\n- Handle Korean spacing and variations in brand names between English and Korean.\n- If no results are found, display typo suggestions, filter relaxation options, related categories, and alternative recommendations separately.\n\n5. Search Logs\n- By default, store only normalized search terms, time ranges, number of results, filters, and aggregated click and purchase metrics.\n- Do not store member IDs or IP addresses in search analysis logs.\n- Email addresses, phone numbers, and order numbers are masked.\n- The retention periods for raw data and aggregated data are set separately.\n\n6. Technical Requirements\n- Design the data model, API contract, search index, synchronization method, exception handling, and administrator metrics together.\n- Propose indexes that match actual query patterns and explain how to verify execution plans.\n- Re-verify status, price, and inventory at the shopping cart and checkout stages even when search indexes are delayed.\n- Create scenarios for unit testing, integration testing, performance testing, and accessibility testing.\n\nBefore beginning implementation, if there are any decisions that could affect the outcome but were not defined by me, please ask me first, and list any assumptions you’ve made on your own in a separate document.\n```\n\nThe last sentence is the key mechanism that transforms the AI from a simple code generator into a requirements review partner. However, do not stop at simply receiving questions; you must reflect the confirmed answers in the policy documents and test conditions.\n\n## Implementation Design: Anchor Policies to Data and APIs\n\n### Example Data Model\n\n```text\nproducts\n- product_id\n- sales_status\n- stock_status\n- visibility_status\n- compliance_status\n- brand_id\n- category_id\n- searchable_name\n- search_tags\n- price\n- inventory_quantity\n- ranking_feature_version\n- updated_at\n```\n\nDo not assign multiple meanings to a single field. For example, if you simply set `status = 1`, it is unclear whether this means “available for sale,” “publicly visible,” “in stock,” or “pending regulatory approval.” Manage state transitions using a table to define the necessary reviews and events when moving from “draft” to “on sale” or from “on sale” to “discontinued.”\n\n### Information to Include in API Responses\n\n- Normalized search terms\n- Applied sorting and filters\n- Result batches and next cursor\n- Number of results or approximate result count\n- Out of stock/on sale status badges\n- Advertising status and ad copy\n- Whether typo correction or search scope expansion was applied\n- Search policy version and request ID for tracking\n\nThere is no need to expose raw scores—which are internal debugging information—or business-sensitive weights directly to the customer API. Instead, operators must be able to reproduce the ranking path using the request ID.\n\n### Design indexes to match actual query patterns\n\nGenerally, consider using B-tree-based indexes for columns used in status filters and sorting, and inverted index-based indexes for specialized search documents. In PostgreSQL, you can use `tsvector` and GIN indexes; if similar string search is required, use `pg_trgm`. The same principle applies even when using an external search engine.\n\n```sql\nCREATE INDEX idx_products_visibility\nON products (visibility_status, sales_status, compliance_status);\n\nCREATE INDEX idx_products_search_document\nON products USING GIN (search_document);\n```\n\nThe more indexes you create, the higher the write costs and storage requirements. Do not make decisions based on assumptions alone; verify using `EXPLAIN ANALYZE`, slow query logs, and load testing based on actual queries and data distribution. When the number of products increases, consider not only the average response time but also p95 and p99 latency, timeout rates, and index freshness.\n\n### Additional Safeguards When Integrating Generative AI\n\n- Use only catalog API results for product availability, price, inventory, and delivery dates\n- Log search term expansions generated by the model alongside the original text, and limit excessive expansions\n- Prioritize exact SKU and model name searches over semantic search\n- Apply filters for discontinued or recalled products equally to AI search suggestions\n- Track product IDs and source fields exposed in responses\n- Fall back to standard text search if the model fails\n- Isolate prompt-injection phrases found in product descriptions or reviews so they are not executed as system instructions\n\n## Pre-launch Acceptance Testing\n\n| Scenario | Expected Result |\n|---|---|\n| A list includes both an out-of-stock product registered yesterday and a consistently selling in-stock product | The out-of-stock product does not occupy the top position by default |\n| Search for discontinued products | They do not appear in the list, but the direct URL displays a discontinuation notice and indicates the product is unavailable for purchase |\n| An advertised product appears in the top slot | It is immediately identifiable as an ad on the card |\n| 0 results after applying filters | A suggestion to remove filters and a notification regarding the existence of original results are provided |\n| Search for “running shoes” or “jogging shoes” | Related product categories are consistently displayed in accordance with the synonym policy |\n| Opened a product detail page and navigated back | Search terms, filters, sorting, list, and scroll position are restored |\n| Multiple products with the same score | Order remains fixed without duplication or omission even when navigating between pages |\n| Stock remains in the search index | Blocked with the latest stock information during the cart and checkout stages |\n| Search terms contain email addresses or phone numbers | Masked or discarded before logging |\n| Mass simultaneous searches | Meets defined p95 latency and error rate thresholds |\n| Admin search query dashboard | Low-frequency raw text and sensitive patterns are not exposed as-is |\n| Ranking weight changes | Policy version, approver, application time, and pre- and post-metrics are recorded |\n\n## Tasks to Repeat During the Operational Phase\n\nSearch is not a feature that is developed once and then forgotten. Since product lineups, seasons, promotions, and customer language change, establish the following cycle as part of your operational process.\n\n1. Review search terms with no results and those experiencing a sudden surge every week.\n2. Update synonym and category mappings through the approval process.\n3. Monitor out-of-stock exposure rate, click-through rate, conversion rate, and search term modification rate together.\n4. Roll out weight adjustments only after offline evaluation and limited A/B testing.\n5. Audit the exposure share of ads, in-house products, and organic results separately.\n6. Regularly inspect the retention period, access permissions, and masking failures for search logs.\n7. Re-evaluate index utilization and slow queries using actual traffic.\n\n## Conclusion\n\nAI can quickly build search APIs and user interfaces, but it cannot determine which products are worthy of being presented to customers. A practical e-commerce search system is only complete when **default sorting, product status, list navigation, search scope and “no results” handling, and search logs** are first established as policies, and those policies are consistently reflected in the data model, API, indexes, testing, and administrative metrics.\n\nWhile coding can be automated, merchandising principles and responsibilities do not arise automatically. The best AI prompt is not one filled with long, complex development jargon, but rather a document that clearly distinguishes between policies already decided by the operator and questions that have yet to be decided.","content_html":"\u003cp\u003eAI can quickly create product listing APIs, search bars, and sorting buttons. However, \u003cstrong\u003ewhich products to display, which to hide, and what to label as “recommendations”\u003c/strong\u003e are determined by operational policies, not code. E-commerce search is not merely a lookup function; it is a decision-making system that integrates shelf placement, ad space allocation, inventory management, customer experience, and data collection all in one place.\u003c/p\u003e\n\u003cp\u003eIf you simply instruct the AI to “build a product search feature” without providing specific policies, it may arbitrarily fill in familiar examples such as sorting by most recently added, partial product name matches, or simple pagination. Even if the code runs, it may not align with store operations. Typical issues include the latest products appearing at the top even when they’re out of stock, discontinued items being added to shopping carts, and customers failing to find “Cheongsong Busa” apples even when they search for “apples.”\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#search-ranking-is-an-operational-policy-not-a-technical-feature\" class=\"anchor\" id=\"search-ranking-is-an-operational-policy-not-a-technical-feature\"\u003e\u003c/a\u003eSearch Ranking Is an Operational Policy, Not a Technical Feature\u003c/h2\u003e\n\u003cp\u003eMerchants can design the order in which products are displayed. However, if the meaning conveyed to consumers on the screen does not align with the actual ranking calculation method, or if sponsored listings with economic interests are made to appear like general recommendations, the legal and trust-related risks increase significantly.\u003c/p\u003e\n\u003cp\u003eIn June 2024, the Korea Fair Trade Commission (KFTC) announced a provisional fine of 140 billion won against Coupang and CPLB for issues related to search ranking operations and the posting of purchase reviews by executives and employees; based on the resolution issued in August of the same year, the fine was set at 162.8 billion won. The companies contested the decision, and as of April 2026, the related lawsuit seeking to overturn the ruling was still pending. The practical lesson from this case is not simply the proposition that “favoring one’s own products is always illegal.” \u003cstrong\u003eIt is essential to review at the design stage what the “recommendation” label actually means, whether advertising and the company’s vested interests are clearly disclosed, and whether changes in rankings can be explained with data and documentation.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSince the application of the law can vary depending on the service structure and display methods, it is safest to separately verify relevant laws and the latest enforcement precedents before the actual launch.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#the-pitfalls-of-a-quick-and-dirty-version-created-by-a-one-line-prompt\" class=\"anchor\" id=\"the-pitfalls-of-a-quick-and-dirty-version-created-by-a-one-line-prompt\"\u003e\u003c/a\u003eThe Pitfalls of a “Quick-and-Dirty Version” Created by a One-Line Prompt\u003c/h2\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eUndefined Policy\u003c/th\u003e\n\u003cth\u003eImplementation Where AI Can Fill in Arbitrarily\u003c/th\u003e\n\u003cth\u003eActual Operational Risks\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Undefined Policy\"\u003eDefault Sorting\u003c/td\u003e\n\u003ctd data-label=\"Implementation Where AI Can Fill in Arbitrarily\"\u003e\u003ccode\u003ecreated_at DESC\u003c/code\u003e\u003c/td\u003e\n\u003ctd data-label=\"Actual Operational Risks\"\u003eRecently listed out-of-stock or pre-inspection products appear at the top\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Undefined Policy\"\u003eSales Status\u003c/td\u003e\n\u003ctd data-label=\"Implementation Where AI Can Fill in Arbitrarily\"\u003eChecks only whether an item has been deleted\u003c/td\u003e\n\u003ctd data-label=\"Actual Operational Risks\"\u003eProducts that have been discontinued or recalled may appear in search results or be available for order\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Undefined Policy\"\u003eList Loading\u003c/td\u003e\n\u003ctd data-label=\"Implementation Where AI Can Fill in Arbitrarily\"\u003eFull retrieval or simple infinite scrolling\u003c/td\u003e\n\u003ctd data-label=\"Actual Operational Risks\"\u003eSlow response, loss of position when using the back button, difficulty comparing items\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Undefined Policy\"\u003eSearch Scope\u003c/td\u003e\n\u003ctd data-label=\"Implementation Where AI Can Fill in Arbitrarily\"\u003ePartial match on product name only\u003c/td\u003e\n\u003ctd data-label=\"Actual Operational Risks\"\u003eFails to search by brand, variety, model name, or synonyms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Undefined Policy\"\u003eNo Results\u003c/td\u003e\n\u003ctd data-label=\"Implementation Where AI Can Fill in Arbitrarily\"\u003eReturns only an empty array\u003c/td\u003e\n\u003ctd data-label=\"Actual Operational Risks\"\u003eCustomers with high purchase intent immediately leave\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Undefined Policy\"\u003eLogs\u003c/td\u003e\n\u003ctd data-label=\"Implementation Where AI Can Fill in Arbitrarily\"\u003eSearch terms, member IDs, and IP addresses are stored as-is\u003c/td\u003e\n\u003ctd data-label=\"Actual Operational Risks\"\u003eRisk of data collection beyond intended purposes, excessive retention, and exposure of sensitive search terms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eAI can fill in the gaps in requirements, but it cannot determine whether those choices align with the store’s strategy and legal responsibilities. Therefore, at least the following five policies must be documented and finalized before implementation.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#1-default-sorting-what-will-be-considered-recommended-order\" class=\"anchor\" id=\"1-default-sorting-what-will-be-considered-recommended-order\"\u003e\u003c/a\u003e1. Default Sorting: What Will Be Considered “Recommended Order”?\u003c/h2\u003e\n\u003cp\u003eThe default sorting order is the display customers see first. Since most users do not change the sorting options, the default setting directly impacts sales, inventory depletion, new product promotion, and customer satisfaction.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#first-separate-the-ranking-calculation-steps\" class=\"anchor\" id=\"first-separate-the-ranking-calculation-steps\"\u003e\u003c/a\u003eFirst, Separate the Ranking Calculation Steps\u003c/h3\u003e\n\u003cp\u003eIt is safer to divide search results into the following steps rather than calculating them all at once.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cstrong\u003eEligibility Check:\u003c/strong\u003e Include only products that are available for sale, publicly viewable, and not subject to legal or operational restrictions.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCalculate Search Relevance:\u003c/strong\u003e Calculate how well the product name, brand, category, attributes, and synonyms match the search query.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCalculate Organic Ranking:\u003c/strong\u003e Combine signals such as sales velocity, conversion rate, rating reliability, and delivery quality.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eApplication of Business Rules:\u003c/strong\u003e Apply penalties for out-of-stock items, prioritize new product discovery opportunities, and enforce diversity limits.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAd Slot Integration:\u003c/strong\u003e Insert ad products separately from organic rankings and clearly label them.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eStable Tie-Breaking:\u003c/strong\u003e When scores are tied, order is determined using a fixed key such as \u003ccode\u003eproduct_id\u003c/code\u003e.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3\u003e\n\u003ca href=\"#the-recommendation-score-must-be-a-documented-formula\" class=\"anchor\" id=\"the-recommendation-score-must-be-a-documented-formula\"\u003e\u003c/a\u003eThe recommendation score must be a documented formula\u003c/h3\u003e\n\u003cp\u003eThe following is merely an example to illustrate the structure; it is not a one-size-fits-all solution for every online store.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003eorganic_score =\n\u003c/span\u003e\u003cspan\u003e  0.45 × query_relevance\n\u003c/span\u003e\u003cspan\u003e+ 0.20 × conversion_rate_28d\n\u003c/span\u003e\u003cspan\u003e+ 0.15 × sales_velocity_14d\n\u003c/span\u003e\u003cspan\u003e+ 0.10 × rating_confidence\n\u003c/span\u003e\u003cspan\u003e+ 0.10 × fulfillment_quality\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eEach signal must be normalized to the same range, and the time period and aggregation scope must be specified. Since a simple average rating could make a product with a single 5-star review appear higher-rated than a product with 1,000 reviews averaging 4.8 stars, it is better to use a weighted score that accounts for the number of reviews. Using only sales volume could give products that have been on the market for a long time a permanent advantage, so we also consider recent sales velocity and conversion rates.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#essential-details-to-define\" class=\"anchor\" id=\"essential-details-to-define\"\u003e\u003c/a\u003eEssential Details to Define\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWhich of the following is the goal of the recommendation ranking: search relevance, purchase likelihood, customer satisfaction, or inventory efficiency\u003c/li\u003e\n\u003cli\u003eThe aggregation period and update frequency for each signal\u003c/li\u003e\n\u003cli\u003eNegative signals such as cancellation rates, return rates, shipping delays, and the likelihood of being out of stock\u003c/li\u003e\n\u003cli\u003eThe exploration opportunities and maximum bonus points to be granted to new products with few reviews\u003c/li\u003e\n\u003cli\u003eDiversity rules to prevent a single brand or seller from excessively dominating the top of the rankings\u003c/li\u003e\n\u003cli\u003eA fixed sorting key to use in case of tied scores\u003c/li\u003e\n\u003cli\u003eAn audit log documenting the version of the ranking formula, reasons for changes, implementation dates, and approvers\u003c/li\u003e\n\u003cli\u003eSuccess metrics and termination conditions for A/B testing\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\n\u003ca href=\"#do-not-mix-paid-ads-with-organic-recommendations\" class=\"anchor\" id=\"do-not-mix-paid-ads-with-organic-recommendations\"\u003e\u003c/a\u003eDo not mix paid ads with organic recommendations\u003c/h3\u003e\n\u003cp\u003eWhile it is acceptable to reflect economic interests—such as advertising spend, whether a product is the company’s own, or high profit margins—it is risky to allow users to mistake this for a general “popularity” or “recommended” ranking. In the 2025 case involving a high-end product sales platform, the Fair Trade Commission took issue with a system where products from sellers who purchased paid options were given priority in the default sorting, as well as the related labeling. As a general rule, advertised products should be managed in separate pools and slots, and clearly identifiable “Ad” or “Sponsored” labels should be provided at the card level. The admin dashboard must display advertising exposure rules and organic ranking algorithms separately.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#2-products-in-abnormal-states-out-of-stock-and-sales-suspension-are-different-states\" class=\"anchor\" id=\"2-products-in-abnormal-states-out-of-stock-and-sales-suspension-are-different-states\"\u003e\u003c/a\u003e2. Products in Abnormal States: Out of Stock and Sales Suspension Are Different States\u003c/h2\u003e\n\u003cp\u003eIf you handle all exceptions with just \u003ccode\u003eis_sold_out\u003c/code\u003e, discrepancies will arise between search results, product details, the shopping cart, and order verification. At a minimum, you must separate \u003cstrong\u003esales status, inventory status, visibility status, and regulatory status\u003c/strong\u003e.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#recommended-status-model\" class=\"anchor\" id=\"recommended-status-model\"\u003e\u003c/a\u003eRecommended Status Model\u003c/h3\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eStatus\u003c/th\u003e\n\u003cth\u003eSearch/Listings\u003c/th\u003e\n\u003cth\u003eDirect URL Details\u003c/th\u003e\n\u003cth\u003eCart/Order\u003c/th\u003e\n\u003cth\u003eRecommended Handling\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Status\"\u003eFor Sale · In Stock\u003c/td\u003e\n\u003ctd data-label=\"Search/Listings\"\u003eNormal display\u003c/td\u003e\n\u003ctd data-label=\"Direct URL Details\"\u003eNormal display\u003c/td\u003e\n\u003ctd data-label=\"Cart/Order\"\u003ePossible\u003c/td\u003e\n\u003ctd data-label=\"Recommended Handling\"\u003eDefault candidate\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Status\"\u003eFor Sale · Temporarily Out of Stock\u003c/td\u003e\n\u003ctd data-label=\"Search/Listings\"\u003eDisplayable but with lower ranking or demoted\u003c/td\u003e\n\u003ctd data-label=\"Direct URL Details\"\u003eDisplay “Out of Stock” and “Restock Notification”\u003c/td\u003e\n\u003ctd data-label=\"Cart/Order\"\u003eNot possible\u003c/td\u003e\n\u003ctd data-label=\"Recommended Handling\"\u003ePreserve restock possibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Status\"\u003eTemporarily Suspended\u003c/td\u003e\n\u003ctd data-label=\"Search/Listings\"\u003eHidden by default\u003c/td\u003e\n\u003ctd data-label=\"Direct URL Details\"\u003eNotice of suspension\u003c/td\u003e\n\u003ctd data-label=\"Cart/Order\"\u003eNot allowed\u003c/td\u003e\n\u003ctd data-label=\"Recommended Handling\"\u003eRestore upon resumption\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Status\"\u003eDiscontinued\u003c/td\u003e\n\u003ctd data-label=\"Search/Listings\"\u003eHidden from search and categories\u003c/td\u003e\n\u003ctd data-label=\"Direct URL Details\"\u003eNotice of discontinuation and alternative products\u003c/td\u003e\n\u003ctd data-label=\"Cart/Order\"\u003eNot allowed\u003c/td\u003e\n\u003ctd data-label=\"Recommended Handling\"\u003ePreserve existing links and customer service context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Status\"\u003eDraft·Under Review\u003c/td\u003e\n\u003ctd data-label=\"Search/Listings\"\u003eCompletely hidden\u003c/td\u003e\n\u003ctd data-label=\"Direct URL Details\"\u003eAccessible only to authorized administrators\u003c/td\u003e\n\u003ctd data-label=\"Cart/Order\"\u003eNot allowed\u003c/td\u003e\n\u003ctd data-label=\"Recommended Handling\"\u003eReview before publication\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Status\"\u003eRecall·Legal Block\u003c/td\u003e\n\u003ctd data-label=\"Search/Listings\"\u003eCompletely hidden\u003c/td\u003e\n\u003ctd data-label=\"Direct URL Details\"\u003eSafety notice if necessary\u003c/td\u003e\n\u003ctd data-label=\"Cart/Order\"\u003eNot allowed\u003c/td\u003e\n\u003ctd data-label=\"Recommended Handling\"\u003eSafety notices take priority over alternative recommendations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eOut-of-stock products are valuable for restock notifications and gauging search demand, so they do not need to be deleted unconditionally. On the other hand, discontinued products should be excluded from general listings; however, customers arriving via existing bookmarks or external links can be provided with a “Sales have ended” message and similar products. Whether to retain the product detail URL or return a \u003ccode\u003e410 Gone\u003c/code\u003e status should be determined based on search traffic, the need for legal notices, and the value of alternative content.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#the-search-index-does-not-have-the-final-authority-on-order-availability\" class=\"anchor\" id=\"the-search-index-does-not-have-the-final-authority-on-order-availability\"\u003e\u003c/a\u003eThe search index does not have the final authority on order availability\u003c/h3\u003e\n\u003cp\u003eSearch indexes may experience synchronization delays. Therefore, even if search results show that an item is in stock, it must be verified again at the next stage.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRe-verify sales status and inventory when adding to the cart\u003c/li\u003e\n\u003cli\u003eRe-verify price, discounts, and inventory when proceeding to the order form\u003c/li\u003e\n\u003cli\u003eReserve inventory or perform atomic deduction immediately before checkout\u003c/li\u003e\n\u003cli\u003eImmediately remove items from the search index when a “Sale Stopped” event occurs\u003c/li\u003e\n\u003cli\u003eMonitor indexing latency and failure rates\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWithout these rules, customer service incidents will recur where the search results appear normal but the order fails only at the checkout stage.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#3-list-display-methods-paginated-see-more-or-infinite-scrollwhich-should-you-use\" class=\"anchor\" id=\"3-list-display-methods-paginated-see-more-or-infinite-scrollwhich-should-you-use\"\u003e\u003c/a\u003e3. List Display Methods: Paginated, “See More,” or Infinite Scroll—Which Should You Use?\u003c/h2\u003e\n\u003cp\u003eIf there are thousands or tens of thousands of products, they should not all be loaded at once. However, it is also inaccurate to assume that “numeric pagination is always the right answer for online stores.” In comparison-based searches, restoring position and state is important, while “Load More” may be more convenient for category browsing.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eStrengths\u003c/th\u003e\n\u003cth\u003eWeaknesses\u003c/th\u003e\n\u003cth\u003eIdeal Scenarios\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Method\"\u003eNumeric Pagination\u003c/td\u003e\n\u003ctd data-label=\"Strengths\"\u003eEasy to understand current position and result volume; allows revisiting specific pages\u003c/td\u003e\n\u003ctd data-label=\"Weaknesses\"\u003ePage transitions are disjointed, and comparing across pages is cumbersome\u003c/td\u003e\n\u003ctd data-label=\"Ideal Scenarios\"\u003eDesktop search, deep exploration, shareable results\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Method\"\u003eSee More\u003c/td\u003e\n\u003ctd data-label=\"Strengths\"\u003eAllows users to control loading while retaining existing content\u003c/td\u003e\n\u003ctd data-label=\"Weaknesses\"\u003eDOM and memory usage increase when there are a large number of results\u003c/td\u003e\n\u003ctd data-label=\"Ideal Scenarios\"\u003eMobile and category browsing, medium-sized result sets\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Method\"\u003eInfinite Scroll\u003c/td\u003e\n\u003ctd data-label=\"Strengths\"\u003eNatural, continuous browsing\u003c/td\u003e\n\u003ctd data-label=\"Weaknesses\"\u003eUnclear position, end point, and total volume; difficult to restore previous pages\u003c/td\u003e\n\u003ctd data-label=\"Ideal Scenarios\"\u003eFeed-style screens where discovery is more important than comparison\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eIn practice, you can prioritize \u003cstrong\u003epagination or “See More + restorable page URLs”\u003c/strong\u003e for search results, and infinite scroll for discovery-based recommendation feeds. Even when using pure infinite scroll, the following conditions must be met:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSave the search term, sort order, filters, page number, or cursor position in the URL or in a restorable state\u003c/li\u003e\n\u003cli\u003eRestore the previous product and scroll position when navigating back from a detail page\u003c/li\u003e\n\u003cli\u003eSupport keyboard navigation, screen readers, and focus movement\u003c/li\u003e\n\u003cli\u003eProvide accessible alternatives for the footer and primary navigation links\u003c/li\u003e\n\u003cli\u003eProvide a UI for loading failures and retries\u003c/li\u003e\n\u003cli\u003eProvide an accessible, unique URL or link structure for each result batch\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\n\u003ca href=\"#offset-and-cursor-pagination\" class=\"anchor\" id=\"offset-and-cursor-pagination\"\u003e\u003c/a\u003eOffset and Cursor Pagination\u003c/h3\u003e\n\u003cp\u003eDeep offsets like \u003ccode\u003eOFFSET 5000 LIMIT 40\u003c/code\u003e tend to slow down as the data volume increases and updates become more frequent, and they are prone to duplication andomissions. While offsets are simple for shallow pages and admin screens, the cursor method—which passes the sort key of the last result—is more stable for large-scale searches.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003eORDER BY score DESC, product_id DESC\n\u003c/span\u003e\u003cspan\u003ecursor = last_score + last_product_id\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eUsing only the score as the cursor may omit products with tied scores, so a unique key is used in conjunction with it. If recommendation scores change frequently in real time, a policy is also needed to fix a snapshot version or a specific time for the ranking criteria during the search session.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#4-search-scope-and-no-results-page-linking-customer-queries-to-product-data\" class=\"anchor\" id=\"4-search-scope-and-no-results-page-linking-customer-queries-to-product-data\"\u003e\u003c/a\u003e4. Search Scope and “No Results” Page: Linking Customer Queries to Product Data\u003c/h2\u003e\n\u003cp\u003eCustomers do not know the exact product names registered by the operator. To show “Cheongsong Busa,” “Hongro,” and “household apples” to a customer searching for “apples,” the product data and search dictionary must be designed together.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#search-field-priorities\" class=\"anchor\" id=\"search-field-priorities\"\u003e\u003c/a\u003eSearch Field Priorities\u003c/h3\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c/th\u003e\n\u003cth\u003eRecommended Priority\u003c/th\u003e\n\u003cth\u003eExample\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field\"\u003eSKU, Model Name, Barcode\u003c/td\u003e\n\u003ctd data-label=\"Recommended Priority\"\u003eVery High\u003c/td\u003e\n\u003ctd data-label=\"Example\"\u003e\n\u003ccode\u003eSM-S928N\u003c/code\u003e, \u003ccode\u003e880...\u003c/code\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field\"\u003eProduct Name\u003c/td\u003e\n\u003ctd data-label=\"Recommended Priority\"\u003eHigh\u003c/td\u003e\n\u003ctd data-label=\"Example\"\u003eCheongsong Busa Apples 3kg\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field\"\u003eBrand·Manufacturer\u003c/td\u003e\n\u003ctd data-label=\"Recommended Priority\"\u003eHigh\u003c/td\u003e\n\u003ctd data-label=\"Example\"\u003eSamsung, Apple\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field\"\u003eCategory·Product Type\u003c/td\u003e\n\u003ctd data-label=\"Recommended Priority\"\u003eMedium or higher\u003c/td\u003e\n\u003ctd data-label=\"Example\"\u003eFruit, Running Shoes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field\"\u003eKey Attributes\u003c/td\u003e\n\u003ctd data-label=\"Recommended Priority\"\u003eMedium or higher\u003c/td\u003e\n\u003ctd data-label=\"Example\"\u003eCapacity, Color, Size, Compatible Models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field\"\u003eSynonyms·Aliases·Varieties·Tags\u003c/td\u003e\n\u003ctd data-label=\"Recommended Priority\"\u003eMedium or higher\u003c/td\u003e\n\u003ctd data-label=\"Example\"\u003eJogging Shoes ↔ Running Shoes, Apple ↔ Busa\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field\"\u003eDetailed Description\u003c/td\u003e\n\u003ctd data-label=\"Recommended Priority\"\u003eLow\u003c/td\u003e\n\u003ctd data-label=\"Example\"\u003eLow weighting to reduce noise in long descriptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Field\"\u003eReview Body\u003c/td\u003e\n\u003ctd data-label=\"Recommended Priority\"\u003eOptional\u003c/td\u003e\n\u003ctd data-label=\"Example\"\u003eUsed sparingly after reviewing for quality, spam, and personal information\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eFor Korean searches, differences in spacing, separation of letters and consonants, brand names in English and Korean, numbers and units, and compound nouns must also be considered. For example, “AirPods Pro 2,” “AirPods Pro 2,” and “AirPods Pro 2” are all mapped to the same product category through normalization rules.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#recommended-search-pipeline\" class=\"anchor\" id=\"recommended-search-pipeline\"\u003e\u003c/a\u003eRecommended Search Pipeline\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eValidate input length and allowed characters.\u003c/li\u003e\n\u003cli\u003eNormalize case, spaces, special characters, and units.\u003c/li\u003e\n\u003cli\u003eFirst, check for an exact match with the product code.\u003c/li\u003e\n\u003cli\u003eApply tokenization and morphological and spelling variations.\u003c/li\u003e\n\u003cli\u003eExpand the synonym and category dictionaries managed by the operator.\u003c/li\u003e\n\u003cli\u003eFind candidates using text search.\u003c/li\u003e\n\u003cli\u003eIf necessary, use semantic search to generate additional candidates.\u003c/li\u003e\n\u003cli\u003eFilter by sales, public availability, and regulatory status.\u003c/li\u003e\n\u003cli\u003eCalculate organic scores and combine them separately with ads.\u003c/li\u003e\n\u003cli\u003eReturn results and diagnostic information.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eEven when introducing generative AI or vector search, exact matches such as SKUs, brands, and model names must not be compromised. In shopping search, a hybrid approach combining \u003cstrong\u003eexact search + text relevance + optional semantic search\u003c/strong\u003e is generally the safest approach. All responses must be linked to actual product IDs and current data to prevent AI from inventing products, prices, or inventory that do not exist in the catalog.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#the-no-results-screen-is-your-second-shelf\" class=\"anchor\" id=\"the-no-results-screen-is-your-second-shelf\"\u003e\u003c/a\u003eThe “No Results” Screen Is Your Second Shelf\u003c/h3\u003e\n\u003cp\u003eWhen there are no search results, do not simply display a blank screen. However, you should also avoid mixing in unrelated popular products as if they were search results.\u003c/p\u003e\n\u003cp\u003eThe recommended structure is as follows:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDisplay the user’s search query exactly as entered and clearly indicate that there are no matching products\u003c/li\u003e\n\u003cli\u003eOffer typo correction suggestions and synonym recommendations\u003c/li\u003e\n\u003cli\u003eIf the count is 0 due to filters, provide guidance on which filters can be removed\u003c/li\u003e\n\u003cli\u003ePresent results with broader search criteria under a separate label\u003c/li\u003e\n\u003cli\u003eDisplay related categories, alternative products, and all popular products separately\u003c/li\u003e\n\u003cli\u003eInclude options to request restocking or new listings, or link to customer support\u003c/li\u003e\n\u003cli\u003eLog searches with no results in the administrator’s analytics\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e“No results” and “No results after applying filters” are different issues. If there were originally matching products but the count dropped to zero due to price or color filters, relaxing the filters is the most useful solution; if the product is not in the catalog at all, the data should be used for sourcing purposes.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#5-search-history-manage-market-research-data-and-personal-information-together\" class=\"anchor\" id=\"5-search-history-manage-market-research-data-and-personal-information-together\"\u003e\u003c/a\u003e5. Search History: Manage Market Research Data and Personal Information Together\u003c/h2\u003e\n\u003cp\u003eSearch terms that yield no results reveal demand—customers who searched for a product but did not purchase it. Popular search terms help with product display and inventory planning, and the flow from search to clicks, cart additions, and purchases serves as a key metric for evaluating search quality.\u003c/p\u003e\n\u003cp\u003eHowever, it cannot be assumed that “simply storing search terms and their frequency never constitutes personal information.” Search terms themselves may contain phone numbers, order numbers, names, or sensitive information such as health, religion, or sexual activity; when combined with account, IP, or device information, the likelihood of identifying or tracking an individual increases significantly.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#recommended-data-collection-items\" class=\"anchor\" id=\"recommended-data-collection-items\"\u003e\u003c/a\u003eRecommended Data Collection Items\u003c/h3\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCategory\u003c/th\u003e\n\u003cth\u003eRecommended Processing\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Category\"\u003eNormalized Search Terms\u003c/td\u003e\n\u003ctd data-label=\"Recommended Processing\"\u003eAggregate by day and hour; minimize retention period for raw data\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Category\"\u003eNumber of Results\u003c/td\u003e\n\u003ctd data-label=\"Recommended Processing\"\u003eStore whether the result count is 0 and the range value\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Category\"\u003eApplied Filters and Sorting\u003c/td\u003e\n\u003ctd data-label=\"Recommended Processing\"\u003eStore only the scope necessary for search quality analysis\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Category\"\u003eClicks, Shopping Cart, Purchases\u003c/td\u003e\n\u003ctd data-label=\"Recommended Processing\"\u003eStore as aggregated metrics by search term whenever possible\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Category\"\u003eSession Links\u003c/td\u003e\n\u003ctd data-label=\"Recommended Processing\"\u003eUse short-lived random identifiers only when absolutely necessary\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Category\"\u003eMember ID, IP, and Exact Location\u003c/td\u003e\n\u003ctd data-label=\"Recommended Processing\"\u003eExclude from search analysis logs unless there is a clear purpose and justification\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Category\"\u003ePersonal Information in Raw Data\u003c/td\u003e\n\u003ctd data-label=\"Recommended Processing\"\u003eMask or discard patterns of email addresses, phone numbers, and order numbers\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eEven hashed member IDs do not automatically become anonymous information. If they can be linked back to a specific user, they must be treated as pseudonymous information or personal information. Retention periods should not be set uniformly; instead, they should be determined separately for raw data and aggregated data based on purpose, analysis cycle, and security risks.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#metrics-required-for-the-administrator-dashboard\" class=\"anchor\" id=\"metrics-required-for-the-administrator-dashboard\"\u003e\u003c/a\u003eMetrics Required for the Administrator Dashboard\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSearch volume and number of unique search terms\u003c/li\u003e\n\u003cli\u003e“No results” rate\u003c/li\u003e\n\u003cli\u003eSearch result click-through rate\u003c/li\u003e\n\u003cli\u003eCart addition rate and purchase conversion rate following a search\u003c/li\u003e\n\u003cli\u003eSearch term modification rate and filter removal rate\u003c/li\u003e\n\u003cli\u003ePercentage of out-of-stock products displayed\u003c/li\u003e\n\u003cli\u003eConcentration of top results and brand diversity\u003c/li\u003e\n\u003cli\u003eMetrics that distinguish between the performance of ads and organic results\u003c/li\u003e\n\u003cli\u003eFreshness of the search index and number of indexing failures\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSince low-frequency raw search terms may contain personal information, it is also useful to display only those items that exceed a minimum aggregation threshold on the administrator’s screen.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#practical-prompt-how-to-translate-policies-into-code\" class=\"anchor\" id=\"practical-prompt-how-to-translate-policies-into-code\"\u003e\u003c/a\u003ePractical Prompt: How to Translate Policies into Code\u003c/h2\u003e\n\u003cp\u003eIt is more important to clearly define operational rules than to use a lot of technical jargon. You can fill out the following template to suit your service’s specific context and provide it to the AI.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003ePlease design and implement the product search feature for our online store.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e1. Eligibility Criteria\n\u003c/span\u003e\u003cspan\u003e- Include only products that are currently for sale, publicly listed, and not subject to regulatory restrictions in search results.\n\u003c/span\u003e\u003cspan\u003e- Display temporarily out-of-stock items, but rank them lower than in-stock items with the same conditions.\n\u003c/span\u003e\u003cspan\u003e- Hide discontinued products and temporarily suspended products from search results and categories.\n\u003c/span\u003e\u003cspan\u003e- For direct URLs of discontinued products, display a discontinuation notice and alternative products, and remove the purchase button.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e2. Default Sorting\n\u003c/span\u003e\u003cspan\u003e- Prioritize relevance to the search term above all else.\n\u003c/span\u003e\u003cspan\u003e- Factor in the conversion rate over the last 28 days, sales velocity over the last 14 days, adjusted rating, and shipping quality.\n\u003c/span\u003e\u003cspan\u003e- Allow each weighting factor to be adjusted via configuration files or administrator policies.\n\u003c/span\u003e\u003cspan\u003e- In the event of a tie, sort reliably in descending order by product_id.\n\u003c/span\u003e\u003cspan\u003e- Do not mix advertised products with organic results; place them in separate slots and label them as “Ads.”\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e3. List Navigation\n\u003c/span\u003e\u003cspan\u003e- Return 40 items at a time.\n\u003c/span\u003e\u003cspan\u003e- Allow users to restore search terms, sorting, filters, page numbers, or cursor position from the URL.\n\u003c/span\u003e\u003cspan\u003e- When navigating back from a detail page, restore the list and scroll position.\n\u003c/span\u003e\u003cspan\u003e- Use cursor pagination for large result sets.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e4. Search Scope\n\u003c/span\u003e\u003cspan\u003e- Give top priority to exact matches for SKUs and model names.\n\u003c/span\u003e\u003cspan\u003e- Search by product name, brand, category, attributes, and synonym tags.\n\u003c/span\u003e\u003cspan\u003e- Handle Korean spacing and variations in brand names between English and Korean.\n\u003c/span\u003e\u003cspan\u003e- If no results are found, display typo suggestions, filter relaxation options, related categories, and alternative recommendations separately.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e5. Search Logs\n\u003c/span\u003e\u003cspan\u003e- By default, store only normalized search terms, time ranges, number of results, filters, and aggregated click and purchase metrics.\n\u003c/span\u003e\u003cspan\u003e- Do not store member IDs or IP addresses in search analysis logs.\n\u003c/span\u003e\u003cspan\u003e- Email addresses, phone numbers, and order numbers are masked.\n\u003c/span\u003e\u003cspan\u003e- The retention periods for raw data and aggregated data are set separately.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e6. Technical Requirements\n\u003c/span\u003e\u003cspan\u003e- Design the data model, API contract, search index, synchronization method, exception handling, and administrator metrics together.\n\u003c/span\u003e\u003cspan\u003e- Propose indexes that match actual query patterns and explain how to verify execution plans.\n\u003c/span\u003e\u003cspan\u003e- Re-verify status, price, and inventory at the shopping cart and checkout stages even when search indexes are delayed.\n\u003c/span\u003e\u003cspan\u003e- Create scenarios for unit testing, integration testing, performance testing, and accessibility testing.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003eBefore beginning implementation, if there are any decisions that could affect the outcome but were not defined by me, please ask me first, and list any assumptions you’ve made on your own in a separate document.\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe last sentence is the key mechanism that transforms the AI from a simple code generator into a requirements review partner. However, do not stop at simply receiving questions; you must reflect the confirmed answers in the policy documents and test conditions.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#implementation-design-anchor-policies-to-data-and-apis\" class=\"anchor\" id=\"implementation-design-anchor-policies-to-data-and-apis\"\u003e\u003c/a\u003eImplementation Design: Anchor Policies to Data and APIs\u003c/h2\u003e\n\u003ch3\u003e\n\u003ca href=\"#example-data-model\" class=\"anchor\" id=\"example-data-model\"\u003e\u003c/a\u003eExample Data Model\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003eproducts\n\u003c/span\u003e\u003cspan\u003e- product_id\n\u003c/span\u003e\u003cspan\u003e- sales_status\n\u003c/span\u003e\u003cspan\u003e- stock_status\n\u003c/span\u003e\u003cspan\u003e- visibility_status\n\u003c/span\u003e\u003cspan\u003e- compliance_status\n\u003c/span\u003e\u003cspan\u003e- brand_id\n\u003c/span\u003e\u003cspan\u003e- category_id\n\u003c/span\u003e\u003cspan\u003e- searchable_name\n\u003c/span\u003e\u003cspan\u003e- search_tags\n\u003c/span\u003e\u003cspan\u003e- price\n\u003c/span\u003e\u003cspan\u003e- inventory_quantity\n\u003c/span\u003e\u003cspan\u003e- ranking_feature_version\n\u003c/span\u003e\u003cspan\u003e- updated_at\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eDo not assign multiple meanings to a single field. For example, if you simply set \u003ccode\u003estatus = 1\u003c/code\u003e, it is unclear whether this means “available for sale,” “publicly visible,” “in stock,” or “pending regulatory approval.” Manage state transitions using a table to define the necessary reviews and events when moving from “draft” to “on sale” or from “on sale” to “discontinued.”\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#information-to-include-in-api-responses\" class=\"anchor\" id=\"information-to-include-in-api-responses\"\u003e\u003c/a\u003eInformation to Include in API Responses\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNormalized search terms\u003c/li\u003e\n\u003cli\u003eApplied sorting and filters\u003c/li\u003e\n\u003cli\u003eResult batches and next cursor\u003c/li\u003e\n\u003cli\u003eNumber of results or approximate result count\u003c/li\u003e\n\u003cli\u003eOut of stock/on sale status badges\u003c/li\u003e\n\u003cli\u003eAdvertising status and ad copy\u003c/li\u003e\n\u003cli\u003eWhether typo correction or search scope expansion was applied\u003c/li\u003e\n\u003cli\u003eSearch policy version and request ID for tracking\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThere is no need to expose raw scores—which are internal debugging information—or business-sensitive weights directly to the customer API. Instead, operators must be able to reproduce the ranking path using the request ID.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#design-indexes-to-match-actual-query-patterns\" class=\"anchor\" id=\"design-indexes-to-match-actual-query-patterns\"\u003e\u003c/a\u003eDesign indexes to match actual query patterns\u003c/h3\u003e\n\u003cp\u003eGenerally, consider using B-tree-based indexes for columns used in status filters and sorting, and inverted index-based indexes for specialized search documents. In PostgreSQL, you can use \u003ccode\u003etsvector\u003c/code\u003e and GIN indexes; if similar string search is required, use \u003ccode\u003epg_trgm\u003c/code\u003e. The same principle applies even when using an external search engine.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003eCREATE INDEX \u003c/span\u003e\u003cspan\u003eidx_products_visibility\n\u003c/span\u003e\u003cspan\u003eON\u003c/span\u003e\u003cspan\u003e products (visibility_status, sales_status, compliance_status);\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003eCREATE INDEX \u003c/span\u003e\u003cspan\u003eidx_products_search_document\n\u003c/span\u003e\u003cspan\u003eON\u003c/span\u003e\u003cspan\u003e products USING GIN (search_document);\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe more indexes you create, the higher the write costs and storage requirements. Do not make decisions based on assumptions alone; verify using \u003ccode\u003eEXPLAIN ANALYZE\u003c/code\u003e, slow query logs, and load testing based on actual queries and data distribution. When the number of products increases, consider not only the average response time but also p95 and p99 latency, timeout rates, and index freshness.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#additional-safeguards-when-integrating-generative-ai\" class=\"anchor\" id=\"additional-safeguards-when-integrating-generative-ai\"\u003e\u003c/a\u003eAdditional Safeguards When Integrating Generative AI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse only catalog API results for product availability, price, inventory, and delivery dates\u003c/li\u003e\n\u003cli\u003eLog search term expansions generated by the model alongside the original text, and limit excessive expansions\u003c/li\u003e\n\u003cli\u003ePrioritize exact SKU and model name searches over semantic search\u003c/li\u003e\n\u003cli\u003eApply filters for discontinued or recalled products equally to AI search suggestions\u003c/li\u003e\n\u003cli\u003eTrack product IDs and source fields exposed in responses\u003c/li\u003e\n\u003cli\u003eFall back to standard text search if the model fails\u003c/li\u003e\n\u003cli\u003eIsolate prompt-injection phrases found in product descriptions or reviews so they are not executed as system instructions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\n\u003ca href=\"#pre-launch-acceptance-testing\" class=\"anchor\" id=\"pre-launch-acceptance-testing\"\u003e\u003c/a\u003ePre-launch Acceptance Testing\u003c/h2\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eScenario\u003c/th\u003e\n\u003cth\u003eExpected Result\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eA list includes both an out-of-stock product registered yesterday and a consistently selling in-stock product\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eThe out-of-stock product does not occupy the top position by default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eSearch for discontinued products\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eThey do not appear in the list, but the direct URL displays a discontinuation notice and indicates the product is unavailable for purchase\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eAn advertised product appears in the top slot\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eIt is immediately identifiable as an ad on the card\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003e0 results after applying filters\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eA suggestion to remove filters and a notification regarding the existence of original results are provided\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eSearch for “running shoes” or “jogging shoes”\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eRelated product categories are consistently displayed in accordance with the synonym policy\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eOpened a product detail page and navigated back\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eSearch terms, filters, sorting, list, and scroll position are restored\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eMultiple products with the same score\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eOrder remains fixed without duplication or omission even when navigating between pages\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eStock remains in the search index\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eBlocked with the latest stock information during the cart and checkout stages\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eSearch terms contain email addresses or phone numbers\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eMasked or discarded before logging\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eMass simultaneous searches\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eMeets defined p95 latency and error rate thresholds\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eAdmin search query dashboard\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003eLow-frequency raw text and sensitive patterns are not exposed as-is\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Scenario\"\u003eRanking weight changes\u003c/td\u003e\n\u003ctd data-label=\"Expected Result\"\u003ePolicy version, approver, application time, and pre- and post-metrics are recorded\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003ch2\u003e\n\u003ca href=\"#tasks-to-repeat-during-the-operational-phase\" class=\"anchor\" id=\"tasks-to-repeat-during-the-operational-phase\"\u003e\u003c/a\u003eTasks to Repeat During the Operational Phase\u003c/h2\u003e\n\u003cp\u003eSearch is not a feature that is developed once and then forgotten. Since product lineups, seasons, promotions, and customer language change, establish the following cycle as part of your operational process.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eReview search terms with no results and those experiencing a sudden surge every week.\u003c/li\u003e\n\u003cli\u003eUpdate synonym and category mappings through the approval process.\u003c/li\u003e\n\u003cli\u003eMonitor out-of-stock exposure rate, click-through rate, conversion rate, and search term modification rate together.\u003c/li\u003e\n\u003cli\u003eRoll out weight adjustments only after offline evaluation and limited A/B testing.\u003c/li\u003e\n\u003cli\u003eAudit the exposure share of ads, in-house products, and organic results separately.\u003c/li\u003e\n\u003cli\u003eRegularly inspect the retention period, access permissions, and masking failures for search logs.\u003c/li\u003e\n\u003cli\u003eRe-evaluate index utilization and slow queries using actual traffic.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2\u003e\n\u003ca href=\"#conclusion\" class=\"anchor\" id=\"conclusion\"\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\n\u003cp\u003eAI can quickly build search APIs and user interfaces, but it cannot determine which products are worthy of being presented to customers. A practical e-commerce search system is only complete when \u003cstrong\u003edefault sorting, product status, list navigation, search scope and “no results” handling, and search logs\u003c/strong\u003e are first established as policies, and those policies are consistently reflected in the data model, API, indexes, testing, and administrative metrics.\u003c/p\u003e\n\u003cp\u003eWhile coding can be automated, merchandising principles and responsibilities do not arise automatically. The best AI prompt is not one filled with long, complex development jargon, but rather a document that clearly distinguishes between policies already decided by the operator and questions that have yet to be decided.\u003c/p\u003e\n","tags":["AI Development","Online store search","Search policy","Ecommerce operations","Search UX"],"faqs":[{"question":"Why is it a problem to set the default sort order for shopping mall searches to \"Newest First\"?","answer":"Since the \"Newest Listings\" sort order is based solely on listing time, out-of-stock items, items awaiting inspection, and items with low sales potential may appear at the top of the list. It is safer to first ensure relevance to the search term and availability for sale, and then combine signals such as conversion rate, sales velocity, and rating reliability."},{"question":"Can the AI automatically determine the weighting for the recommendation order?","answer":"AI can suggest candidate formulas and generate simulation code, but the operator must define the objectives and acceptable ranges. Weights should be evaluated offline using historical data and adjusted based on limited A/B testing and stop criteria."},{"question":"Should out-of-stock items be completely hidden from search results?","answer":"If there is a possibility of restocking and customers can opt in to restock notifications, displaying an \"out of stock\" badge and demoting the product in the search results is more useful than completely removing it. Products that are out of stock for an extended period or have been discontinued should be hidden according to separate criteria, and their availability should be verified again during the shopping cart and checkout stages."},{"question":"Is it correct to remove the product detail page for discontinued items by returning a 404 error?","answer":"This isn’t always the case. If existing links, order history, safety notices, or information on alternative products still hold value, you can keep the product detail page while clearly indicating that the product is discontinued and no longer available for purchase. If the content has no value whatsoever and permanent removal is appropriate, consider implementing a 404 or 410 policy."},{"question":"Which is better for an online store: pagination or infinite scroll?","answer":"For search results where comparison and revisiting are important, numbered pagination or a “See More” approach is generally easier to manage. To use infinite scroll, you need to handle URL state, the “Back” button, scroll position, accessibility, and error recovery; it’s better suited for discovery feeds."},{"question":"If we implement AI search or vector search, will traditional text search no longer be necessary?","answer":"It is necessary. For shopping searches where exact matches are critical—such as for SKUs, model names, brands, and specifications—text search must serve as the foundation. Semantic search should be used as a supplementary layer to expand the range of candidates with different phrasing, and it must be linked to actual product IDs and inventory data."},{"question":"If we only store search terms and the number of searches, won't there be any privacy issues?","answer":"It cannot be automatically assumed to be safe. Search terms may contain email addresses, phone numbers, order numbers, or other sensitive information, and when combined with other identifiers, they can be used to track individuals. Purpose limitation, masking, access controls, and the separate storage of raw data and aggregated data are required."},{"question":"Can I place the ad product at the top of the list based on popularity?","answer":"It is more important to design the system so that ad impressions are not mistaken for general organic recommendations than to focus on the ad impressions themselves. You must distinguish between ad results and organic results, provide immediately recognizable labels on product cards, and manage ad display rules and performance metrics separately."},{"question":"What database indexes are required for product search?","answer":"The correct answer depends on the actual query and data distribution. For status filtering and sorting, you can consider B-tree-based indexes; for full-text search, inverted indexes such as GIN; and for similar string search, trigram-based indexes. You should verify their effectiveness through execution plans and load testing."},{"question":"What metrics should be used to evaluate search quality?","answer":"You need to analyze the \"no results\" rate, search result click-through rate, shopping cart rate and purchase conversion rate following a search, search term modification rate, and out-of-stock exposure rate together. To evaluate both quality and performance, you must also factor in the P95 latency, timeout rate, and index freshness."},{"question":"How long should search logs be retained?","answer":"There is no single retention period that applies to all services. It is best to retain the original search queries only for the minimum period necessary for analysis, while storing long-term trends as aggregated data to minimize personal information risks. The retention purposes, deletion cycles, and access permissions must be consistent with the privacy policy and internal policies."},{"question":"What is the most important sentence to ask the AI before implementation?","answer":"You can instruct them by saying, “Before you begin implementation, if there are any decisions that affect the outcome but were not specified in the policies I established, please ask me first, and list any assumptions you’ve made on your own in a separate list.” For this to be effective, the responses must then be incorporated into the policy documents, API contracts, and test conditions."}],"sources":[{"url":"https://www.ftc.go.kr/www/selectBbsNttView.do?bordCd=3\u0026key=12\u0026nttSn=43448\u0026pageIndex=1\u0026pageUnit=10\u0026rltnNttSn=46624\u0026searchCnd=all\u0026searchViolt=0604","title":"Fair Trade Commission: Sanctions Imposed on Coupang and CPLB for Inducing Customers Through Deceptive Practices","type":"source"},{"url":"https://www.lawtimes.co.kr/news/articleView.html?idxno=218796","title":"The Legal News: Coupang-Fair Trade Commission Lawsuit Brings Naver Shopping Case into Focus","type":"source"},{"url":"https://www.law.go.kr/LSW/lsInfoP.do?lsId=002011","title":"National Law Information Center: Act on Fair Labeling and Advertising","type":"source"},{"url":"https://case.ftc.go.kr/ocp/co/openDocView.do?docCnvrMnNo=12808\u0026docId=20221229104156671154\u0026docTy=LTFR\u0026id=OCPLTFR20140759018192","title":"Korea Fair Trade Commission Online Case Handling: Decision Regarding the Display of Keyword Ads 2014-103","type":"source"},{"url":"https://www.ftc.go.kr/www/selectBbsNttView.do?bordCd=3\u0026key=12\u0026nttSn=46006\u0026pageIndex=2\u0026pageUnit=10\u0026rltnNttSn=37048\u0026searchCnd=all\u0026searchCtgry=01%2C02\u0026searchKrwd=%EA%B4%91%EA%B3%A0\u0026searchViolt=0609","title":"Fair Trade Commission: Sanctions Imposed on Platforms Selling High-Priced Brand-Name Products for Violations of the Labeling and Advertising Act and the Electronic Commerce Act","type":"source"},{"url":"https://www.law.go.kr/LSW/lsInfoP.do?ancYnChk=0\u0026lsId=011357","title":"National Law Information Center: Personal Information Protection Act","type":"source"},{"url":"https://baymard.com/learn/ecommerce-ux-best-practices","title":"Baymard Institute: Data-Driven E-commerce UX Best Practices","type":"source"},{"url":"https://developers.google.com/search/docs/specialty/ecommerce/pagination-and-incremental-page-loading","title":"Google Search Central: Pagination and Incremental Page Loading","type":"source"},{"url":"https://www.postgresql.org/docs/current/textsearch.html","title":"PostgreSQL Documentation: Full-Text Search","type":"source"},{"url":"https://www.postgresql.org/docs/current/textsearch-indexes.html","title":"PostgreSQL Documentation: Preferred Index Types for Text Search","type":"source"},{"url":"https://www.postgresql.org/docs/current/pgtrgm.html","title":"PostgreSQL Documentation: pg_trgm","type":"source"}],"images":[{"id":240,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MjM1NSwicHVyIjoiYmxvYl9pZCJ9fQ==--6c0b755d9bc5bce8a57d0306acd05a2302fe176e/ChatGPT%20Image%202026%E1%84%82%E1%85%A7%E1%86%AB%207%E1%84%8B%E1%85%AF%E1%86%AF%2021%E1%84%8B%E1%85%B5%E1%86%AF%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2002_29_49.webp","is_representative":true,"generation_method":"upload","mime_type":"image/webp","original_filename":"ChatGPT Image 2026년 7월 21일 오전 02_29_49.png","translations":{"ko":{"alt":"AI 네트워크와 상품 검색 화면, 정책 체크카드, 분석 대시보드가 결합된 쇼핑몰 검색 설계 일러스트","caption":"AI 쇼핑몰 검색을 구현하기 전에 정렬, 상품 상태, 탐색, 검색 범위, 데이터 정책을 설계하는 과정을 보여준다.","description":null},"en":{"alt":"AI network, product search interface, policy checklist cards, and analytics dashboard for e-commerce search planning","caption":"The illustration shows the planning of ranking, product status, navigation, search scope, and data policies before building AI-powered e-commerce search.","description":null},"ja":{"alt":"AIネットワーク、商品検索画面、ポリシーカード、分析ダッシュボードを組み合わせたEC検索設計","caption":"AI搭載のEC検索を構築する前に、並び順、商品状態、ナビゲーション、検索範囲、データ方針を設計する様子を示している。","description":null},"es":{"alt":"Red de IA, interfaz de búsqueda de productos, tarjetas de políticas y panel analítico para comercio electrónico","caption":"La ilustración muestra cómo definir el orden, el estado de los productos, la navegación, el alcance de búsqueda y la política de datos antes de crear un buscador con IA.","description":null},"id":{"alt":"Jaringan AI, antarmuka pencarian produk, kartu kebijakan, dan dasbor analitik untuk perencanaan pencarian toko online","caption":"Ilustrasi ini menunjukkan perencanaan peringkat, status produk, navigasi, cakupan pencarian, dan kebijakan data sebelum membangun pencarian e-commerce berbasis AI.","description":null},"pt":{"alt":"Rede de IA, interface de busca de produtos, cartões de políticas e painel analítico para comércio eletrônico","caption":"A ilustração mostra o planejamento de ordenação, status dos produtos, navegação, escopo da busca e política de dados antes de criar uma busca de e-commerce com IA.","description":null},"zh-hant":{"alt":"結合AI網路、商品搜尋介面、政策檢查卡與分析儀表板的電商搜尋規劃圖","caption":"此圖呈現在建立AI電商搜尋前，規劃排序、商品狀態、瀏覽方式、搜尋範圍與資料政策的過程。","description":null}}},{"id":241,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MjM2MiwicHVyIjoiYmxvYl9pZCJ9fQ==--7aa0dfb3a548f3bdfe5cf4f73b74b387fe8da178/ChatGPT%20Image%202026%E1%84%82%E1%85%A7%E1%86%AB%207%E1%84%8B%E1%85%AF%E1%86%AF%2021%E1%84%8B%E1%85%B5%E1%86%AF%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2002_32_48.webp","is_representative":false,"generation_method":"upload","mime_type":"image/webp","original_filename":"ChatGPT Image 2026년 7월 21일 오전 02_32_48.png","translations":{"ko":{"alt":"상품 의미 연결망, 대체 추천 화면, 보안 데이터 저장소로 구성된 AI 쇼핑 검색 설계도","caption":"상품 속성과 동의어를 연결하고 검색 결과가 없을 때 대안을 추천하며 로그를 안전하게 집계하는 구조를 보여준다.","description":null},"en":{"alt":"AI shopping search map with semantic product links, fallback recommendations, and secure data storage","caption":"The illustration shows product attributes and synonyms being connected, alternative items suggested for empty results, and search logs aggregated securely.","description":null},"ja":{"alt":"商品意味ネットワーク、代替推薦画面、安全なデータ保存で構成されたAIショッピング検索設計","caption":"商品属性や同義語を結び、検索結果がない場合に代替商品を提案し、検索ログを安全に集計する仕組みを示している。","description":null},"es":{"alt":"Mapa de búsqueda comercial con vínculos semánticos, recomendaciones alternativas y almacenamiento seguro de datos","caption":"La ilustración muestra cómo conectar atributos y sinónimos, recomendar productos cuando no hay resultados y agregar registros de búsqueda de forma segura.","description":null},"id":{"alt":"Peta pencarian belanja AI dengan relasi produk, rekomendasi alternatif, dan penyimpanan data aman","caption":"Ilustrasi ini menunjukkan hubungan atribut dan sinonim produk, rekomendasi saat hasil kosong, serta pengelompokan log pencarian secara aman.","description":null},"pt":{"alt":"Mapa de busca comercial com conexões semânticas, recomendações alternativas e armazenamento seguro de dados","caption":"A ilustração mostra atributos e sinônimos conectados, sugestões para buscas sem resultado e agregação segura dos registros de pesquisa.","description":null},"zh-hant":{"alt":"結合商品語意關聯、替代推薦與安全資料儲存的AI購物搜尋架構","caption":"此圖呈現商品屬性與同義詞連結、無結果時提供替代推薦，以及安全彙整搜尋紀錄的流程。","description":null}}}],"published_at":"2026-07-21T10:05:48+09:00","updated_at":"2026-07-21T10:05:55+09:00","license":"cc_by","translation_status":"reviewed","available_locales":["ko","en","ja","es"],"data_locales":["ko","en","ja","es","id","pt","zh-hant"],"url":"https://injoys.com/en/articles/five-policies-before-ai-ecommerce-search-development"}