URL normalizer

Put a URL in canonical form: default ports, percent-encoding, trailing slashes, parameter order and www. Choose a lossless or a comparison-grade normalization.

Lossless with respect to what a server sees. This is the form safe to store.

Two kinds of normalization, and the difference matters

Canonical is safe. It changes only things that cannot change what a server does: an explicitly written default port (:443 on https), percent-escapes of unreserved characters, a bare # that targets nothing, and embedded credentials, which have no business in a stored link. Use this form anywhere the URL will actually be requested.

Comparable is deliberately lossy. On top of the above it sorts parameters, strips tracking, drops the fragment, drops www. and drops a trailing slash. Two URLs that are equal after this are "the same page" — but the result is not a safe thing to redirect to, because /a and /a/ genuinely are different resources on plenty of servers.

Rules this tool deliberately does not apply by default

  • Trailing slashes. /a and /a/ are different paths in the specification, and on a static host they are different files. Only the comparison preset removes them.
  • Case in the path. The host is case-insensitive and is lowercased; the path is not, and lowercasing it breaks case-sensitive servers.
  • Upgrading http to https. Usually right, occasionally wrong, and never something to do silently — so it is a checkbox.

Percent-encoding

Escapes of unreserved characters are decoded (%7E becomes ~) and the rest are uppercased, per RFC 3986 §6.2.2. Both are guaranteed not to change meaning, which is what makes them safe to apply to a URL you intend to store.

Occasional email

New tools, when there are new tools

No more than once a month, no tracking pixels in the mail, one-click unsubscribe.