The X algorithm in May 2026

Dwell time is the new like: the 4 dwell heads ranking your posts

The 2023 ranker had one weighted dwell-related term. The 2026 ranker has four. dwell_score is the discrete recap-dwell head (CLIENT_TWEET_RECAP_DWELLED, index 11). dwell_time is its continuous-regression sibling. click_dwell_time is dwell-after-click, a far stronger trust signal than the click itself. not_dwelled_score is the implicit penalty for scroll-past. Video has its own quality-view head (vqv_score, index 13) gated by MIN_VIDEO_DURATION_MS. This article unpacks each, explains why dwell is harder to game than likes (it is conditioned on history, not on social proof), and gives a writing playbook for posts that halt scroll: hook density, line-break rhythm, and the "second-line payoff" pattern. Voice tools that optimize headline-only metrics will systematically underperform on dwell.

May 23, 2026 · 13 min read · VoiceMoat team

In the 2023 X ranker, dwell appeared as a single weighted term, set so low (0.0001 per millisecond in the leaked weights) that most algorithm coverage treated it as a rounding error. In the 2026 ranker, dwell appears four times. Discrete dwell at index 11 (phoenix/run_pipeline.py). Continuous dwell time as a regression head. Click-dwell time as a separate post-click signal. And an implicit not_dwelled_score in home-mixer/scorers/vm_ranker.rs's PhoenixScores proto for the impressions where dwell never happened. Together they form a four-head dwell economy that contributes more to the weighted score for most posts than the visible-engagement heads do. This article walks each of the four, explains the writing patterns that fire them, and lands on why dwell is the head class general-purpose LLMs systematically underperform on. Companion to A2, which walks all 19 heads at a higher level, and A5, which expands the not-dwelled side of the ledger.

The four dwell heads, side by side

The four dwell-related signals in the 2026 ranker

Source: phoenix/run_pipeline.py + home-mixer/scorers/{weighted_scorer,vm_ranker}.rs

HeadTypeConstant or fieldWhat it captures
Discrete dwell documentedbinary head, index 11DWELL_WEIGHTviewer paused on the post above a discretisation threshold
Continuous dwell time inferredregression head, paired indexCONT_DWELL_TIME_WEIGHTactual milliseconds the viewer's eye held the post
Click dwell time inferredpost-click dwell regressionfield in PhoenixScores protomilliseconds the viewer spent after clicking through
Not dwelled inferredimplicit negative signalnot_dwelled_score fieldimpressions where the viewer scrolled past without pausing

A few words on the relationship between these four. Discrete and continuous dwell on the same impression are correlated but not the same signal. The discrete head fires once when the viewer crosses a pause threshold; the continuous head accumulates value as long as the pause extends. A post that earns a fast skim-pause fires the discrete head but contributes little on the continuous head. A post that holds a viewer for ten seconds fires both, with the continuous head contributing far more total score per impression. Click-dwell operates on a separate stage of viewer attention: the impression that earned a click already passed the in-feed scoring, and the click-dwell signal runs over the time the viewer spent on the destination after clicking. Not-dwelled fires on every impression that does not cross the discrete threshold; it is the population to which the other three signals do not apply.

The split into four signals is the architectural choice that gives dwell its weight in 2026 even though no individual head has a large WEIGHT constant. The aggregate contribution per impression, summed across the relevant subset of the four, is structurally large.

Recap-dwell vs realtime-dwell: the client distinction

phoenix/run_pipeline.py labels the verified dwell index as CLIENT_TWEET_RECAP_DWELLED. The "recap" qualifier is worth unpacking. X's mobile client implements dwell measurement in two layers: realtime dwell observed as the post is on screen, and recap dwell computed once the viewer scrolls past and the post is no longer visible. The recap-dwell signal is what the client reports back to the ranker as the canonical engagement event. Realtime dwell informs client-side decisions (autoplay, expansion) but does not necessarily reach the ranker as a separate signal.

The practical implication for creators: the dwell that matters for ranking is the one the viewer accumulated over the full time they were exposed to your post in the feed, not the dwell while they were actively interacting with it. Posts that produce a long passive exposure (the viewer reading in place without tapping) score similarly to posts that produce a short active exposure (the viewer tapping through quickly). The signal is time-on-post, not interaction count within that time.

The continuous-dwell-time head (CONT_DWELL_TIME_WEIGHT) is the regression target over the recap-dwell duration. A twelve-second recap-dwell, at the 2023 reference weight of 0.0001 per millisecond, contributes 1.2 on a single head. Compare that to the 2023 favorite weight of 0.5 per like. One viewer holding your post for twelve seconds contributes more than two viewers liking it. The math is what makes dwell the silent kingmaker that A2 called out.

Click-dwell time: the strongest trust signal in the inventory

When a viewer clicks a link inside your post, the platform measures the time they spend on the destination before returning. That measurement becomes the click-dwell signal. The mechanism by which platforms gather this is not detailed in the public source, but the PhoenixScores proto referenced in home-mixer/scorers/vm_ranker.rs exposes a click-dwell field that the ranker consumes.

Three properties make click-dwell uniquely powerful as a signal. First, it is post-click, so it cannot be gamed by impression-only optimisation; the viewer has already made an active decision to leave the feed. Second, the dwell range is wider than in-feed dwell because viewers read full articles, watch videos, scroll through threads, all of which can last minutes. The signal can be three orders of magnitude larger than typical recap-dwell. Third, click-dwell is asymmetric: a click followed by a fast bounce produces a small (or possibly negative) contribution, while a click followed by a long read contributes substantially.

The asymmetry is the reason "clickbait" is structurally penalised. A viewer who clicks a clickbait headline and bounces in two seconds fires the click head positively but the click-dwell head essentially zero. The combined contribution is much smaller than for a post whose click earned a long read. Phoenix's training signal learns this distinction implicitly: posts whose clicks were followed by short bounces get lower predicted click-dwell on similar future candidates from the same author.

The video VQV head and the duration threshold

VQV_WEIGHT (video quality view, index 13) is gated on video_duration_ms exceeding MIN_VIDEO_DURATION_MS (phoenix/run_pipeline.py). The threshold value itself is not in the public source. The mechanism, however, is clear: below the threshold, the video earns zero on this head no matter how many times it plays, and above the threshold, every qualifying play contributes.

The threshold is the architectural detail most video-on-X advice ignores. A four-second loop and a fifteen-second cut of the same content produce categorically different scoring contributions; the difference is not a gradient but a step function at the duration boundary. Creators producing short-form video on X benefit from understanding where the boundary sits, but the value is not in the public source. Empirical backward inference from served-vs-unserved video content suggests the boundary is roughly in the eight-to-ten-second range, which would match the canonical "engagement above the eight-second mark" rule of thumb that several creator-economy reports treat as observed-not-stated. We do not endorse a specific value; we flag the structural property.

For non-video creators the VQV head is irrelevant. For video creators it is the head that determines whether the video is scoring at all. Sub-threshold videos compete only on like, retweet, and the other non-dwell heads, which is a much smaller score pool.

Not-dwelled: the negative signal nobody opted into

home-mixer/scorers/vm_ranker.rs's PhoenixScores proto contains a not_dwelled_score field that does not appear in the simpler home-mixer/scorers/weighted_scorer.rs. A5 walked the broader negative-signal economy; the not-dwelled signal is the dwell-side member of that family. It fires on every impression where the viewer scrolled past without pausing.

This is the highest-volume negative signal a creator faces. Mutes, reports, blocks all require explicit menu interactions. Not-dwelled requires nothing; it is the default outcome of impression-without-pause. For most posts the population of not-dwelled impressions is far larger than the population of dwelled ones. The model learns to predict the ratio per creator, per viewer, and uses it to weight future candidates.

The practical implication: a creator's recent posts that systematically fail to earn dwell from their audience accumulate predicted-not-dwelled prior across viewer histories. Future posts get scored against a prior that expects them to be scrolled past. The remedy is not "post more often" (which compounds the prior across more impressions), but "post in a way that earns the dwell." The next section walks the specific patterns.

Dwell and likes are not the same signal

A common assumption: posts that earn lots of likes also earn long dwell, and posts that earn long dwell also accumulate likes over time. The 2026 ranker's behaviour suggests the two are correlated but loosely so. The visible-engagement heads (like, retweet) respond to social-proof dynamics; the dwell heads respond to reading behaviour. The same post can fire one without the other.

Dwell contribution vs likes contribution across post archetypes

Source: illustrative simulation

1007550250Quick jokeHot takeOperational threadLong-form essay postGeneric AI-shaped postrelative head contribution
Dwell-head contributionFavorite-head contribution

The chart sketches the qualitative pattern. Quick jokes lean favorite-heavy because the value is delivered in the first line and the viewer responds with a like rather than a long pause. Operational threads and long-form essay posts invert the ratio: viewers pause to read, contributing heavily on the dwell heads, but they do not always return to like a long post they have already moved past. Generic AI-shaped output performs poorly on both heads simultaneously; the posts are neither fast-payoff enough to earn the favorite nor substantive enough to earn the dwell.

The chart is a creator-strategy chart, not a model-tuning one. A creator who wants to optimise score, not visible counts, should accept that some of their highest-scoring posts will have moderate or even low like counts. The score is the dwell column plus the visible column plus the seven other positive heads, and the dwell column is the one most posts under-invest in.

Writing patterns that earn dwell

Dwell is the head class most-influenced by editorial choice and least-influenced by reach or social proof. Likes and retweets respond to visible-engagement dynamics (who else liked, how many likes already); dwell responds to whether the viewer actually reads. A post can earn a large dwell even with zero existing engagement if the writing carries the eye.

Three patterns consistently produce dwell across creator categories.

The second-line payoff. A first line that opens a loop the second line closes. "I shipped three products last year. The one that worked did exactly the opposite of what advice said." The viewer cannot extract the value from the first line alone; they have to read the second to find out what the opposite was. Most posts deliver the value in the first line and lose the dwell as a result.

Specific over abstract. Posts that name specific people, numbers, dates, places, products force the viewer to slow down to parse them. "In March 2024, the partnership with three Fortune-500 customers generated 60% of revenue" earns more dwell per impression than "we had some big customers." Specificity is dwell density per word.

Sequence with reveal. Posts that list 3 to 5 items, where the third item subverts the pattern set by the first two, hold attention through the surprise. The structure is older than the platform; it works on the platform because it leverages the same attention mechanic the ranker is scoring.

What none of these three are: hooks, clickbait, or engagement bait. The dwell head responds to actual reading. Hooks that promise payoff the post never delivers train the model to predict bounce on similar future posts. Click-dwell, the strongest dwell signal, specifically punishes hook-without-payoff because the bounce-after-click is visible to the ranker through the dwell duration.

The graph below sketches the qualitative relationship between post length and predicted dwell. The curve is illustrative; specific values depend on the creator's audience composition.

Predicted dwell as a function of post length, by writing density

Source: illustrative simulation

100755025060 char (short)140 char (mid)240 char (long)Thread (multi-post)relative dwell contribution
High-density writing (specific, second-line payoff)Low-density writing (generic, headline-only)

Two readings of this graph. First, length alone does not produce dwell; the high-density curve rises with length but the low-density curve does not. Second, the gap between the two curves widens with length: the penalty for low-density writing in a long-form post is structurally larger than the penalty for low-density writing in a short post. Threads compound the effect because each post in the thread carries its own dwell prediction.

Why generic LLM output underperforms on dwell

A general-purpose writing model trained on the broad internet produces output sitting in a specific cluster of the embedding space: helpful-assistant register, structured-explanation patterns, encyclopedic specificity. That cluster has known properties relative to the dwell head.

The output is fluent, which keeps the discrete-dwell head firing (the viewer pauses long enough to register that the post is readable). The output is generic, which keeps the continuous-dwell head from accumulating (the viewer recognises the helpful-assistant pattern and moves on). The output rarely contains second-line payoffs, surprise sequences, or creator-specific specificity, because those properties are exactly the ones general models train against (their training objective rewards "comprehensible and broadly applicable" output, which is the opposite of "specific and surprising").

The mechanical consequence: posts generated by general LLMs score on the visible-engagement heads (like, occasional retweet) but systematically underperform on the dwell heads. The aggregate weighted score is therefore lower than the visible counts suggest. Creators running their content through general LLMs see what feels like normal likes performance but reach loss they cannot explain. The dwell-head gap is the unexplained portion.

What to take away

Three operational moves drop out of the four dwell heads.

Write the second line first. If the post's value is fully present in the opening line, the dwell head cannot fire. Audit drafts by asking whether the second line earns the read. If not, restructure.

Watch click-dwell, not click count. X exposes click counts to authors; click-dwell is harder to read but is the signal that actually moves the score. The proxy is comparing impressions-per-click against likes-per-impression: a post with high impressions-per-click and low dwell-per-click is a hooked-but-bounced post, which trains the model unfavourably against your future posts.

For video, cross the duration threshold or do not bother. Video under the VQV threshold scores on a smaller head pool. If your video content is below threshold by design (short loops, fast cuts), accept the lower score. If it can plausibly cross the threshold, the duration-vs-VQV trade is worth the extra few seconds.

The dwell economy is the easiest part of the 2026 X ranker to align with through writing alone. Voice consistency (A8) sets the cluster geometry; dwell-aware writing inside that cluster maximises the per-impression score. The combination is the operational form of the "voice as a moat" thesis the cornerstone of this series (A1) opened with.

AI disclosure

This article was drafted with AI assistance and human-edited by the VoiceMoat team. All technical claims are sourced to the xai-org/x-algorithm repository; file paths are cited inline.