What does the X algorithm reward in 2026?
Engagement the system predicts you'll earn — and the released scorer names exactly which kinds. The positive signals are favorites, replies, retweets, quotes, photo expands, clicks, profile clicks, video quality views, shares (including via DM and copy-link), dwell time, and following the author. The single heaviest behavioral signal across X's public statements and the code structure is the one hardest to fake: people stopping to read (dwell) and replying. The negatives — reports, blocks, mutes, "not interested" — subtract. Reward follows genuine engagement, not volume or tricks.
"What does the algorithm want" has an unusually precise answer in 2026, because the scorer that combines the signals is in the open release. It's a weighted sum of predicted engagement actions — and you can read the full list.
The positive signals, verbatim
The weighted scorer sums these predicted actions (each multiplied by a withheld weight):
| signal | what it rewards |
|---|---|
| favorite, reply, retweet, quote | The classic engagement actions — likes, replies, reposts, quote-posts. |
| dwell & continuous dwell time | People stopping to actually read. Hard to fake, heavily indicative. |
| click, profile click, quoted click | Curiosity that converts — opening the post, your profile, a quoted post. |
| photo expand, video quality view | Media that holds attention — expanded images, watched video. |
| share, share via DM, share via copy-link | Content worth sending to someone — the strongest "this is good" signal. |
| follow author | A post so good the viewer follows you off it. |
The current WeightedScorer combines predicted probabilities for: favorite, reply, retweet, photo expand, click, profile click, video quality view, share, share via DM, share via copied link, dwell, quote, quoted click, continuous dwell time, follow author, not interested, block author, mute author, and report.
Reward is predicted, not counted
A subtle but important point: the scorer doesn't tally your existing likes — it uses
predicted scores from the Phoenix model for each action. The system is guessing how likely
this viewer is to favorite, reply, dwell, or share this post, then ranking on that
prediction. You're not rewarded for past engagement; you're ranked on predicted future engagement.
The Phoenix source is the out-of-network retrieval path: its enable() requires that the request is not in_network_only, so it contributes candidates from beyond the viewer's follow graph.
The negatives subtract
Four signals carry negative weight: report, block-author, mute-author, and not-interested. Content
that provokes these is pushed down, and the scorer has explicit handling for net-negative
posts. Avoiding the negatives matters as much as earning the positives.
The model explicitly predicts negative actions — not interested, block author, mute author, report — and these carry negative weights in the final score, pushing down content a user would likely dislike.
What the code doesn't say
The weights themselves. We know the list of rewarded actions and that each has a
multiplier; the actual numbers (is a reply worth more than a like? how much?) live in the withheld
params module. So "optimize for replies over likes" is informed inference from the
structure and X's public statements — not a number the code hands us.
The numeric values of the current weights are not included in the open-source release: weighted_scorer.rs references a params module (e.g. p::FAVORITE_WEIGHT, p::REPLY_WEIGHT) whose values are not present anywhere in the published repository.
What to do with this
Write for the signals that are hard to fake: content that earns dwell (worth reading slowly), replies (worth responding to), and shares (worth sending to a friend). Those are the actions the system predicts and rewards, and they're the ones engagement tricks can't manufacture. xDoctor scores your archive against this exact signal set so you can see which ones you actually earn.