Social Media URL Cleaner – See Exactly What Gets Removed
Copy a link out of Instagram, TikTok or Facebook and you rarely get an address. You get a 180-character string in which the page you meant to share is wrapped in igshid, is_from_webapp, fbclid and a UTM tag or two. This URL cleaner removes the parameters that exist only to identify the click or the person who shared it, and hands back the shortest address that still opens the same thing — with every removal itemised rather than quietly applied. Everything runs in your browser using its own URL parser, and the tool makes no network request at all.
A diff, not a black box
Most link cleaners give you a shorter string and ask you to trust it. The problem with that is the failure mode: a cleaner that is slightly too eager deletes something load-bearing, the link still looks fine, and you find out when somebody opens the wrong post. So the result here is shown as a token-level diff. The address is drawn as chips — scheme, host, path — and every parameter sits beside it as its own chip. Removed ones are struck through and carry the reason they went. Kept ones are solid. A savings meter underneath reports the before and after length, and where the address contains emoji or a percent-decoded internationalized host it reports the grapheme count separately from the UTF-16 code-unit count, because those two numbers genuinely differ and blending them would be wrong.
The keep list, which wins
Some parameters decide what you see, and removing them changes the page. img_index on an Instagram post selects which slide of the carousel opens. v, t, list, index and start on YouTube name the video, the playlist, the position and the start time. A q on almost any site is the search somebody ran. Those are checked before the removal rules and always win, and each one is labelled with why it stayed. Host matters too: t and s are a share identifier on X and are stripped there, while the same names elsewhere are left alone. Matching is on the parameter name only, never its value — a cleaner that reads values to guess whether they look like an identifier will eventually delete a search query.
Forwarding wrappers versus short links
A redirector such as l.facebook.com/l.php?u=… or google.com/url?q=… carries its destination inside the address, so the real link can be read out and the wrapper discarded — up to three hops deep, with the chain shown so you can see the host actually changed. A shortener such as bit.ly or t.co is a different animal: the destination lives on the shortener's server, and reaching it needs an HTTP request a browser will not make from a static page. Those links are cleaned as far as their own parameters allow and then flagged, with the target reported as unknown.
Affiliate tags are a separate decision
An Amazon tag value is not tracking, it is credit: it tells Amazon who to pay if you buy something. Stripping it silently takes money from whoever shared the link, so it sits behind its own switch, off by default, while the placement parameters around it — ref_, pd_rd_*, pf_rd_*, psc — are removed normally.
Where the reasons come from
Each rule carries a badge. Documented means a vendor's own page describing that parameter was read, and the badge links to it with the date. Observed means the parameter is matched from platform behaviour with no citation attached. Every rule currently ships as observed, because no vendor documentation host was reachable when the table was built — an honest observed is worth more than an invented source, since a fake citation tells you to stop checking.
Batches, exports and the awkward inputs
Paste up to 200 addresses, one per line, and the table gives you original, cleaned, removal count and flags per row, with a tally underneath saying things like fbclid removed from 7 links. Copy one row, copy them all, or export a CSV in which every cell is quoted and any value opening with =, +, - or @ is neutralised so a spreadsheet reads it as text rather than running it as a formula. A bare host such as instagram.com/p/abc is parsed with https:// assumed and labelled as such. Duplicate parameter names are judged one by one and survivors keep their order. An address with nothing to remove is marked already clean instead of being reworded, and one whose parameters all go comes back with no dangling ?. Anything that is not http or https — a javascript: or app-scheme string — is shown as inert text with the scheme named, never linked and never copied as a link.