How to Rank on the X Algorithm
Everyone has a theory about the For You feed. Almost none of them survive contact with the actual ranking pipeline. We went through the recommendation code path by path — candidate retrieval, filters, the scoring function, diversity reranking, visibility rules — and turned what the machine actually pays for into a practical field guide. Every number below is a real production default from that code, not folklore.
Try Netwrck free More from the blog
How a post reaches the For You feed
On every request the feed runs a fixed pipeline: gather candidates, hydrate them, apply pre-scoring filters, score everything together, keep only the top 50, run a visibility filter, then serve roughly 35 organic posts. There are three ways into the candidate pool:
| Channel | Requirement | Candidate cap |
|---|---|---|
| In-network retrieval | the viewer follows you | 1200 |
| Embedding retrieval (out-of-network) | your post’s embedding is a nearest neighbor of the viewer’s engagement history | 1000 |
| Cluster retrieval (out-of-network) | cosine similarity above 0.5 to posts the viewer recently engaged with, post under 48 hours old | 800 |
Two details matter more than they look. First, the embedding retriever is trained contrastively with favorites as positives, and posts carry multimodal semantic embeddings plus hashed author IDs — so your content niche generalizes to brand-new posts. People who engage like your fans keep getting your stuff even when they don’t follow you yet. Second, out-of-network cluster seeds come from the viewer’s most recently engaged posts. Being similar to what people are engaging with right now is the lottery ticket into stranger feeds.
After retrieval there are no per-source quotas. All candidates compete on score alone, and only about 35 win.
Hard gates: fail any one and you get zero impressions
- The 48-hour clock. Posts older than 48 hours are dropped from every channel. A post’s eligibility half-life is short; posting cadence should be planned around it.
- Seen means seen. Already-viewed and already-served posts are filtered twice over (impression tracking plus a recent-served window). Repeating the same content buys nothing — each viewer sees it once.
- Viewer-level exclusions. Mutes, blocks, muted keywords (tokenized against your text) all drop you before scoring.
- Visibility filtering. Labeled content gets dropped or interstitialled per viewer — more in the hygiene section below. If your original post is dropped, every repost, quote and reply of it drops too.
- Conversation collapse. Only the best-scoring post per thread survives deduplication. Threads compete with themselves.
- Subscriber-only posts go to subscribers only.
- Reposts and replies never reach strangers. Out-of-network delivery hard-drops them. A reply whose ancestor fails to load is dropped too.
What the model pays for
The ranker predicts, per viewer, the probability of each action on your post, then takes a weighted sum:
Score = Σ weighti × P(actioni | viewer, post)
It multiplies predicted probabilities, not raw counts. A like from someone who almost never likes anything outweighs a hundred reflexive likes from serial likers. Chasing raw vanity metrics optimizes the wrong thing; chasing predicted reactions is the actual game.
Positive weights (defaults)
| Action | Weight | Read |
|---|---|---|
| Share via copy-link | 20.0 | Highest single lever |
| Reply to a mutual-follow original | 20.0 | 5.0 base + 15.0 boost, see below |
| Quote post | 5.0 | |
| Share via DM | 5.0 | |
| Reply (base) | 5.0 | |
| Follow author | 4.0 | Converting a viewer to a follower is paid like ~8 likes |
| Native share | 2.0 | |
| Repost | 1.0 | |
| Favorite | 0.5 | Baseline currency |
| Click | 0.4 | |
| Open external link | 0.2 | Barely registers |
| Photo expand / video open / video quality vote | 0.05 | Video quality votes only count for video ≥ 10 seconds |
| Continuous dwell time | 0.004/sec | Slow scrolling past your post literally scores |
| Profile click | 0.0 | Profile-click farming is worth nothing |
| Bookmark | — | No serving weight exists in the home scorer |
Negative weights (a different scale entirely)
| Feedback | Weight |
|---|---|
| Report | −234.0 |
| Mute author | −58.8 |
| “Not interested” | −43.2 |
| Block author | −31.2 |
| Swiped past without dwelling | −0.02 |
One “show fewer posts like this” erases what dozens of likes earn. Formats that provoke negative feedback are net-negative even while harvesting likes. One nuance from the code: reports and blocks act through predicted personal likelihood, so mass-report brigades mostly suppress your reach among users similar to the reporters rather than nuking you globally — but the local damage is real.
The mutual-follow boost: the biggest coded advantage
If the viewer mutually follows you — you follow them back — the reply weight on your original posts jumps from 5.0 to 20.0 (a +15.0 boost that was A/B tested between 5 and 20 before shipping at 15). Eligibility requires a true original: replies and reposts never qualify.
Implication: converting followers into mutuals multiplies your reply-term fourfold in their feeds. Following back engaged followers isn’t etiquette — it’s directly monetizable graph density.
Follow-author prediction
At weight 4.0, the model predicts P(viewer follows author). Content that reliably converts viewers into followers — clear identity, obvious value proposition on the profile, series people want more of — compounds: each new follower becomes future in-network delivery and a potential mutual.
Multipliers and ceilings
- Out-of-network discount ×0.75. Stranger-feed candidates carry a 25% handicap against in-network content — and in-network replies and reposts eat it too. Only true originals from followed authors run at full strength.
- Topic surfaces ×0.5. Topic-based retrieval applies an even harsher factor.
- Author diversity decay. Your 2nd+ post in one slate is multiplied by (1−0.25)·0.5k+0.25: the second post runs at roughly ×0.63, the third at roughly ×0.44. Posting five times an hour makes your posts cannibalize each other. Space them out.
- Diversity reranking (DPP). A determinantal point process greedily picks a diverse subset from the top 150 scored candidates. Near-duplicate variants lose to differentiated neighbors — five framings of one take is self-sabotage.
- New-user suppression ×0.00001. Brand-new accounts essentially never see recommended content (and your reach into fresh accounts is symmetrically suppressed). Irrelevant for established authors.
Cold start: the small-account accelerator
New accounts aren’t doomed. The pipeline has a cold-start lift with specific conditions: the post must be an original, less than 24 hours old, under 1000 impressions, the author under 1000 followers, and the post must already be ranking near the selection boundary. One such post per request gets its score replaced with a random value between the 15th and 16th ranked posts — guaranteed mid-feed placement.
An optional Thompson-sampling mode (off by default) places a Beta prior with mean around a 1.5% favorite rate on early performance. Under exploration, your early like-to-view ratio decides whether the system keeps trying you.
Small-account playbook: publish originals (never lead with replies or reposts), keep posts under 1000 impressions long enough to be explored (niche posts do this naturally), front-load the hook because early engagement gates further exploration, and treat the 1000-follower cap as the entry fee rather than a ceiling.
Playbook for originals
- Mutually follow your core audience. +15 on the reply weight for exactly those viewers. Reciprocity is the single largest coded advantage.
- Engineer replies, quotes, DM-shares and copy-link shares. They’re worth 5–20 versus 0.5 for a like. Formats that work: hot takes with defensible specifics (replies), quotable single-sentence claims (quotes), reference material people send to friends (copy-link), resources and tools (DM-shares).
- Use video ≥ 10 seconds when it earns its place — shorter video gets zero credit from the quality-vote head, though dwell time still accrues.
- Post when your audience is freshly active. Local hour-of-day is a feature, in-network retrieval favors recency, and the 48-hour clock starts immediately. First hours decide retrieval windows and exploration alike.
- Front-load the hook. Retrieval training keys on favorites; ranking predicts fast reactions. Slow-burn intros die before the reaction happens.
- One strong post beats three mediocre ones in the same window — diversity decay makes volume sublinear.
- Niche consistency compounds. Semantic embeddings and cluster retrieval route your future posts to viewers whose history resembles your past engagers. Topic drift resets the association.
- Never trip negative feedback. No bait, no misleading framing (“wait for it” with no payoff), no engagement-farming prompts that read as spam. One predicted-report-class wipeout erases the entire positive budget.
Playbook for reposts
Your reposts (you amplifying others)
- They reach only your followers — out-of-network reposts are hard-dropped.
- Even in-network they score at ×0.75, with no mutual boost and no cold-start eligibility.
- Duplicate circulating reposts get deduplicated; repeat-reposting adds nothing.
Repost sparingly, as a service to followers — never as a growth strategy for yourself.
Getting reposted (others amplifying you)
This is how originals scale. When someone reposts you, the candidate’s author is the retweeter, so your post enters every follower-of-the-retweeter’s feed as in-network: full-strength pool, no handicap. It carries your original’s predicted-action probabilities, so a post that keeps proving itself keeps winning in each new follower graph. Make repostable artifacts: self-contained claims, screenshots and charts, takes that make the reposter look smart for amplifying. And remember: if your original trips a visibility drop, the whole repost tree cascades down with it — account hygiene protects propagation.
Quotes and threads
Quotes are classified as originals and satisfy mutual-boost and cold-start eligibility — quoting your own prior post is the only self-propagation mechanism that keeps original-post status. Use it for genuine follow-ups, not repetition; seen/served filtering plus diversity reranking punish redundancy. Threads: each reply is scored at ×0.75, excluded from boosts, and the whole thread collapses to its best post in any slate. Put the payoff in the first post; treat the rest as depth, not additional impression attempts.
Account hygiene: the visibility layer
A separate rule engine returns allow / interstitial / drop per post-and-viewer pair. Followers bypass the strictest tier; non-follower delivery adds roughly two dozen extra drop rules on top of the base set. Stranger reach is a cleanliness premium:
- Kill-once-kill-everywhere labels: spam, malicious URLs, policy-violating content categories, and explicit do-not-amplify flags drop the post everywhere it appears.
- Deleted-then-reposted (nullcasted) content is dropped.
- An NSFW avatar or banner alone drops all your media posts from recommendations. Self-flagging media as sensitive also removes it from recommendations — flag only when genuinely required.
- Suspended or deactivated accounts: total loss.
Label provenance matters too. Abuse-risk ratios are computed against out-of-network favorites: reply-spamming strangers generates exactly the denominator-punishing pattern those classifiers measure. Bot classifiers read behavioral cadence and burstiness, so automation-shaped activity risks suspension. Adult-content classifiers deliberately over-include at high recall, so borderline media risks blurring (engagement-killing) or out-of-network drops.
Myths the code debunks
- “One report cancels hundreds of likes.” No — weights multiply predicted probabilities, and a report’s base probability is thousands of times rarer than a like’s.
- “Coordinated engagement drives reach.” Engagements only count on posts served in Home. Link-dropping a post into group chats produces zero ranking signal. Ask for engagement inside the app, on the feed.
- “More posts = more impressions.” Diversity decay plus seen/served filtering make volume sublinear; redundant volume is worth exactly nothing.
- “Bookmarks are the secret metric.” No bookmark weight exists in the serving scorer. They help training and history, not the default home score.
- “Profile visits are valuable.” Profile-click weight is 0.0.
- “Hashtags hack discovery.” No hashtag feature exists anywhere in the pipeline; topic surfaces use their own retrieval with a harsher ×0.5 factor.
TL;DR checklist
- Originals first — replies and reposts never carry a growth push
- Mutual-follow your engaged audience (reply weight 5 → 20)
- Optimize for reply / quote / share predictions, not likes
- Video ≥ 10s or none; hook in the first line
- 1–2 posts per hour max, spaced; differentiated framings
- Fresh within 48h; post at audience-active hours
- Small account: keep posts under 1000 impressions to stay cold-start eligible (< 24h, original)
- Zero tolerance for negative-feedback bait; clean avatar, banner and media flags
- Make repostable artifacts so others pull you into their in-network pools
- Check your account transparency labels and fix what’s flagged
Keep exploring
- Growing a presence around AI content? Read our intro to AI art generation.
- Comparing AI chat platforms? See our Character.AI alternatives comparison.
- Want to build an audience around characters and art? Create yours on Netwrck.
Netwrck