Why did my post get zero or very low impressions?

In the open-source X algorithm, a post reaches a viewer only by surviving three stages: it must be retrieved as a candidate (from followers via Thunder, or globally via Phoenix retrieval), survive ten named pre-scoring filters, and then score well enough in a ranking that explicitly subtracts for predicted blocks, mutes, and reports. Near-zero impressions means the post is dying at one of those three stages — and they have different causes.

CODE-CURRENTClaims verified against source repositories on 2026-06-12

Stage 1 — your post has to be retrieved at all

For You candidates come from exactly two sources in the released pipeline: Thunder serves recent posts from accounts a viewer follows, and Phoenix retrieval discovers posts from the global corpus by ML similarity to the viewer's engagement history. If you have few followers, Thunder can only carry you to those few; everything beyond them depends on Phoenix retrieval finding your post relevant to strangers' engagement patterns. A post that is never retrieved is never even ranked — the most common shape of true zero.

CODE-CURRENT0bfc279verified 2026-06-12
For You candidates come from two sources: Thunder (in-network — posts from accounts you follow) and Phoenix Retrieval (out-of-network — ML-based similarity search across a global corpus). Both are ranked together by Phoenix.
xai-org/x-algorithm — README.md, lines 48–53 (Overview)as of the May 15, 2026 release

Stage 2 — ten named filters run before scoring

Retrieved candidates are then removed for any of ten documented reasons: duplicates, failed metadata hydration, posts older than a threshold, the viewer's own posts, repost duplicates, paywalled content the viewer can't access, posts the viewer has already seen or been served, posts containing the viewer's muted keywords, and posts from authors the viewer has blocked or muted. Two of those are worth staring at: the already-seen/already-served filters mean reach is consumed per viewer — a post doesn't get shown to the same person indefinitely — and the muted-keyword filter means vocabulary choices can silently subtract whole audiences.

CODE-CURRENT0bfc279verified 2026-06-12
Before scoring, Home Mixer removes: duplicates, posts that failed metadata hydration, posts older than a threshold, your own posts, repost duplicates, paywalled content you can't access, posts you've already seen or been served, posts containing your muted keywords, and posts from authors you've blocked or muted.
xai-org/x-algorithm — README.md, Filtering section (Pre-Scoring Filters table, lines 296–314)as of the May 15, 2026 release

Stage 3 — the score, including the negative side

What survives is ranked by Phoenix, which predicts the probability of many engagement types per viewer, combined by a weighted sum.

CODE-CURRENT0bfc279verified 2026-06-12
Phoenix, a Grok-based transformer, predicts per-post probabilities for many engagement types; the final ranking score is a weighted combination of those predicted engagements.
xai-org/x-algorithm — README.md, lines 53 and 263–292 (Scoring and Ranking)as of the May 15, 2026 release

The subtraction is explicit: predictions for "not interested," block, mute, and report carry negative weights. A post can be interesting to some audiences and still rank poorly overall because the model expects enough viewers to react negatively — low impressions with no policy violation anywhere in sight.

CODE-CURRENT0bfc279verified 2026-06-12
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.
xai-org/x-algorithm — README.md (Scoring and Ranking) + home-mixer/scorers/weighted_scorer.rs lines 64–67as of the May 15, 2026 release

What this means for you

Diagnose in stage order. If brand-new posts get literally nothing even from followers, look at stage 1 and 2 mechanics — posting cadence against the age filter, whether your audience has functionally muted your vocabulary, accumulated blocks. If posts get a small burst then flatline, that's consistent with per-viewer consumption: your follower pool has been served, and out-of-network retrieval isn't picking you up. If reach is steady but low, stage 3 is the likeliest culprit — the model's negative-action predictions are taxing you. Each stage shows up differently in your own data, which is exactly what an archive-level audit is for.

← Reach problems