Back to blog
|8 min read

Measuring Product List Performance in GA4: Impressions, Clicks, and CTR

Product list performance data, which products users see, which they click, and which they buy, is essential for merchandising decisions. GA4's two list events make this possible, but they're among the most commonly misconfigured in e commerce implementations.

The two events and when to fire them

  • view_item_list: fires when a user sees a product listing, a category page, search results page, or recommendation widget. It should include the items array with all visible products and the parameter identifying the list context (e.g., "Category: Men's Shoes", "Homepage Recommendations").
  • select_item: fires when a user clicks a product in a list to view its detail page. It should include the specific item clicked plus the same used in the preceding view_item_list. This connection enables CTR calculation: clicks from select_item divided by impressions from view_item_list.

The index parameter and position tracking

Each item in the list should have an index parameter indicating its position (1-based). This is what enables GA4 to show you which position in the list drives the most clicks, and therefore which products benefit from placement in the top positions.

Without the index parameter, you know what users clicked but not where in the list it appeared.

Position data is especially valuable for A/B testing merchandising decisions, does moving a product from position 4 to position 1 increase its CTR, and by how much?

Common implementation problems

The most common issue: view_item_list fires on page load with all products regardless of whether they're visible.

Users who land on a category page and immediately scroll to a product near the bottom register impressions for all 48 products above the fold, inflating impression counts and deflating CTR.

Use an IntersectionObserver to fire impressions only when products are actually visible in the viewport.

The second most common problem: item_list_name inconsistency. If "Category: Women's Dresses" on one page is labelled "women_dresses" on another, GA4 treats them as different lists.

Standardise list names in your data layer schema and audit for consistency across all list surfaces.

Ready to audit your GA4 property?

Run a full GA4 audit in under 10 minutes. Free to start.

Start Free Audit