URL normalizer
Apply RFC 3986 §6 normalization plus optional rules: lowercase host, drop default port, sort params, decode safe chars, remove fragment, collapse .. in path, force trailing-slash policy.
Ready.
How to use
- Paste one URL or a list.
- Pick a Preset — SEO (aggressive: strip tracking, sort params, force trailing slash), Minimal (RFC 3986 only), Custom (toggle each rule individually).
- The output is your normalized list. For batch input, you also get a diff view showing what changed per URL.
- Copy or Download the result.
What each rule does
- Lowercase host —
EXAMPLE.com→example.com. Hostnames are case-insensitive per DNS, but URLs aren't. - Drop default port —
:443onhttpsor:80onhttpare redundant. - Sort query params — alphabetises keys so
?a=1&b=2and?b=2&a=1dedupe identically. - Remove fragment — fragments never go to the server, so they don't affect canonical identity.
- Strip tracking — removes UTM, click IDs, and known analytics cookies.
- Trailing slash — adds
/to directory-like paths (no file extension).
FAQ
Which preset should I use?
"Canonical" URL choice is a policy decision — pick one rule set and apply it everywhere. The SEO preset matches what most CMSes and Google itself prefer.
Will this affect site analytics?
If you normalize URLs before logging them in your warehouse, you'll lose campaign attribution (UTM stripped) and click-ID conversion tracking. Normalize for display / dedupe, not for raw analytics.
Does it handle internationalized domains?
Yes — IDN hosts are converted to Punycode (the WHATWG-canonical form).
What if my URLs are invalid?
Invalid URLs pass through unchanged (the tool can't normalize what it can't parse). Run them through the validator first to clean.