Articles

UX 20 min read

Product Listing Page UX: The Complete Guide for Ecommerce

PLP usability mistakes that cost conversions: layout, thumbnails, filters, sorting and the features that make the difference in ecommerce.

Jonathan Valenzuela
Jonathan Valenzuela SEO and digital marketing consultant
In this article 10 sections
  1. The PLP as a decision filter
  2. Listing layout: the first impression
  3. Thumbnails: the visual shop window
  4. List item information
  5. List item features
  6. Filters: what to offer
  7. Filters: logic and behavior
  8. Filters: interface and layout
  9. Sorting the listing
  10. The real cost of a badly designed PLP

The PLP as a decision filter

The Product Listing Page (PLP) is where users decide whether your catalog is worth their time. I’ve been auditing ecommerce sites for years and the pattern repeats itself: the user never gets to see the product because the listing page has already driven them away. According to Baymard Institute, with more than 18,000 usability sessions, PLP problems are among the main causes of early abandonment.

The problem isn’t aesthetic. It’s structural. A badly designed PLP hides relevant products, confuses with useless filters and frustrates with insufficient information.

Listing layout: the first impression

Group product variations

One of the most costly mistakes I see in audits: showing each color or size variation as a separate product. If you sell a T-shirt in 8 colors, the user sees 8 almost identical products taking up the listing.

ApproachBehaviorResult
Separate variations8 identical items in the gridThe user loses context, the catalog feels repetitive
Grouped variations1 item with color swatchesThe catalog feels more varied, navigation is more efficient

The rule: group variations of the same product into a single listing item. Use swatches or selectors to show the available options.

Grid view vs. list view

Not every product looks equally good in a grid. After analyzing dozens of ecommerce sites, I’m clear on this:

Type of productBest viewReason
Fashion, home decor, artGridVisual decision, comparing aesthetics
Electronics, toolsListTechnical specs visible
GroceriesGridVisual product recognition
Software, servicesListComparing features and prices

For visually differentiated products (fashion, home decor), use grid view by default. For spec-driven products (electronics, software), list view lets you show more information without forcing users to open every product page.

On mobile, consider offering a single column for list items that need technical information. Two columns work well for visual products, but they squeeze the information too much for complex products.

Pagination vs. infinite scroll vs. load more

MethodProsConsBest for
PaginationUser control, easy to go backMore clicks, fragments the experienceLarge catalogs, users who compare
Infinite scrollSmooth, no interruptionsImpossible to reach the footer, hard to go backInspiration feeds, casual browsing
Load moreA balance, the user is in controlRequires an explicit actionMost ecommerce sites

For ecommerce, my recommendation is clear: load more with a button that says how many products are left to load. Infinite scroll has severe accessibility problems and makes it impossible to reach the footer, where contact details and policies usually live.

If you use infinite scroll, add anchors to the URL so users can return to the same point after visiting a product page. Without this, users lose their position and have to scroll from the top again.

Default number of products

Showing too few products forces constant pagination. Showing too many slows loading and overwhelms.

DeviceRecommended productsReason
Desktop24-48Enough to explore without excessive scrolling
Tablet16-24Balance between density and performance
Mobile12-16Natural vertical scroll, fast loading

Let users change this value. Some prefer to see 100 products at once, others 12. The default should be sensible, but not the only option.

Thumbnails: the visual shop window

Enough visual information

The thumbnail should let users evaluate the product without clicking. This principle is fundamental and I see it broken all the time. For visual products, this means:

  • The whole product visible, not cropped
  • A background that doesn’t compete with the product
  • A size large enough to appreciate details
  • Adequate image quality (no pixelation)
Common mistakeImpactSolution
Thumbnail too smallThe user can’t evaluate itAt least 200x200px on desktop
Cropped productLoses context and proportionsShow the whole product
Distracting backgroundMakes comparison harderConsistent neutral background
Low qualityThe product feels cheapOptimized but sharp images

Multiple angles on hover

For products where the angle matters (furniture, clothing, accessories), showing additional images on hover speeds up evaluation:

<!-- Example of a thumbnail with hover -->
<div class="product-thumbnail">
  <img src="product-front.webp" alt="Product, front view" class="default">
  <img src="product-side.webp" alt="Product, side view" class="hover">
</div>

On mobile, where there’s no hover, consider a small carousel inside the thumbnail or the ability to swipe between images.

Thumbnails for color filters

When the user filters by color, the thumbnail should show the product in that color, not in the default color. It sounds obvious, but I’ve lost count of how many ecommerce sites show the product in white even though the user filtered by red.

Products with multiple components

For packs, bundles or products that include accessories, the thumbnail should show every component included. If you sell a camera with a case, the thumbnail should show both.

List item information

Essential data in sight

Without opening the product page, users should be able to see:

DataCriticalityWhy
PriceMandatoryThe main decision factor
Product nameMandatoryBasic identification
Average ratingHighSocial proof, quick comparison
Number of reviewsHighContext for the rating
AvailabilityHighAvoids post-click frustration
Available variationsMediumShows options without clicking through

Price: total clarity

The price must be unambiguous. These are the mistakes I find over and over again:

MistakeProblemSolution
”From €X” price with no contextThe user doesn’t know the real priceShow a range or the price of the product shown
Price excluding VAT in B2CA nasty surprise at checkoutAlways the final price including VAT
Discount without the original priceThe saving isn’t perceivedShow the struck-through price + the current price
Hidden unit priceMakes comparing multipacks harderShow the price per unit next to the total

For products whose price varies (sizes, colors), show the price of the variation shown in the thumbnail, not the minimum price.

Ratings: quantity and quality

Average ratings without context are misleading. I repeat it in every audit: a product with 4.5 stars and 3 reviews isn’t comparable to one with 4.3 stars and 500 reviews.

MetricWhat to showWhy
AverageStars or a numberQuick evaluation
QuantityNumber of reviewsCredibility of the average
DistributionOptional: distribution barSpotting polarizing products

The golden rule: average × quantity. A product with fewer stars but many more reviews is usually a better choice than one with a perfect score and few reviews.

Stock status

Showing availability in the listing keeps users from wasting time visiting sold-out products:

StatusHow to show itAction
In stockNo label neededNormal
Low stock”Last few left”Legitimate urgency
Sold out”Sold out” + a notification optionAllow a restock alert
Coming soonEstimated dateManage expectations

Don’t remove sold-out products from the listing entirely: users looking for a specific product need to know it exists even if it isn’t available right now.

Visual differentiation

In listings where products look alike (cables, components, white goods), add differentiators:

  • Badges: “Best seller”, “New”, “Sale”
  • Key attributes: capacity, dimensions, compatibility
  • Use labels: “For gaming”, “Professional”

These elements help users tell apart products that would otherwise look identical.

List item features

Color swatches

For products with color variations, swatches are mandatory in the listing:

ImplementationProblemSolution
No swatchesThe user doesn’t know which colors existAlways show swatches
Swatches that don’t update the thumbnailVisual disconnectUpdate the image on selection
Only some colors visibleThe user misses optionsShow all of them or say “+X more”
Swatches too smallHard to tell similar colors apartAt least 20x20px, ideally 24x24px

On mobile, make sure swatches have a large enough touch area (at least 44x44px including padding).

Saving to favorites

This point is non-negotiable: let users save products without creating an account. Forcing a login to save a product is a guaranteed way to lose them.

<!-- Wishlist without mandatory login -->
<button class="save-to-wishlist" aria-label="Save to favorites">
  <svg><!-- heart icon --></svg>
</button>

Use localStorage for users who aren’t logged in. When they create an account, migrate their saved favorites.

A comparison tool for technical products

For electronics, appliances and spec-driven products, a comparison tool is essential:

FeatureCriticality
Select products to compareMandatory
View the comparison as a tableMandatory
Complete specs in the comparisonMandatory
Explanation of technical specsHigh (inline help)
Highlight differencesMedium

The comparison table must have complete data. A comparison with empty cells is no use for making decisions.

Quick view for visual products

Quick view lets users see more information without leaving the listing. In my experience, it works well for fashion and home decor, where users want to see more photos without committing to the full product page.

Quick view contentInclude
Image galleryYes
Price and availabilityYes
Size/color selectorYes
Add to cartYes
Full descriptionNo (link to the product page)
Full reviewsNo (link to the product page)

On mobile, quick view is less useful because it takes up the whole screen anyway. Consider whether it really adds value or whether going straight to the product page is better.

Adding to cart from the listing

For repeat-purchase products (consumables, basics), let users add to cart straight from the listing:

Type of productAdd from the listing
Simple product, no variationsYes
Product with mandatory variationsNo (requires a selection)
Expensive or complex productNo (a more considered decision)
Repeat purchase (same customer)Yes, ideally with “buy again”

Indicator for products already in the cart

If the user already has a product in the cart, show it visually in the listing. It prevents accidental duplicates and helps people pick up interrupted purchases.

Filters: what to offer

Mandatory filters

Whatever the sector, these filters should always be there. They aren’t optional:

FilterReason
PriceThe main decision factor
User ratingSocial proof, perceived quality
ColorAlmost always relevant
SizeCritical for fashion, furniture, etc.
BrandPreferences and trust

Category-specific filters

Each category needs its own filters based on the attributes that differentiate the products:

CategorySpecific filters
ElectronicsCapacity, resolution, connectivity
FashionMaterial, style, occasion
GroceriesAllergens, certifications, origin
FurnitureMaterial, dimensions, style
CosmeticsSkin type, ingredients, format

The attributes that differentiate products should be filters, not separate categories. If you sell coats and jackets, “Garment type” is a filter inside “Coats and jackets”, not two separate categories.

Themed filters

Not every user knows exactly what they’re looking for. Themed filters help:

Traditional filterThemed filter
Category > Subcategory”Gifts for him”
Color + Material”Office look”
Price + Brand”Under €50”
Technical attributes”For sensitive skin”

These filters work especially well for occasions (weddings, vacations), recipients (gifts) and problems the user wants to solve.

Status filters

FilterUsefulness
On sale / ReducedHigh demand, saves time
New inReturning users
Best sellersSocial proof, quick decision
Available nowAvoids frustration

Filters: logic and behavior

AND vs. OR logic

Combining filters must follow predictable logic. It seems basic, but I’ve seen implementations get it terribly wrong:

CombinationLogicExample
Across filter typesANDColor:Red AND Size:M
Within the same filterORColor:Red OR Color:Blue

If the user selects red and blue, they want to see red OR blue products, not products that are red AND blue at the same time.

Allow multiple selection

Forcing users to pick a single value per filter is limiting. If I want to see products in red, blue or green, I need to be able to select all three:

<!-- Wrong: radio buttons (a single value) -->
<input type="radio" name="color" value="red">
<input type="radio" name="color" value="blue">

<!-- Right: checkboxes (multiple values) -->
<input type="checkbox" name="color" value="red">
<input type="checkbox" name="color" value="blue">

Show the number of results

Every filter option should show how many products match:

Without a counterWith a counter
☐ Red☐ Red (45)
☐ Blue☐ Blue (12)
☐ Green☐ Green (0)

The counter should update in real time as other filters are applied. If I’ve already filtered by size M, the color counter should only count products in size M.

Consider hiding or disabling options with 0 results to avoid frustration.

Explain technical filters

Filters that use sector-specific terminology need an explanation:

<!-- Filter with an explanatory tooltip -->
<label>
  <input type="checkbox" name="ipx7">
  IPX7
  <button aria-label="What does IPX7 mean?">ⓘ</button>
</label>

The tooltip or modal should explain in plain language what the term means and why the user might care.

Filter persistence

Applied filters must persist when:

  • The user goes to a product page and comes back
  • The user uses the browser’s “Back” button
  • The user moves to another page of the listing

Resetting filters for no reason is one of the most reported frustrations in usability tests. I’ve seen it cause abandonment in eye-tracking sessions more times than I can count.

Visible, applied filters

Users should be able to see at all times:

  1. Which filters they’ve applied: chips or a list of active filters
  2. How to remove each filter: an X or a clear button on each chip
  3. How to remove all filters: “Clear filters”
<!-- Applied filters in plain sight -->
<div class="applied-filters">
  <span class="filter-chip">
    Color: Red <button aria-label="Remove filter">×</button>
  </span>
  <span class="filter-chip">
    Size: M <button aria-label="Remove filter">×</button>
  </span>
  <button class="clear-all">Clear filters</button>
</div>

Filters: interface and layout

Number of visible options

Showing too many filter options overwhelms. My rule: 4-8 options visible at first, the rest behind “Show more”:

Number of optionsTreatment
1-8Show them all
9-20Show 8 + an expandable “Show more”
21+Show 8 + a search box inside the filter

Numeric filters with free input

For price and other quantities, offering only predefined ranges is limiting:

ImplementationProblemSolution
Ranges only (€0-50, €50-100…)Doesn’t match the real budgetMin/max inputs
Slider onlyHard to be preciseSlider + numeric inputs
Inputs onlyLess visualInputs + visual feedback

The ideal combination: a slider for quick adjustment + numeric inputs for precision.

Accessing filters on mobile

On mobile, filters are usually hidden behind a button. That button should be:

  • Prominent: not a small icon that can be mistaken for decoration
  • Clearly labeled: “Filter” or “Filters (3)”, saying how many are active
  • Accessible: fixed or sticky so it can be reached without scrolling
<!-- Accessible mobile filter button -->
<button class="filter-toggle" aria-expanded="false">
  <svg><!-- filter icon --></svg>
  Filter
  <span class="filter-count">3</span>
</button>

The “Apply” button on mobile

On mobile, filters usually open in a panel. That panel needs a sticky “Apply” button at the bottom:

Without a sticky buttonWith a sticky button
The user scrolls and loses the buttonThe button is always visible
They don’t know how to applyA clear, accessible action
They abandon the filter selectionThey complete the action

The button should show how many results match: “View 45 products”.

Order of filter options

The order of options in a filter isn’t trivial. For long lists (brands, colors):

Sort criterionWhen to use it
AlphabeticalLong lists where the user is looking for something specific
By popularityShort lists, the user is exploring
By relevanceContextual filters (based on other filters)

For brands: alphabetical. For colors: by popularity or grouped by family (blues, reds…). Never random.

Search inside long filters

If a filter has more than 20 options, add a search field:

<!-- Search inside the brand filter -->
<div class="filter-search">
  <input type="text" placeholder="Search brand..." aria-label="Search brand">
</div>
<ul class="filter-options">
  <!-- filtered options -->
</ul>

Sorting the listing

Sort options you can’t do without

CriterionWhy it’s needed
Price (low to high)Users on a limited budget
Price (high to low)Users looking for quality/premium
RatingDecisions based on social proof
Best sellers”What others are buying”
New inReturning users

Default order: diversity

I have a clear opinion here: the default order shouldn’t be “cheapest first” or “most expensive first”. It should show a diverse selection that represents the catalog:

Default orderProblem
Price ascendingThe user assumes everything is cheap
Price descendingThe user assumes everything is expensive
Best sellersHomogenizes, hides new products
Diversity/RelevanceRepresents the real catalog

A diversity algorithm mixes products from different price ranges, brands and popularity levels to give a complete picture of the catalog.

Clear labels

“Price: low to high” is clearer than “Price ascending”. Technical terms are for developers, not users:

TechnicalClear
Ascending/DescendingLow to high / High to low
By ratingTop rated
By dateNewest

Show the current order

The sort selector should always show which criterion is applied:

<!-- Dropdown showing the current selection -->
<select aria-label="Sort by">
  <option value="relevance" selected>Relevance</option>
  <option value="price-asc">Price: low to high</option>
  <option value="price-desc">Price: high to low</option>
  <option value="rating">Top rated</option>
</select>

Sorting by rating: include quantity

When sorting by rating, don’t use the average alone. A product with 5 stars and 2 reviews shouldn’t appear before one with 4.7 stars and 500 reviews.

The formula should weigh both average and quantity. A simple approximation:

score = (average × reviews) / (reviews + k)

Where k is a smoothing factor (typically 10-50) that keeps products with few reviews from dominating.

The real cost of a badly designed PLP

A poor PLP doesn’t just lose the current sale: it creates the impression of a limited catalog or an unprofessional store. Users who can’t find what they’re looking for don’t assume the problem is the interface. They assume the product doesn’t exist.

I’ve seen ecommerce sites lose 15-25% of users during the catalog exploration phase because of PLP problems. It isn’t anecdotal: it’s a pattern.

The time you invest in optimizing the PLP has a direct impact on engagement metrics (pages per session, time on site) and on conversion. Google documents the importance of navigation structure for crawling in its SEO guide, and NNGroup has extensive research on filters and faceted navigation.

The investment in a well-designed PLP pays off in every user session. It isn’t just UX: it’s business.

Keep reading

See all articles