Command Palette

Search for a command to run...

URL & Links

Every URL & Links tool on Toolz.dev: 4 free utilities that run entirely in your browser. No signup, no uploads, no downloads.

A URL has a grammar, and most URL problems are a violation of it that nothing warned you about. These four tools work on the two halves that cause the trouble: the path, where a slug has to survive accents, punctuation and casing, and the query string, where parameters accumulate from analytics, ad platforms and your own code until nobody knows which ones matter.

Reach for the URL parser when you need to see the pieces of one URL - scheme, host, port, path, query, fragment - as the browser sees them. Reach for the UTM builder when you are tagging a campaign and want the parameters spelled the same way twice, which is the entire difficulty of campaign tracking.

Which URL tool for which part of the problem

Which URL tool for which part of the problem
TaskToolDetail
Turn a title into a URL pathSlug GeneratorTransliterates accents, strips punctuation, lowercases
See the parts of a URLURL ParserUses the browser WHATWG URL implementation
Read or edit a query stringQuery String ParserHandles repeated keys and percent-encoding
Tag a campaign linkUTM BuilderFive GA4 parameters, with channel group prediction

What makes a good slug

A slug is the human-readable part of a path, and the rules are boring and worth following. Lowercase, because some servers treat paths case-sensitively and a mixed-case URL generates duplicates. Hyphens rather than underscores, which Google has said for years it treats as word separators where underscores are not. Short, because the meaningful words are the ones a reader scans in a result and the rest is noise. And stable, because changing a slug means a redirect and a period of split signals, which is why putting a date or a year in one is usually a decision you regret.

Accents are where slug generators differ. Dropping non-ASCII characters turns Zürich into Zrich; the slug generator instead decomposes with Unicode NFKD normalisation and removes the combining marks, so the base letters survive as zurich. Percent-encoded UTF-8 in a path is valid and browsers display it decoded, but it is unreadable in a raw link, an analytics report or an email, so transliteration is nearly always the better answer.

Query strings are messier than they look

There is no specification for the structure inside a query string. The convention of key=value pairs separated by ampersands is universal, but what a repeated key means is not: some frameworks give you the first value, some the last, and some an array. The bracket syntax that PHP and Rails use for arrays is a convention of theirs, not a standard. The query string parser shows every occurrence rather than collapsing them, which is how you find the parameter that appears twice with different values.

Encoding is the other half. Space becomes %20 in a path and may become + in a query, an inheritance from HTML form encoding that is still live. A literal ampersand inside a value has to be percent-encoded or it ends the parameter, and a URL pasted into a system that encodes it again produces %2520 where %20 was meant, the double-encoding signature worth recognising. The URL parser uses the browser own WHATWG implementation, so what it shows is what the browser will actually do rather than a regex approximation.

Campaign parameters, and the SEO question about them

The five UTM parameters have been the standard for campaign attribution for twenty years: utm_source, utm_medium and utm_campaign carry the attribution, and utm_term and utm_content refine it. Only the first three matter in most reports, and the discipline that decides whether the data is usable is spelling: Facebook and facebook are two sources, email and Email are two mediums, and nothing warns you. The UTM builder normalises as it goes and shows which GA4 default channel group the combination will fall into, which is the number a marketing report will actually show.

The SEO question is whether tagged URLs create duplicate content. They can, since every parameter combination is a distinct URL a crawler may find, but the fix is routine rather than dramatic: a self-referencing canonical on the page, pointing at the clean URL, consolidates them. Keep UTM parameters for external campaign links, never for internal navigation, since an internal tagged link overwrites the original attribution for the session and hides where the visitor really came from.

Frequently asked questions

Should a URL slug use hyphens or underscores?
Hyphens. Google has stated for years that it treats hyphens as word separators and underscores as joiners, so my_blog_post reads as one token and my-blog-post reads as three words. Hyphens are also the convention across every major platform, which matters when a URL is read aloud or typed by hand.
How do I handle accented characters in a URL?
Transliterate them to their base letters, so Zürich becomes zurich. Percent-encoded UTF-8 is valid and browsers display it decoded, but it is unreadable anywhere the raw URL appears, including analytics, emails and link previews. Dropping non-ASCII characters entirely is the worst option, since it produces zrich.
Do UTM parameters hurt SEO?
Not if the page carries a self-referencing canonical pointing at the clean URL, which consolidates every tagged variant back to one. The real mistake is tagging internal links: a UTM parameter on a link within your own site restarts attribution mid-session, so the report credits your own page instead of the campaign that brought the visitor.
Which UTM parameters are required?
utm_source in practice, and utm_medium and utm_campaign for any report you intend to read. utm_term and utm_content are optional refinements for paid keywords and creative variants. The parameters are case sensitive, so decide once whether you write Facebook or facebook and never mix them.
What happens when a query string repeats a key?
It depends entirely on what reads it. Some frameworks return the first value, some the last, and some collect them into an array; the bracket syntax used by PHP and Rails is a convention of those frameworks rather than a standard. The parser lists every occurrence rather than choosing for you, which is how a duplicated parameter becomes visible.
Why does my URL contain %2520?
Because it was encoded twice. A space becomes %20, and if that already-encoded string is passed through an encoder again the percent sign itself becomes %25, giving %2520. It is the signature of a URL that was built, encoded, and then encoded a second time by a redirect or a tracking wrapper.