Technical

Hover Duration as an Intent Signal: What We Learned From 12 Months of DTC Data

7 min read
Abstract hover dwell time visualization concept

Hover events are one of the most abundant behavioral signals on a product grid page, and one of the most inconsistently used. Every cursor movement that passes over a tile generates a mouseover event. The overwhelming majority of these are accidental — a cursor moving from one part of the screen to another, passing over tiles in transit. The small fraction that represent actual evaluation behavior are the signal. The challenge is distinguishing between the two reliably enough to act on.

We've been building the hover duration signal layer in Revlance since the beginning and refining our threshold models continuously. What follows is a summary of what we've observed over the past 12 months across early-stage DTC brands, what the signal thresholds actually look like in practice, and where hover duration is useful versus where it's misleading.

The Threshold Problem

Hover duration events have no intrinsic meaning below a certain duration. A cursor that passes over a tile for 50ms is almost certainly in transit. At 200ms, it's still likely coincidental — a pause while the shopper oriented themselves on the page before continuing. At 400ms, you're in ambiguous territory. At 700ms and above, something is happening that merits attention.

Our working threshold for "evaluative hover" is 600ms, filtered to exclude hovers that are immediately followed by a scroll event. The scroll-exclusion filter matters because a shopper who pauses briefly before scrolling has hovered over tiles that happened to be in the scroll path, not tiles they were intentionally evaluating. Without that filter, hovers collected during scroll deceleration contribute noise to the signal.

The 600ms threshold isn't universal — it varies by product category and grid density. On a dense grid with small tiles, the eye-to-cursor alignment time is longer, and a shopper evaluating a tile may take slightly longer to position their cursor intentionally over it. On a sparse grid with large tiles, accidental hovers at 600ms are more common because tiles are harder to miss. We weight the 600ms threshold as a default and let it adjust over time based on grid-specific conversion rate data for hover-then-click events versus hover-only events.

What High-Confidence Hover Events Actually Predict

The most straightforward use of hover duration data is as a proxy for product consideration. When a shopper hovers on a tile for 800ms+ without clicking, and that hover is followed by additional browsing of the same page or a return visit, the hover-to-eventual-purchase rate for that specific product is meaningfully elevated compared to products the shopper scrolled past without hovering.

In the DTC apparel and accessories context — which is the vertical we have the most signal density from — we observe a consistent pattern: shoppers who hover on a product tile for 800ms+ without clicking have a subsequent visit purchase rate for that specific product roughly 2.5 to 3x higher than the baseline for products they viewed but didn't hover on, all else equal. This isn't a published study — it's an internal observation from the data we have access to through our integrations — but the pattern is consistent enough that we weight it meaningfully in our preference vector calculations.

That 2.5-3x figure is also why we're cautious about over-claiming hover's predictive power. It's elevated compared to baseline, but it's not a purchase signal on its own. The majority of high-duration hovers do not result in a purchase on the next session. They indicate consideration, not commitment. Treating a hover-heavy session as equivalent to a cart event in your personalization model will produce recommendations that are too narrowly focused on products the shopper evaluated and then consciously passed over.

Desktop vs. Mobile: Why Hover Data Has a Platform Bias

Hover duration tracking is a desktop-only signal. Mobile touchscreens don't generate hover events — the equivalent mobile event is a touch-hold, which is almost never part of a natural browsing flow and generates very different behavioral data. If more than 50% of your traffic is mobile (a common situation for DTC brands with strong social referral), your hover signal pool is smaller than your total session data would suggest.

This creates an important asymmetry: desktop sessions generate richer behavioral profiles from hover data, and mobile sessions rely more heavily on scroll depth, tap events, and session sequence data. A personalization system that weights hover duration heavily will over-fit to desktop users and produce weaker recommendations for mobile users.

We address this by maintaining separate signal weighting profiles for desktop and mobile sessions. For mobile, the equivalent of hover duration is a combination of tap-without-add-to-cart (tapping a tile to view more detail on a touch device is analogous to a long hover — it indicates evaluation), scroll deceleration rate near a tile, and return visits to the same product page. These signals are noisier individually, but combined they approximate what hover duration captures on desktop.

Hover Duration in Context: The Comparison Window

One of the more interesting patterns in hover data is the comparison window — the temporal cluster of hover events that occur when a shopper is comparing multiple products in the same grid view. A shopper who hovers on tile A for 900ms, moves to tile B for 1200ms, returns to tile A for 700ms, and then clicks tile B has given us a comparison pair (A vs B), a preference winner (B), and a strong signal that A is "second-best" in the shopper's current evaluation frame.

The second-best signal is underused. In most recommendation systems, a product the shopper evaluated heavily but didn't click is treated as irrelevant (they didn't click it, so it didn't convert). But a product that was closely compared to the eventual click target before losing the comparison has a different profile: it's relevant, the shopper was interested, and they made an active choice between two considered options. That's a candidate for a strong secondary recommendation — "others who bought B also looked closely at A" — particularly in cross-sell contexts.

Where Hover Data Gets Misleading

Hover duration signals can be distorted by page design elements in ways that aren't immediately obvious. Products that have interactive hover states — tiles that zoom in, show a secondary image, or display a quick-add button on hover — accumulate higher hover durations partly because the interaction itself takes time. A shopper who triggered the hover state and was looking at the secondary image for 1.2 seconds wasn't necessarily evaluating the product for 1.2 seconds — they may have been spending 0.3 seconds on actual consideration and 0.9 seconds looking at a secondary image they didn't request.

We're not saying hover states are bad design choices — there's good evidence that product tile hover states increase engagement. The point is that hover duration data should be interpreted relative to the page's interactive design. If you add a hover state to your product tiles, expect hover duration averages to increase, and don't interpret that increase as an improvement in shopper engagement or personalization signal quality without controlling for the design change.

Cursor idle events are another distortion source. A shopper who moves their cursor to a tile and then looks away from their screen — to take a phone call, respond to something — generates a long hover event that represents zero evaluative engagement. These are hard to filter out entirely, but a duration ceiling helps: a hover longer than 8-10 seconds is almost certainly an idle event and should be excluded from affinity calculations. An 8-second deliberate evaluation of a single product tile is extremely rare; a cursor left in place while the shopper was briefly distracted is common.

The Practical Signal Stack

Used correctly, hover duration is one of three or four behavioral signals that combine to produce a reliable within-session preference vector. On its own, it's a moderately noisy indicator of product consideration. Combined with scroll depth (which tells you what the shopper was willing to search through), page revisit count (which shows persistent consideration), and session-to-session pattern (which distinguishes new interest from established affinity), it becomes a meaningful input into per-shopper grid reranking.

The practical outcome, when this signal stack is built and applied consistently, is that returning shoppers land on a grid where products they've evaluated but haven't purchased yet are positioned where they can find them again — rather than buried by the default sort order that prioritizes global bestseller rank over individual browsing history. That's the gap between a recommendation system that learns from confirmed actions (purchases, clicks) only, and one that learns from the full behavioral trace a shopper leaves during their consideration process.

More from the blog

Browse all articles