Skip to article
Product Recommendations 2026-07-15 33 min read

Product Recommendation Analytics: Events, Metrics, Attribution, and Experiments

Product recommendation analytics are trustworthy only when you can connect a specific request to the candidates returned, the candidates actually seen, the action taken, and the purchasable line item that followed.

Start with the event chain, not the dashboard. Define each denominator, preserve the anchor and candidate identity, validate the joins, and separate attributed outcomes from incremental outcomes.

A traceable recommendation path

Request

Response

Visible

Action

Outcome

The request ID connects system output to storefront opportunity. Candidate and variant IDs connect that opportunity to interaction and order lines.

Chapter 1 · Build the event chain

Measure opportunity before measuring persuasion

A click rate is meaningless when the denominator includes candidates that never entered the viewport, excludes empty recommendation requests, or blends several modules with different jobs.

The chain starts before a product card appears. Capture the request and response so a low visible-impression count can be separated into missing requests, empty candidate sets, rendering failures, and below-fold placement.

Request

recommendation_request

A specific context asked for candidates.

Request ID, module, anchor, intent, market, locale, model or rule version

Common gap

A dashboard starts at click, so missing coverage and failed requests are invisible.

Response

recommendation_response

The system returned a candidate set before rendering.

Request ID, candidate IDs, positions, scores or reasons, exclusions, latency

Common gap

Only the final visible cards survive, so retrieval and eligibility cannot be separated.

Visible impression

recommendation_impression

A module or candidate had a real opportunity to be seen.

Request ID, module, candidate, position, visibility rule, timestamp

Common gap

An API response or DOM render is counted as an impression even below the viewport.

Interaction

recommendation_click or direct_add

The shopper acted on a specific candidate.

Request ID, candidate, variant, position, action, destination

Common gap

The click loses recommendation parameters when a custom card rebuilds the URL.

Commercial outcome

cart, checkout, purchase, refund

The candidate reached a downstream state under a declared attribution policy.

Line item, variant, quantity, order, value, currency, attribution evidence

Common gap

Order revenue is joined to the session but not to the recommended line item.

Define “visible” before implementation. A response, DOM node, and visible candidate are different states. Record the viewport and duration rule your team uses, then apply it consistently across modules. The exact rule can vary by product and analytics system; the definition cannot remain implicit.

Chapter 2 · Define the event contract

Keep enough context to explain every number

An event name says what happened. The surrounding fields explain which recommendation system, surface, anchor, candidate, shopper context, and purchasable record were involved. Agree on this contract before building reports.

Identity

event_id, occurred_at, session_id, visitor_id or customer_id

Deduplicate events, order them, and connect anonymous and known journeys under an explicit policy.

Recommendation request

request_id, module_id, placement, anchor_type, anchor_id, intent

Connect the candidate to the page state and shopper job that produced it.

Decision system

candidate_source, rule_version, model_version, experiment_id, variant

Explain which logic produced the set and compare changes without relying on deploy dates.

Candidate

product_id, variant_id, position, relationship_reason, eligible_state

Measure exposure and outcome for the actual purchasable record in the actual position.

Storefront context

market, locale, currency, device class, page type, cart state

Diagnose behavior that changes with publication, price, language, layout, or existing cart items.

Outcome

action, order_id, line_item_id, quantity, net sales, margin, refund state

Separate attention from purchase and gross attributed value from retained commercial value.

Use a unique event ID or a stable idempotency key. Browser retries, queue retries, page restoration, and duplicate listeners can otherwise turn one action into several events.

Keep both product and variant identity when the candidate can resolve to a variant. A product-level click attributed to the wrong order-line variant can hide stock, price, or compatibility failures.

Treat model, rule, and experiment versions as event data. A date filter cannot reliably explain which logic produced a candidate when releases overlap, caches persist, or traffic is split.

Chapter 3 · Define the metrics

Write the numerator and denominator beside the metric

“Recommendation conversion rate” can mean purchases per impression, per click, per session with recommendations, or per order. Each definition answers a different question. Use plain names and display the formula in the report.

Keep counts beside rates. Counts expose reach and data loss. Rates compare efficiency under a stable definition. Neither is sufficient on its own.

A metric dictionary for recommendation coverage, engagement, and outcomes
MetricNumeratorDenominatorIt answersIt does not answer
Request coverageEligible contexts that created a recommendation requestContexts where the module was intended to runIs the surface wired and eligible to ask for recommendations?Whether the candidates are relevant
Non-empty response rateRequests with at least one eligible candidateRecommendation requestsCan retrieval and eligibility produce a usable set?Whether the shopper saw the module
Visible impression rateRendered modules or candidates that met the visibility ruleNon-empty responsesDid returned candidates receive a real opportunity to be seen?Whether the relationship was persuasive
Click-through rateVisible impressions with a recommendation clickVisible recommendation impressionsDid the relationship and presentation earn an interaction?Whether the candidate survived product evaluation
Post-click add rateRecommendation clicks followed by an attributed candidate addRecommendation clicksDid the destination confirm fit, price, availability, and options?Whether the order completed
Attributed purchase rateAttributed candidate purchasesThe declared exposure or click baseHow often did the measured recommendation path reach purchase?How many purchases were caused by the recommendation
Attributed valueNet sales, units, or margin attached to attributed line itemsOptional: exposure, session, order, or moduleWhat commercial value is associated with the declared path?Incremental lift without a valid counterfactual

Metric definition template

Name and decision

What do we call the metric, and which decision is it allowed to influence?

Population and formula

What is included, what is excluded, and what are the numerator and denominator?

Identity and time

Is this candidate, module, session, visitor, order, or line-item based, and which clock assigns the period?

Attribution and caveat

Which interaction qualifies, how long does credit persist, and what can the metric not prove?

Chapter 4 · Understand Shopify’s reporting boundary

Use the native reports, then document what your implementation adds

As checked on July 28, 2026, Shopify’s Search & Discovery app exposes recommendation click rate, purchase rate, and a low-engagement report for recommendations on top-selling products. The app view uses the last 30 days; Shopify directs merchants to Analytics reports for other date ranges.

Shopify’s Ajax Product Recommendations API also returns product URLs with recommendation tracking parameters. If a custom theme or storefront reconstructs those URLs and drops the parameters, Shopify’s native reporting path may lose the context it expects.

Those reports are useful for storefront performance review. They do not replace a request, response, visibility, eligibility, model-version, or controlled-experiment dataset when your team needs to diagnose the recommendation system itself.

Chapter 5 · Validate data quality

Prove the events and joins before interpreting performance

A polished dashboard can faithfully visualize broken instrumentation. Run data-contract tests on the raw or modeled events before deciding that a recommendation, placement, or model is weak.

Uniqueness

Test

Each event_id is unique, or the pipeline has a documented idempotency key.

Failure signal

Retries create extra impressions, clicks, or purchases.

Referential integrity

Test

Every candidate impression and click maps to a known request and candidate.

Failure signal

Outcome reports contain orphan actions that cannot be explained.

Count ordering

Test

Within one definition, downstream unique sessions or candidates do not exceed upstream opportunity.

Failure signal

The denominator, identity, time window, or join differs between stages.

Timestamp order

Test

Request precedes response, impression precedes click, and purchase follows the qualifying interaction.

Failure signal

Client clocks, delayed delivery, or attribution logic corrupts sequence.

Candidate identity

Test

Product and variant IDs remain stable from response through order line.

Failure signal

A product-level recommendation is credited for a different or unavailable variant.

Context continuity

Test

Placement, anchor, intent, market, and experiment survive into interaction events.

Failure signal

One blended rate hides which module or system changed.

Late outcomes

Test

The pipeline updates prior cohorts when orders, cancellations, or refunds arrive later.

Failure signal

Recent periods appear artificially weak or gross value never reconciles.

A count-ordering violation is a diagnostic signal, not automatic proof of duplicate data. Different units, time windows, attribution windows, late events, or identity policies can also make downstream counts appear larger. Compare like with like before repairing the pipeline.

Chapter 6 · Diagnose the first weak handoff

Turn the funnel into a repair queue

Start with the earliest stage that does not behave as expected. A low purchase count does not justify changing the ranking model when the module rarely enters the viewport or the click loses candidate identity.

Observed pattern, likely layer, and first inspection
Observed patternLikely layerInspect first
Expected contexts but few requestsTheme, route, eligibility trigger, consent, or instrumentationCompare intended placements with observed request events.
Requests but many empty responsesCandidate retrieval, publication, stock, exclusions, cold start, or intentInspect returned and excluded candidate IDs for one anchor.
Responses but few visible impressionsRendering, lazy loading, below-fold placement, layout, or visibility logicReplay one response in the actual viewport and verify the impression threshold.
Impressions but few clicksRelationship, heading, order, card data, repetition, or placementJudge the first visible set in context before changing the model.
Clicks but few candidate addsPrice, availability, variant choice, compatibility, destination, or intent mismatchFollow a known candidate from card to purchasable state.
Adds but few purchasesCheckout friction, delivery, price, cart conflict, or attribution joinSeparate business drop-off from missing purchase linkage.
Attributed value rises but the store outcome does notChannel substitution, broad attribution, cannibalization, or mix shiftRun or review a controlled comparison with business guardrails.

Open the storefront while reviewing the queue. The report identifies where to inspect; the visible product relationship and trace reveal what to change. For missing or empty native modules, use the Shopify recommendation diagnostic.

For weak engagement on a working module, compare the recommendation job, candidate source, eligibility, relationship reason, card data, and page position using the placement guide.

Chapter 7 · Segment without losing the question

Break out dimensions that can change the decision

A store-wide recommendation average can show direction, but it cannot tell you whether a cart add-on, product-page comparison, or search-recovery module needs repair. Segment when the dimension maps to a different mechanism or action.

Placement and module

Product page, search recovery, cart, and post-purchase solve different jobs.

Boundary: Do not compare their rates as though they share the same opportunity.

Recommendation intent

Related, complementary, substitute, bundle, and replenishment have different actions.

Boundary: A click may be appropriate for comparison while direct add suits a simple accessory.

Anchor and category

Coverage, catalog evidence, and product economics vary by anchor.

Boundary: High-volume anchors can dominate a store-wide average.

Candidate source or version

Manual, rules, behavioral, and model candidates should be auditable separately.

Boundary: A release-date split is weaker than an event-level version.

Market, locale, and device

Eligibility, price, language, viewport, and interaction can change the path.

Boundary: Do not create tiny cuts that cannot support a stable decision.

New, returning, or known shopper

Available context and purchase history change the recommendation problem.

Boundary: Respect consent and avoid treating identity stitching as certain when it is not.

Create a repair queue with anchor, module, intent, source or version, failing stage, evidence, owner, and next test. Sort by decision value and reliable opportunity, not by the noisiest percentage.

Chapter 8 · Separate attribution from causality

Attributed revenue describes a rule; incremental lift needs a counterfactual

An attribution policy decides which recommendation interaction receives credit for an order. It is useful for journey analysis and operating reports, but another reasonable policy can assign different credit to the same order.

Write the qualifying interaction, window, scope, identity rule, order-line rule, and treatment of returns beside the metric. Distinguish the recommended product being purchased from any product being purchased after a recommendation interaction.

Causality asks a different question: what would have happened without this recommendation experience? Answer that with a valid holdout or controlled alternative, not a wider attribution window.

Attribution report

Which measured path receives credit?

  • Define the qualifying impression or click.
  • Define the time and identity boundary.
  • Define candidate, line-item, and order scope.
  • Reconcile cancellations, refunds, and late outcomes.

Incrementality study

What changed because of the experience?

  • Create a credible treatment and comparison.
  • Assign before exposure and preserve assignment.
  • Measure a business outcome and experience guardrails.
  • Report effect, uncertainty, integrity, and limitations.

Chapter 9 · Design the experiment

Test a recommendation decision, not a dashboard color

A useful experiment changes a named layer: candidate generation, eligibility, ranking, set constraints, placement, heading, card data, or action. The hypothesis should explain why that layer causes the observed failure.

Assign the experiment before recommendation exposure and record the assignment even when the module is empty. Excluding empty responses after assignment makes a treatment with higher coverage look different from the population it actually affected.

Experiment design checklist

  1. 1 State the decision and hypothesis before looking at outcomes.
  2. 2 Assign the experimental unit before recommendation exposure and keep it stable.
  3. 3 Record the assignment even when the module returns no candidates.
  4. 4 Change the layer named by the hypothesis: placement, candidate source, ranking, set constraints, card, or heading.
  5. 5 Choose one primary business outcome and a small set of experience guardrails.
  6. 6 Estimate the required sample from the baseline, minimum useful effect, allocation, and error tolerance.
  7. 7 Run long enough to cover the relevant shopping cycle and known calendar effects.
  8. 8 Inspect treatment integrity, exposure, contamination, missing events, and segment balance.
  9. 9 Report uncertainty and practical effect, not only whether a threshold was crossed.
  10. 10 Keep a decision log so a later model or merchandising change does not erase the lesson.

Do not copy a universal sample-size threshold. Required sample depends on the baseline, experimental unit, minimum effect worth acting on, allocation, variance, and accepted error. Estimate it for the primary metric, then state what the available sample can and cannot resolve.

Chapter 10 · Build a decision dashboard

Show system health, shopper response, and the repair queue

A dashboard should reveal what changed, where it changed, and what to inspect next. Use a compact overview backed by traceable detail rather than one blended revenue tile.

Recommendation health

Filters: period, placement, intent, source, version, market, locale, device

Definitions

Coverage

Requests and non-empty responses

Opportunity

Visible module and candidate impressions

Response

Clicks, direct adds, and destination behavior

Outcome

Orders, net value, margin, and refunds

Stage trend

Schematic only. Use real counts from one cohort and one definition when implementing this dashboard.

Repair queue

Empty responses for a defined anchor group
Visible modules with weak qualified action
Broken candidate-to-order joins

Chapter 11 · Run the analytics audit

Trace one candidate before scaling the dashboard

One complete trace exposes more measurement risk than another layer of aggregate charts. Use a controlled context and save the event evidence at each handoff.

  1. 1

    Choose one module and one anchor

    Fix the placement, page state, market, locale, device, cart state, and expected candidate relationship.

    Output: A reproducible recommendation context.

  2. 2

    Capture request and response

    Record request ID, candidate IDs, positions, intent, source or version, exclusions, and response time.

    Output: Proof of what the decision system produced.

  3. 3

    Verify a visible impression

    Confirm the module and candidate meet the declared visibility rule instead of counting only a DOM render.

    Output: One trustworthy opportunity-to-see event.

  4. 4

    Follow one interaction

    Click or directly add one candidate and confirm identity, context, and tracking survive.

    Output: A connected request, impression, and interaction.

  5. 5

    Trace the candidate to the order layer

    Verify the candidate variant and line item can be joined under the chosen attribution policy.

    Output: A documented path from candidate to commercial outcome.

  6. 6

    Run integrity checks

    Test uniqueness, joins, timestamps, count ordering, context continuity, and late outcomes.

    Output: A list of data defects separated from experience defects.

  7. 7

    Build the first repair queue

    Segment by placement, intent, anchor, source, market, locale, and device only as far as the data supports.

    Output: Prioritized cases with a failure layer, owner, and next test.

The output is not “analytics installed.” It is a verified trace, a metric dictionary, a data-quality report, a segmented repair queue, and a declared attribution or experiment policy.

Build the measurement system that can explain the recommendation system

A useful report preserves the path from decision context to commercial outcome. It tells you whether the system failed to produce candidates, the page failed to expose them, the relationship failed to earn action, or the measurement path failed to connect the action.

ParticleSearch carries this context through the recommendation surface. It records whether a shelf produced a visible set, returned empty, or failed; the strategy and placement in use; the product interaction; and the assigned experiment variant when a controlled comparison is running. That lets the merchant distinguish weak candidate quality from missing exposure or a broken delivery path.

The dashboard keeps recommendation evidence separate from search evidence, then connects lineage-verified recommendation touchpoints to Shopify-verified orders when the required evidence exists. Unattributed orders remain unattributed, and an attributed order is not presented as proof that the recommendation caused the purchase.

After a verified launch, the merchant should not need to reconstruct the shelf strategy from theme markup, infer exposure from clicks, or join a recommendation report to order exports by hand. ParticleSearch still needs enough traffic and a valid event path, and the merchant still chooses the business metric and guardrails. Missing evidence is reported as missing evidence, not as zero value.

For the wider strategy, continue with the ecommerce product recommendations guide. For the product-specific evidence model, read the ParticleSearch revenue-attribution guide.

Read the recommendation systems guide