Skip to main content
Skip to article
Search UX 2026-07-10 20 min read

Ecommerce Search Results Page Design: States, Cards, Filters, and Measurement

An ecommerce search results page has to explain what the search system understood, present products in a state the shopper can judge, and preserve the query while filters, sorting, continuation, navigation, and recovery change the view.

The page’s first responsibility is to make the answer legible: what query was submitted, what matched, what changed, and what the shopper can do next. Header, cards, controls, loading, mobile layout, accessibility, and analytics should all reinforce that response contract.

When search becomes comparison work

A results page is where search becomes comparison work: the query needs a durable state, products need decision evidence, and filters, sorting, continuation, and recovery need room. The inline-search guide covers the smaller response that can stay in page flow; the search-layout guide maps the surface choice and density trade-off. The modal UX guide covers the earlier focused handoff; the autocomplete guide covers the suggestion pipeline before submission. Once the query is committed, the results page must preserve it through every refinement, recovery, and destination. For narrow-screen containment and cross-input testing, use the mobile search guide and accessibility guide.

Results for

“waterproof work boot”

Exact phrase and attribute matches Total available
Waterproof Work footwear

Products ranked by relevance

Sort: Relevance

Waterproof work boot

Exact attribute

Available

Waterproof work boot

Exact category

Available

Waterproof work boot

Related material

Available

Illustrative composition, not a live storefront capture. The useful evidence is that query, match state, active constraints, card state, and continuation are visible together.

Chapter 1 · Understand the response states

Results, recovery, no results, and errors are different answers

A grid alone cannot explain whether products matched the query exactly, appeared after spelling correction, survived relaxed matching, or came from a fallback. Put the response state in the page header and preserve the original query.

Do not label a failed request as zero results. Zero results means the search completed and found no eligible matches under the declared rules. An error means the system did not produce a trustworthy answer.

Those states create different shopper decisions. A complete result invites comparison. A relaxed or corrected result asks the shopper to verify the interpretation. A genuine zero result asks them to revise a constraint or choose another path. An error asks them to retry or return later. The page earns trust when its hierarchy, copy, controls, and recovery make the correct next action obvious for the state the system actually produced.

Page states and their required communication
StateAnswerControlsDo not
Initial loadThe submitted query and stable page structurePreserve input, applied state, and any server-rendered result contextShow an empty white page while client code decides what to render.
Loading new queryWhich query is being resolved and that work is in progressKeep the search field and deliberate cancel or navigation behaviourLeave the old products looking current under the new query.
ResultsQuery, match state, count boundary, products, filters, sort, and continuationSearch, applied filters, filter access, sort, product actions, pagingHide how products matched or reset state unexpectedly.
Partial or recovered resultsWhat was changed, relaxed, corrected, or substitutedOriginal query, accepted correction, undo, related categories, full alternativesPresent relaxed products as exact matches.
No resultsWhat was searched and which recovery paths are credibleEdit query, remove filters, accept correction, browse category, contact support when appropriateReplace the failed query with unlabeled popular products.
ErrorThe query was not completed and prior state may be staleRetry, edit, preserve query, and a fallback routeReport zero results for a failed request.

Transparent correction

Showing results for waterproof work boot

Original query: “waterprooof work boot”

Search original query Edit search

Hidden relaxation

Products appear, but the shopper cannot tell that a term or filter was ignored.

The grid looks healthy while query fidelity is unknown.

Chapter 2 · Define the response contract

The interface needs more than product IDs

The response should carry enough information to render the answer honestly and trace it later. When the frontend infers match state, count type, or continuation behaviour from incomplete data, the same response can produce inconsistent pages.

query

Which exact normalized and display query does this response represent?

UX use: Keep the input, heading, analytics, and history synchronised.

match state

Are these exact, partial, corrected, relaxed, fallback, or no-match results?

UX use: Explain what changed instead of making the grid carry the ambiguity.

result records

Which product or variant records matched, in what order, and why?

UX use: Render the intended purchasable state and expose useful match evidence.

count

Is this an exact total, estimated total, loaded count, or page count?

UX use: Label the number accurately and avoid false precision.

facets

Which values and counts remain available under the current filter semantics?

UX use: Enable only valid refinements and explain applied state.

sort

Which order was requested and which ranking or tie-break rules were applied?

UX use: Name the current order and preserve it in URL and history.

continuation

What cursor, page, or offset retrieves the next stable segment?

UX use: Load more without duplicates, gaps, or lost position.

diagnostic context

Which request, index version, locale, market, rules, and timing produced the response?

UX use: Trace a wrong page without exposing internal data to shoppers.

Worked journey · illustrative

Follow one query from correction to a safe handoff

Use “waterprooof work boot” as a teaching case, not a benchmark. The point is to show how one response contract guides the next decision when the page looks plausible but the shopper may be seeing a changed answer.

  1. 1

    Declare the interpretation. Keep the original query visible and say whether the system corrected it to “waterproof work boot”, searched the original, or relaxed a term. Do not let a healthy-looking grid hide that choice.

  2. 2

    Check the returned candidates. Compare product and variant IDs, match state, price, and availability with the intended query. If the expected boot is missing, inspect eligibility, retrieval, or ranking before changing the grid.

  3. 3

    Check the projection. If the response has the right variant but the card shows the parent image, price, or availability, the first divergent layer is projection or rendering, not relevance.

  4. 4

    Follow the handoff. Verify that the product URL, selected option, market, currency, and cart line preserve the same sellable state. A click or add-to-cart event without this context cannot prove that the result was trustworthy.

  5. 5

    Choose the smallest honest intervention. Keep the page if the response, card, controls, and handoff agree. Fix only the first divergent layer, then replay the case with an exact identifier such as “AB-120-BLK”, a sold-out option, and a no-match state.

Chapter 3 · Build the answer header

Keep the query, interpretation, count, and applied state together

The top of the page should let a shopper answer four questions: What did I search? What did the system change or infer? How much of the answer am I seeing? Which filters and sort are active?

Label counts according to what they represent. An exact total, estimate, loaded-product count, and “showing this page” count are not interchangeable. If the search system cannot provide a stable total, use a truthful loaded or continuation message instead of manufacturing precision.

Query

Visible, editable, and synchronised with the URL.

Interpretation

Correction, relaxation, or recovery stated explicitly.

Count boundary

Exact, estimated, loaded, or current segment.

Active state

Filters and sort visible and removable.

Chapter 4 · Design result cards

Show the evidence needed to choose the next product

A result card is a decision record. Its content should match the query family. A shopper searching a part number needs identifier and compatibility evidence. A shopper searching “green linen shirt” needs colour, material, fit, price, and availability.

When the match is variant-specific, preserve that variant through image, price, stock, swatch or option state, URL, and product-page handoff. Otherwise the correct result can become a second search task after the click.

Waterproof composite-toe boot

Matched: waterproof · composite toe

Available Selected width

Image

Recognize the product and meaningful variation

Do not show an image that belongs to a different variant than the price or URL.

Title

Identify the product without truncating the differentiating words

Use a consistent line strategy and preserve the full accessible name.

Matched attribute or identifier

Explain why this result is relevant when the title does not

Expose only useful shopper-facing evidence, not raw scoring internals.

Price

Represent the purchasable state, range, sale, market, and currency accurately

Do not combine one variant’s image with another variant’s price.

Availability

Set expectations before the shopper opens a result

Scope stock to the market, location, and selected or matched variant.

Variant context

Preserve size, colour, model, pack, or compatibility evidence from the query

Do not force the shopper to rediscover the matching variant on the product page.

Action

Open the product or complete a safe, fully specified action

Direct add is unsafe when required options or compatibility are unresolved.

If price or availability changes between the grid and product page, use the price and stock data-path diagnostic before treating it as card styling.

Chapter 5 · Integrate filters

Filters should refine the query without hiding the search state

Facets are part of the result contract, not a static sidebar copied onto every query. Choose dimensions that help distinguish the current products and preserve applied values in the URL and visible page state.

Counts depend on filter semantics. Decide whether counts represent the current result set, results after excluding the facet’s own selection, or another model. Use one definition per facet and test combinations.

Use query-specific facets

The useful dimensions for “office chair” differ from those for “printer cartridge.”

Verify: Inspect the first category of results and the fields shoppers need to narrow it.

Preserve the query when filters change

Filtering should narrow the result set, not silently start a different search.

Verify: Apply, remove, refresh, share, and use browser navigation while checking the query.

Show applied values outside the closed control

Shoppers need to know why the result set changed.

Verify: Close the filter drawer and confirm active state remains visible and removable.

Define multi-select semantics per facet

OR within a facet and AND across facets is common, but not universal.

Verify: Select two values in one facet and one value in another; compare counts and URL state.

Disable, remove, or explain impossible values deliberately

Zero-count choices can teach the available space or create dead ends.

Verify: Apply restrictive combinations and inspect how unavailable values are represented.

Do not generate uncontrolled crawl paths

Every filter combination does not need to become a canonical indexable page.

Verify: Review URL generation, canonical policy, internal links, and crawl controls with SEO ownership.

The faceted navigation guide covers field design, value normalisation, multi-select logic, counts, URL state, crawl policy, and filter diagnostics.

Chapter 6 · Define sort promises

Every sort label needs a data definition

Sorting changes the page’s promise. “Relevance,” “price,” “newest,” and “best selling” are not interface labels alone. They require a value definition, missing-value policy, tie-break, market scope, and stable continuation.

Sort options and the contracts behind them
SortPromiseRequired dataRisk
RelevanceBest match for the current query under the declared ranking systemQuery, fields, ranking signals, rules, tie-breaksA label says relevance while the implementation uses popularity or manual order.
Price low to highAscending comparable price in the active market and currencyDefined product or variant price, sale handling, ranges, missing valuesProducts with variant ranges appear in an order the displayed price does not explain.
Price high to lowDescending comparable price under the same definitionThe same price contract as ascending orderTie and range rules change between directions.
NewestMost recent product under a named timestampPublished, created, available, or launch date and tie-breakBackfilled or republished products make “new” ambiguous.
Best selling or popularOrder based on a measured behaviour or merchandising definitionMetric, period, scope, eligibility, freshnessThe label implies current demand while the score is stale or global.

When the shopper changes sort, preserve the query and filters, reset or translate continuation state safely, announce the updated result state, and return focus to a predictable location.

Chapter 7 · Choose continuation

Pagination, load more, and infinite scroll have different state costs

Choose continuation based on comparison behaviour, catalogue size, return paths, accessibility, shareability, and technical stability. No pattern is automatically correct for every product grid.

Pagination

Strength: Stable locations, shareable pages, clear progress, easier return paths

Risk: Page boundaries can interrupt comparison and shift when ranking changes

Implement: Preserve query, filters, sort, page, and stable ordering in the URL.

Load more

Strength: Shopper controls expansion while prior products remain visible

Risk: History and return position fail if loaded state is not recorded

Implement: Announce additions, preserve focus, and update history or state deliberately.

Infinite scroll

Strength: Continuous exploration for catalogs where open-ended browsing is appropriate

Risk: Footer access, focus, position restoration, memory, and dynamic-content interoperability

Implement: Use a tested loading and accessibility contract, not scroll events alone.

Stable ordering matters across every pattern. Add a deterministic tie-break so the same product does not appear twice or disappear between segments when scores are equal.

As checked on July 28, 2026, the WAI-ARIA feed pattern documents a specific interoperability contract for dynamically loaded article feeds and warns that automatic loading creates usability and assistive-technology challenges. A product grid should not adopt role="feed" casually; choose and test semantics that fit the content.

WAI-ARIA feed pattern and dynamic-loading considerations

Chapter 8 · Design loading and failure

Preserve context while the answer changes

Loading treatment should match the scope of the change. A next-page request should not blank the entire grid. A sort or filter change should show its applied state immediately and prevent stale responses from taking ownership.

Reserve stable card geometry before media arrives. Use progress indicators and skeletons to communicate structure, not to imitate content the response may never return.

Scoped loading behaviour
LayerShowPreserveAvoid
Query changedCurrent query and a clear transition to its pending stateSearch field, applied intent, navigation controlOld results appearing to answer the new query
Filter or sort changedApplied state immediately and a scoped result updateControl focus, scroll context, previous stable layoutJumping to the page top without warning
Next segment loadingA progress indicator at the continuation boundaryExisting products, focus, current count definitionReplacing the entire grid
Card media loadingReserved image geometry and meaningful text as soon as availableCard order and action locationsLayout shift that moves a product under the pointer

Chapter 9 · Build the mobile result task

Preserve state when controls move into drawers and sheets

Mobile usually moves facets out of the persistent sidebar. The applied filter state cannot disappear with it. Show an active count or chips near the result header and make removing a value possible without reopening the whole drawer.

Decide whether filter selections apply immediately or on an Apply action. Immediate updates need stable focus and responsive counts. Staged updates need a clear pending state, result preview or count boundary, Apply, and Reset behaviour.

Filter · active
Sort
Waterproof × Available ×

Mobile verification

  • Query, result state, and applied filters remain visible near the top of the result task.
  • Filter and sort controls are distinct, labeled, and report active state.
  • The filter drawer preserves selections until Apply, or updates immediately under an explicit model.
  • Closing the drawer returns focus to the control that opened it.
  • Product cards expose the fields required for this query without hover.
  • Grid density adapts without making titles, prices, swatches, or touch actions ambiguous.
  • Loading, empty, and error states fit above the virtual keyboard and browser chrome.
  • Returning from a product restores query, filters, sort, loaded segment, and scroll position.

Chapter 10 · Make dynamic results understandable

Announce status without moving the shopper’s focus

Search, filter, and sort updates can change results without a page navigation. Make the new status programmatically determinable while leaving focus at the control the shopper is using, unless a deliberate navigation requires another target.

W3C’s WCAG 2.2 example demonstrates using role="status" for a search-result message. Keep the announced message concise and do not put the entire changing result grid inside a live region.

Result status

Dynamic result-count or no-result changes are programmatically determinable without moving focus.

Evidence: Test with a screen reader after query, filter, and sort changes.

Heading and landmarks

The query result task, filters, controls, and result list have understandable structure.

Evidence: Navigate by headings, landmarks, lists, and form controls.

Product names

Each result link has a useful accessible name and repeated actions remain distinguishable.

Evidence: Read links out of surrounding visual context.

Filters

Labels, checked state, counts, groups, clear actions, and drawer behaviour are operable by keyboard.

Evidence: Apply and remove combinations without a pointer.

Dynamic loading

Added products, busy state, focus, and position remain understandable.

Evidence: Load another segment with keyboard and screen reader.

Visual state

Match emphasis, sale, stock, selection, and error do not rely on colour alone.

Evidence: Inspect high contrast and non-colour cues.

W3C search-results status-message example

Chapter 11 · Instrument the result task

Connect the search response to visible products and outcomes

Clicks alone cannot distinguish good ranking from a confusing card or a recovery path from an exact match. Preserve query, match state, filters, sort, result and variant identity, position, continuation, and recovery context.

In the worked journey, a correction is only useful if it remains attached to the response, the projected card, and the destination. Read events as a chain: request interpretation, returned candidate, visible evidence, control change, handoff, then outcome. A high click rate cannot tell you which link in that chain broke.

search_results_request

Context: Query, request ID, filters, sort, page or cursor, market, locale, device

Decision: Coverage, latency, and state reproduction

search_results_response

Context: Request ID, match state, count type, result IDs, facets, continuation, index or rule version

Decision: Retrieval, ranking, filtering, and response integrity

search_results_impression

Context: Result ID, variant, position, query, visible rule, page or segment

Decision: Opportunity and position-aware engagement

search_result_select

Context: Result, variant, position, card action, destination, match evidence

Decision: Qualified result engagement and handoff

search_filter_change

Context: Facet, values, previous state, next state, result count boundary

Decision: Filter usefulness and dead ends

search_sort_change

Context: Previous sort, next sort, query and filter state

Decision: Sort demand and downstream quality

search_recovery_action

Context: Original query, match state, correction, relaxation, category or substitute path

Decision: Recovery effectiveness without hiding failures

search_destination_outcome

Context: Result or recovery context, product, variant, cart, purchase, return

Decision: Downstream value under a declared attribution policy

For query-level metrics and the operating review, use the Shopify search analytics framework.

A native pagination or load-more implementation may be the better choice when stable URLs, keyboard return paths, and predictable comparison matter more than continuous browsing. A richer search product is justified only when it can preserve the response contract across those states and the store can verify the result on its own catalogue.

Chapter 12 · Apply the guide to one results journey

Trace one query through response, presentation, controls, and outcome

A results page is the visible composition of several systems. Retrieval chooses candidates; the response describes the match; controls narrow or reorder it; cards explain each option; and the handoff preserves the chosen product or variant. The purpose of this trace is to find the first layer that stops agreeing with the buyer’s request.

Do not start with a generic popular query that nearly every implementation can pass. Use a small judged set covering identifier, attribute, correction, filtering, variant, no-match, and failure behaviour. The outcome is a diagnosis and an owner, not a single subjective page score.

Worked diagnosis · illustrative

For “waterproof work boot”, suppose the response contains the correct variant IDs, but the first card shows the parent product’s image and price. The page looks relevant while the buyer is being asked to trust the wrong sellable state.

Evidence to compare

  • Raw response: product and variant IDs, match state, price, availability.
  • Rendered card: image, title, visible attribute, price, stock, and action.
  • Handoff: product URL, selected option, cart line, market, and currency.

Decision and replay

If the response is right and the card is wrong, the owner is projection or rendering, not ranking. Repair that layer, then replay the same query with a near-miss, sold-out variant, and product return path. Keep the change only when the card and handoff still agree.

  1. 1

    Choose a query family and expected records

    Use an exact product, identifier, normal phrase, attribute query, misspelling, and no-match case as separate tests.

    Output: A small judged set with expected match state and useful products.

  2. 2

    Capture the response contract

    Record query, match state, result and variant IDs, order, count type, facets, sort, continuation, and diagnostic version.

    Output: Evidence of what the search system returned.

  3. 3

    Inspect the answer header

    Check the visible query, correction or relaxation, count label, active filters, sort, and recovery explanation.

    Output: A transparent answer-state verdict.

  4. 4

    Judge the first result set and cards

    Compare returned records with visible cards, variant context, price, availability, match evidence, and destination.

    Output: Retrieval defects separated from rendering defects.

  5. 5

    Exercise filters, sort, and continuation

    Apply, combine, remove, share, refresh, navigate back, and load another segment.

    Output: A state, URL, ordering, and focus defect list.

  6. 6

    Repeat on mobile and keyboard

    Use filter drawer, sorting, grid, product actions, loading, recovery, and return-from-product paths.

    Output: Responsive and accessibility repairs tied to real states.

  7. 7

    Throttle, empty, and fail the request

    Test loading, zero match, relaxed match, request error, and stale response behaviour.

    Output: Proof that each state is distinct and recoverable.

  8. 8

    Verify the analytics trace

    Connect request, response, impression, selection, filter, sort, recovery, destination, and outcome.

    Output: One reproducible search-to-outcome path.

The audit should name the first divergent layer. A missing expected product is a retrieval, eligibility, or ranking question before it is a grid-design question. A correct returned variant with the wrong image or price is a projection and card question before it is a relevance question.

The page should make the search system’s answer inspectable

Show the query and match boundary, render the right product state, make filters and sort explainable, preserve continuation and history, and keep recovery distinct from exact results.

ParticleSearch is a fit when the store wants these behaviours to come from the search product rather than a collection of theme templates. The full results page keeps the submitted query, active filters, result count, sorting, pagination, and product grid in one stateful experience. It can also serve Shopify collection pages when collection browsing is configured, while keeping the collection as the browsing scope.

Merchants can choose contained, wide, or full-width layouts; sidebar, top, or drawer filters; grid density and desktop column count; and product-card signals such as vendor, sale state, swatches, descriptions, ratings, and quick add. Quick add is limited to an exact available variant. When another option is required, the product page remains the honest next step.

With the current storefront integration enabled and the published theme verified against the same acceptance set, the team can review filters, cards, and variant handoff as one connected result experience. ParticleSearch does not make the source data, commercial policy, or shopper-job judgement disappear; the merchant still owns those boundaries.

For the input experience before submission, read the autocomplete mechanism guide. For the overall retrieval and ranking system, continue with the ecommerce search relevance guide. The ParticleSearch storefront guide shows the current modal, full-page, filter, card, and handoff controls.

Continue to faceted navigation

The decision in one sentence

A results page is ready when it makes the query, match boundary, product evidence, active constraints, and recovery path legible enough for a shopper to compare without reconstructing the search state.

Reader-run acceptance test

  1. Response: replay a correction, exact identifier, filter, no-match, and error case; confirm the page tells the truth about each state.
  2. Evidence: compare returned product and variant identity with image, price, availability, card action, and the selected option.
  3. Continuity: change a filter or sort, move through continuation, go back, and verify that query and narrowing state survive.
  4. Handoff: open the product and cart on desktop, mobile, and keyboard focus; keep the design only when the same sellable state survives.

If one check fails, name the first divergent layer and fix or roll back that layer before treating the results page as ready.