The anatomy of a URL
Every URL is built from the same few parts in the same order. The scheme (or protocol) says how to talk to the server, almost always https today. The host names the machine, and an optional port says which door to knock on, with 443 assumed for https and 80 for http. The path identifies the resource on that server. Then come two optional extras: a query string of key=value pairs after a question mark, and a fragment after a hash, which points at a place within the page and is never even sent to the server.
The parser above splits all of it out using the same URL machinery your browser uses to navigate, and it decodes the query string, so %20 becomes a space and %26 becomes an ampersand. Nothing is fetched: pasting a URL here does not visit it, and the URL never leaves your browser, which matters because query strings routinely carry tokens and email addresses.
Worked example
Notice item=tea%20pot in the raw URL. Spaces are not allowed in URLs, so they travel percent-encoded, and the decoded table gives you back the value a human meant. If you need to go the other way and encode text for use in a URL, the URL encoder linked below does exactly that.
Reading a query string like a pro
The query string is where the interesting debugging happens. Each pair is separated by an ampersand, a key can appear more than once (the table shows every occurrence), and a key can legally have an empty value. Because the values are percent-decoded for display, you can finally read the redirect target buried in a login URL or the search term inside an encoded tracking link. When a URL appears inside another URL's parameter, paste the inner one back into the parser and unwrap it a layer at a time, like pass-the-parcel. Order almost never matters to the server, so ?a=1&b=2 and ?b=2&a=1 usually behave identically, but caches and analytics treat them as different pages, which is one reason tidy links are worth the effort.
Tracking parameters, and which parts identify you
Marketing links accumulate baggage. The utm_source, utm_medium and utm_campaign trio feeds analytics tools, gclid and fbclid tie your click to an ad platform, and email newsletters often add parameters that identify you personally, so a link that looks generic may say exactly who clicked it. Pasting a link here before sharing it shows you precisely what it carries; everything from the question mark onwards can usually be trimmed without breaking the destination, though some sites do use parameters for real content (a video ID or a search query), so check the table before you prune. One last habit worth keeping: the fragment never reaches the server, the path and query always do, and anything sensitive in a query string will sit in server logs at the other end.
Frequently asked questions
Is the URL I paste sent anywhere?
No. Parsing happens in your browser using the URL interface built into it, and nothing is requested, fetched or logged. That matters because URLs often contain session tokens, email addresses and other identifying values in their query strings.
Why does my URL fail to parse?
The most common reason is a missing scheme: www.example.com is not a complete URL until it starts with https:// or similar. The tool adds https:// for you when the input looks like a bare domain and tells you it has done so. Genuinely malformed input, such as stray spaces or brackets, is reported as invalid.
What is the difference between the host and the domain?
The host is the full name in the URL, such as shop.example.co.uk, and it can include a port. The registrable domain is the part you actually buy, example.co.uk here, and everything in front of it is a subdomain chosen by the site owner.
Why is the port often empty?
Each scheme has a default port, 443 for https and 80 for http, and browsers omit it from the URL when the default is used. A visible port such as :8080 simply means the server listens somewhere non-standard, which is common in development.
Are query parameters case sensitive?
Treat them as if they are. The standard leaves it to each site, and most servers and frameworks match parameter names exactly, so Page=2 and page=2 can behave differently. Hosts are the exception: domain names are case insensitive, so EXAMPLE.com and example.com are the same site.