URL

Cleaned

What is the URL Cleaner?

You shared a link with friends and it had ?utm_source=newsletter&utm_campaign=spring_sale_2026&fbclid=IwAR0... tacked on the end. Paste it here and the tool gives you back the bare URL plus a JSON breakdown of exactly what got stripped. Output is JSON so you can copy it straight into a log line, a test fixture, or anywhere else you want a record of what was scrubbed.

The page exists because Google Analytics, Facebook, HubSpot, Mailchimp, and a dozen other platforms tack stuff onto URLs that you don't want to share or store. utm_* params come from the Urchin Tracking Module — Google added them in 2005 and they're now everywhere. fbclid is Facebook's click identifier and gclid is Google's. None of them affect what page loads — they just tell the destination site how you got there.

Everything runs in your browser using the standard URLSearchParams API, the same parser the WHATWG URL Standard defines. No upload, no server, no logs. URL cleaning is deterministic — the strip list is in the source, you can read it, and the same input always produces the same output.

How to Use the URL Cleaner

Three steps. Each one matches a button on this page.

1

Paste a URL or Load the Sample

Drop a URL into the left panel. Click Sample to load a realistic example with utm_*, fbclid, and gclid mixed in alongside real query parameters. Example URL:

https://shop.example.com/orders/ORD-1001?customer=Ava+Chen&status=active&utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026&fbclid=IwAR0abc123def456&gclid=Cj0KCQjwxyz

Anything new URL(...) accepts works — query strings with +, percent-encoding, repeated keys, and hash fragments are all handled. The path, hash, and any non-tracking query parameters are preserved exactly.

2

Read the Cleaned URL and What Got Removed

The right panel shows JSON: cleaned is the URL with tracking stripped, removed is an object listing every param that got pulled out (key and value), and removedCount is the total. If the URL had nothing to clean, removed is an empty object and a note says so. Updates as you type.

3

Copy or Download

Click Copy to send the JSON to your clipboard, or Download to save it as a .json file. Minify compacts the JSON onto one line. Use Clear on the input panel to start over. If you only want the cleaned URL string, copy the value of the cleaned field.

When You'd Actually Use This

Cleaning links before sharing

You opened a tab from a marketing email and want to send the link to a friend in Slack. The URL has ?utm_source=newsletter&utm_campaign=spring_sale_2026 stuck on the end — your friend doesn't need to know how you got there, and the link looks ugly. Paste, copy the cleaned value, send. Pairs with our URL Parser if you want to inspect the components first.

Storing canonical URLs in a database

You're indexing pages for a bookmark service or a price tracker. Two visits to the same product with different utm_campaign values aren't two pages — they're the same page. Strip the trackers before you write the URL to your database, or you'll end up with duplicates. The RFC 3986 spec calls this URL normalization.

Privacy — not handing your referrer to the destination

When you click a link with fbclid, you're telling the destination site that Facebook sent you and giving them a click ID Facebook can correlate with your account. Facebook documents fbclid as a click identifier for ads attribution. Stripping it before you visit (or before you save the link) breaks that trail.

Cleaning up customer support tickets

"The page broke when I clicked this link" — and the link is 600 characters long because it has utm + gclid + every HubSpot tracking param HubSpot has ever shipped (__hssc, __hstc, _hsenc, hsa_*). Paste it, copy the cleaned URL, paste THAT into your bug report. Now you can read the actual path.

Common Questions

What exactly does it strip?

Anything starting with utm_ (so utm_source, utm_medium, utm_campaign, utm_term, utm_content, plus any custom utm_* a marketer adds) — plus an explicit list of around 50 known tracking parameters: fbclid (Facebook), gclid and dclid (Google Ads), mc_eid and mc_cid (Mailchimp), _ga and _gl (Google Analytics cross-domain), igshid (Instagram), yclid (Yandex), __hsfp/__hssc/__hstc/_hsenc and hsa_* (HubSpot), mtm_* and pk_*/piwik_* (Matomo), vero_id, wickedid, _branch_match_id, _openstat, and a few more. Real query parameters that mean something to the page (like customer=Ava+Chen) are kept untouched.

Does it modify the path or hash?

No. Only the query string is touched. The protocol, host, port, path, and hash fragment all pass through verbatim. So https://shop.example.com/orders/ORD-1001?utm_source=x#summary becomes https://shop.example.com/orders/ORD-1001#summary — same path, same hash, just no query.

What if I want to keep utm_source for my own analytics?

Right now the strip list is fixed and built into the page. If you need a custom whitelist or blacklist, fork the source — the strip Set and the utm_* regex are at the top of the component. A future version may expose this as an option, but most people who land here want the comprehensive default.

Why is fbclid so long?

It's an opaque, signed identifier Facebook uses to attribute the click to a specific ad and (usually) a specific user. The exact format isn't public, but it's been documented at length on Wikipedia's fbclid article. gclid is the equivalent for Google Ads. Both are safe to strip from URLs you're sharing or saving — neither is needed to load the actual page.

Does it handle URLs with no tracking parameters?

Yes. The output JSON has removedCount: 0, an empty removed object, and a note field saying nothing was found. The cleaned URL will be byte-identical to your input (modulo whatever new URL().toString() normalises — like adding a trailing slash to the origin if one was missing).

What about repeated keys, like ?utm_source=a&utm_source=b?

Both are stripped. URLSearchParams.delete(name) removes every entry with that name, so duplicates aren't a problem. The removed object will only show one value (the last one parsed), but in practice nobody puts duplicate utm_source in a real URL.

Other URL Tools

Cleaning is one operation. Here's what else pairs naturally with it: