LinkClean

What t= and s= mean in an X (Twitter) share URL

X share URLs end with ?t=…&s=… — t is a per-device session token, s is a 2-digit code identifying which device + sharing method created the link (e.g. s=46 = iPhone Copy Link). Both are tracking; LinkClean strips both, host-scoped.

Anatomy of an X share URL

Pick any tweet, tap Share → Copy Link, and you get something like:

https://x.com/handle/status/1234567890123456789?t=AbCdEf-12345_xyz&s=46

The path — /handle/status/<tweet-id> — is the only part the server cares about. Open the URL with the path alone and you get the same tweet; the ?t=…&s=… tail exists purely for X's attribution funnel.

  • /handle/ — the account that posted the tweet (or any retweeter).
  • /status/<tweet-id> — the unique tweet identifier; the only part X needs to render the page.
  • ?t=<token> — a per-device session token (more below).
  • &s=<2-digit code> — which device + sharing method generated this share URL (the focus of this article).

The `s` parameter — device + sharing method

s is a two-digit code (always 2 digits — s=09, s=19, s=46, etc.) that X uses to record exactly which client + which button generated the share URL. Each code is a unique combination of:

  • Device type — Android phone, iPhone, iPad, Twitter Web (desktop), Twitter Web (mobile), or a third-party Twitter client like Gryphon.
  • Sharing method — Copy Link, Email, SMS, WhatsApp, Telegram, Messenger, Facebook, Snapchat, Instagram, LinkedIn, Slack, Discord, Reddit, Line, Kakao, Viber, WeChat, Hangouts, Gmail, Twitter DM, and a few platform-specific options.
  • 71 distinct codes have been catalogued in total, by analysing Twitter's own front-end JavaScript (see Unfurl, the social-media URL parser).

Common `s` values you'll see in the wild

These are the ones that show up most often when you copy a tweet URL. The mapping is reverse-engineered from Twitter's JS by community researchers, not officially documented — but it's stable across years of observation:

Common s-codes when copying a tweet URL
ValueDeviceSharing method
s=09iOS (older Twitter app)Native share menu
s=12iOSiOS share sheet
s=17Twitter Web (desktop)Email share
s=18Twitter Web (desktop)Download / direct
s=19AndroidCopy Link button
s=20Twitter Web (desktop)Copy Link button (the most common in the wild)
s=21Twitter Web (newer UI)Copy Link button
s=41Gryphon (3rd-party iOS client)Copy Link
s=46iPhone Twitter appCopy Link button

What does `s=46` specifically mean?

s=46 means the share URL was generated by tapping “Copy Link” in the Twitter (X) iPhone app. If a friend forwards you a tweet and the URL ends in ?t=…&s=46, they used the iPhone app's Copy Link button — not the share sheet, not the web, not Android.

It's the iPhone-app counterpart to s=20 (Twitter Web Copy Link) and s=19 (Android Copy Link). Together with t=, X can tell that a particular tweet was copied from a particular iPhone session at a particular time, and whether subsequent shares of the same tweet came from the same source or different sources.

The forensic-grade detail of this scheme is also why removing s= and t= before forwarding is the right default: they encode quite a bit more than the destination needs.

The `t` parameter

t is an opaque token that's not officially documented, but observation shows it's consistent per device for a time window — multiple shares from the same Twitter session tend to carry the same or related t values, while shares from different devices have different ones.

That makes t useful to X as a join key: if two share URLs of the same tweet arrive at X's pixel with the same t, they almost certainly originate from the same device session — which lets X reason about virality (one tweet shared by a thousand different t values is genuinely spreading; one tweet shared a thousand times by a single t value looks like abuse).

From your point of view, the privacy concern is that t ties any pageview through that URL back to your device session — even after the share has bounced through multiple recipients.

What does X actually learn from these?

Combined, t and s give X a fine-grained attribution signal every time someone clicks a share URL:

  • Which device produced the share — the s code identifies the device category and the surface (iPhone app, Android, web).
  • Which sharing button was useds also encodes the button (Copy Link, Email, Snapchat, SMS, …).
  • Approximate device fingerprint via sessiont correlates multiple shares from the same session, even across tweets.
  • Funnel analytics — how often a tweet gets shared, on which surfaces, and how often those shares convert to engagement back on X.
  • Abuse signals — repeated identical t across a tweet's share URLs suggests automation or coordinated sharing.

How LinkClean removes `t=` and `s=` (without breaking YouTube)

Naïvely stripping any t= parameter would break YouTube share links — YouTube's t=42 is the start-at-N-seconds timestamp, not a tracker. LinkClean's catalog scopes the t/s cleaning rules to x.com and twitter.com only. On those hosts, t and s are stripped on every cleaning surface (share extension, widget, app, QR). On every other host they're left alone.

Same goes for X's less-common share-tail parameters: cn= and refsrc= (X-specific) both ship default-on, host-scoped. The cleaned URL is https://x.com/handle/status/<tweet-id> — the canonical permalink you'd get by typing the URL into the address bar yourself.

If you want to see this transformation explicitly, paste an X share URL into the LinkClean app — the History view shows the original alongside the cleaned version, with t, s, and any extras called out as stripped.

Frequently asked

If I keep `s=46`, what does X learn about me?

X learns that whoever clicked the URL is engaging with a link generated from a specific session on a specific iPhone. Joined with t=, X can tell if this is the same session that produced the share, or someone else (a forward recipient).

Are there 71 distinct s codes, really?

Yes — 71 codes have been catalogued across five device categories (Android, iOS, iPhone, iPad, plus desktop web and special clients). The full list was extracted from Twitter's own front-end JavaScript by community researchers (Unfurl, the open-source social-media URL parser, is the canonical reference).

Why does X bother encoding the sharing method?

Attribution and abuse detection. Knowing which surface produced each share lets X measure which sharing buttons drive engagement, A/B-test new buttons, detect automation patterns (mass shares from a single session), and credit shares back to source-app metrics.

Are `t` and `s` personal data?

Not by themselves — they don't carry your username or email. But X can join them to your account on their side via the cookie or app session that produced the share. Functionally, yes: they identify the share's source to X.

Will the tweet still load without `t=` and `s=`?

Yes. The path — /handle/status/<tweet-id> — is all X needs. The tail is purely for X's attribution funnel. The cleaned URL renders the same tweet, same thread, same everything.

Does LinkClean strip these on every site?

No — they're host-scoped to x.com and twitter.com in the catalog. That's intentional: t= is a timestamp on YouTube, and s= is sometimes functional on other sites. LinkClean only strips them where they're known X trackers.

What about retweets and quote-tweets?

Same parameter scheme — the s= code identifies the share source the same way regardless of whether the underlying tweet is original, retweeted, or quoted. The t= token is bound to the device session, not the tweet.

Get LinkClean.

On-device URL cleaning for iPhone — from the share sheet, the app, Shortcuts, or a widget.

Download on the App Store