URL Parser

Paste a URL and press Parse URL to see its protocol, host, port, path, query parameters, and fragment, with percent-encoding decoded. It also reads protocol-relative URLs, bare hosts, and relative paths.

Try an example

About this URL parser

A URL packs several pieces of information into one string: how to connect, which server, which resource, and extra data in the query. This parser separates them so you can read a long link at a glance or copy a single part. Percent-encoded text in the path and query is decoded, so %20 shows as a space, international domain names show in readable form next to their Punycode, and query names that appear more than once are flagged. A color-coded strip shows where each part sits, and the rebuilt URL is normalized the way a browser would write it.

How to parse a URL

  1. Paste the URL. Paste a link into the box, or press an example. A bare host such as example.com/page is accepted too.
  2. Press Parse URL. The color-coded anatomy strip and the list of components appear.
  3. Inspect the query. The Query parameters table lists each name and decoded value in order, and flags names that repeat.
  4. Copy what you need. Press Copy next to a component or parameter, or Copy rebuilt URL at the top for the normalized address.

Frequently asked questions

What if I paste a URL without a protocol?

A host such as example.com/page or localhost:3000 is read as https. A URL that starts with // keeps the page’s protocol in a browser, so the parser assumes https. A path starting with a slash is read as a relative URL.

How is a plus sign in a query handled?

In a query string a plus sign stands for a space, so a+b is shown decoded as a b. In the path a plus sign stays a plus sign, because only the query uses that rule.

What does a repeated query name mean?

A name such as role in role=admin&role=editor appears twice. Some servers keep the first value, some the last, and many frameworks build a list, so a repeated name is worth double-checking.

Why does the host show two names?

International domain names are sent as Punycode, a plain-letter form starting with xn--. The parser shows the readable Unicode name first and the Punycode name that browsers send in parentheses.

Why can the rebuilt URL differ from what I pasted?

It is written the way a browser normalizes it: the host is lower case, a default port such as 443 for https is dropped, and spaces and non-ASCII characters in the path or query are percent-encoded.