The Anatomy of a URL
A URL breaks down into distinct, well-defined components, each serving a different purpose: the protocol (https://) specifies how to connect; the host identifies which server to reach; the path identifies a specific resource on that server; the query string (?key=value&...) carries additional parameters as key-value pairs; and the fragment (#section) identifies a location within the page itself, notably never sent to the server at all — it's purely client-side, used for in-page anchors or client-side routing state.
Query parameters deserve special attention because they're easy to misparse by hand: multiple values for the same key are valid (?tag=a&tag=b), values need percent-decoding to recover their original characters (see Complete Guide to URL Encoding), and parameter order is technically unspecified — a server can treat ?a=1&b=2 and ?b=2&a=1 identically, though not all implementations do.
Breaking a URL into these labeled components — rather than trying to visually parse a long query string by eye — is exactly how you catch a missing parameter, a wrong host, or an unexpectedly present fragment while debugging a redirect or API request URL.