![Sam Dutton](https://web.dev/images/authors/samdutton.jpg) Sam Dutton [X](https://twitter.com/sw12) [GitHub](https://github.com/samdutton) [Mastodon](https://techhub.social/@samdutton) [Bluesky](https://bsky.app/profile/samdutton.bsky.social) [Homepage](https://samdutton.com)

<br />

Most of the time it's fine to say things like "I bought a domain" or "Our images
are hosted on a different site", even if that's not strictly true. However, in
some contexts it's necessary to be more precise. For example, when dealing with
cookies, you need to understand the difference between [site](https://web.dev/articles/url-parts#site) and [origin](https://web.dev/articles/url-parts#origin).

Names for URL parts are specified in a standard, which also defines a JavaScript
API:

- The [URL standard](https://url.spec.whatwg.org/) defines URLs and related concepts to enable engineers to build interoperable web browsers.
- The [URL API](https://developer.mozilla.org/docs/Web/API/URL_API) component of the standard defines methods to provide access to parts of a URL string, such as the [scheme](https://web.dev/articles/url-parts#scheme) or [origin](https://web.dev/articles/url-parts#origin).

This document explains a range of terms used with HTTP or HTTPS URL strings. It
does not cover other types of URL such as file or data URLs. For terms such as
`host` and `origin`, accurate definitions are inherently complex, so this
document provides examples and links to the URL standard, rather than
attempting full explanations.

You can use JavaScript to get the names of URL components that are defined by
the URL API. For example:

    let url = new URL('https://foo.com.au:1234/bar/foo.html#bar');
    console.log(url);

## URL analyzer

Edit the URL below to see how parts of the URL string are named.
You can also open this in a separate tab at
<https://chrome.dev/url-parts/>.
<iframe src="https://chrome.dev/url-parts/" height="300" width="800"></iframe>

*** ** * ** ***

Names for URL parts are listed alphabetically below.

## Country-code top-level domain (ccTLD)

A [top-level domain](https://web.dev/articles/url-parts#tld) defined in the [ISO 3166-1 Country Codes list](https://en.wikipedia.org/wiki/ISO_3166-1#Current_codes).

- For `https://example.org.au`, the ccTLD is [`au`](https://en.wikipedia.org/wiki/.au).
- For `https://example.io`, the ccTLD is [`io`](https://en.wikipedia.org/wiki/.io).

## Domain name

The parts of an HTTP or HTTPS URL separated by dots: everything after the
[scheme](https://web.dev/articles/url-parts#scheme), but before the [path](https://web.dev/articles/url-parts#pathname) or [port](https://web.dev/articles/url-parts#port) (if specified).
Each part of the domain name is known as a [label](https://www.icann.org/en/icann-acronyms-and-terms/label-en).

| URL | Domain name |
|---|---|
| https://example.github.io/path | example.github.io |
| https://support.example.org.au:443 | support.example.org.au |

## Effective top-level domain (eTLD)

An entry in the [Public Suffix List](https://publicsuffix.org/list/), including
a [TLD](https://web.dev/articles/url-parts#tld) and (for eTLDs with multiple parts) additional domains below that:
second-level, third-level, and so on.

- For example: `com`, `com.au`, `github.io`, `sa.edu.au`, `schools.nsw.edu.au`.

A "public suffix", such as these examples, is a name under which domains can be
registered. The Public Suffix List is a list of all known public suffixes, and
is frequently updated. Browsers including [Chromium](https://chromium.googlesource.com/chromium/src/+/master/net/base/registry_controlled_domains/effective_tld_names.dat)
and [Firefox](https://github.com/mozilla/gecko-dev/blob/master/netwerk/dns/effective_tld_names.dat)
use the list in their builds.

**Note:** As well as one-part and two-part eTLDs such as `com`,
`com.au` or `github.io`, the Public Suffix List also
includes three-part, four-part and even five-part eTLDs.


The list also includes suffixes such as `github.io` and
`glitch.me`. Names under these, such as
`example.github.io` and `example.glitch.me`, can be used
for site hosting but cannot be "registered" by a developer. GitHub and Glitch
act as registrars in these examples.

## eTLD+1

See [registrable domain](https://web.dev/articles/url-parts#registrable-domain).

An [eTLD](https://web.dev/articles/url-parts#etld) plus the subdomain that precedes it.

- For example: `example.com`, `example.org.au`, `example.github.io`, `example.sa.edu.au`, `example.schools.nsw.edu.au`.

## Filename

Not defined in the URL standard, and not part of the URL API, but commonly used
to refer to the final, non-path, part of the URL based on
the---often incorrect---assumption that the URL maps directly to a directory
structure.

For example, with `https://example.com/dir/file.html`, `file.html` might be referred to as the filename.

The filename value is also used by browsers to name an asset if it's downloaded.
For example, `https://example.com/images/image.jpg` would typically be saved
locally to `image.jpg`.

## Fragment

- [Spec](https://url.spec.whatwg.org/#concept-url-fragment)

A string following a # character at the end of a URL that provides a
[fragment identifier](https://developer.mozilla.org/docs/Learn/Common_questions/What_is_a_URL#anchor).

- For example: the URL `https://example.com/cats#tabby` has a fragment identifier value of `tabby`.

**Note:** The fragment value is not passed when an HTTP request is made to a server.

The part including the `#` is known as the [hash](https://web.dev/articles/url-parts#hash) or anchor.
You can also link to and highlight a [text fragment](https://web.dev/articles/url-parts#text-fragment).

The hash is returned by the URL API rather than the fragment.

## Fully-qualified domain name (FQDN)

A complete address for a website or a server, that maps to an [IP address](https://en.wikipedia.org/wiki/IP_address).

| URL | FQDN |
|---|---|
| https://example.com:1234/cats | example.com |
| https://api.example.github.io | api.example.github.io |

The FQDN for a URL does not include the [port](https://web.dev/articles/url-parts#port), even if a non-default
port is used.

## Hash (or anchor)

- [Spec](https://url.spec.whatwg.org/#dom-url-hash)
- [API](https://developer.mozilla.org/docs/Web/API/URL/hash)

A string following a # character at the end of a URL that provides a
[fragment identifier](https://developer.mozilla.org/docs/Learn/Common_questions/What_is_a_URL#anchor). (In
[some contexts](https://developer.mozilla.org/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL#anchor)
this is referred to as an "anchor".)

The part excluding the `#` is known as the [fragment](https://web.dev/articles/url-parts#fragment).
You can also link to and highlight a [text fragment](https://web.dev/articles/url-parts#text-fragment).

The hash is returned by the URL API rather than the fragment.

## Host

- [Spec](https://url.spec.whatwg.org/#dom-url-host)
- [API](https://developer.mozilla.org/docs/Web/API/URL/host)

As defined in the [URL standard](https://url.spec.whatwg.org/#host-representation), a host can be a
[domain name](https://web.dev/articles/url-parts#domain-name), IP v4 address, IPv6 address, opaque host, or empty
host.

- The URL standard's definition of `host` does not include the [port](https://web.dev/articles/url-parts#port).
- [`URL.host`](https://developer.mozilla.org/docs/Web/API/URL/host) includes the port, unless the port is the default for the scheme.
- [`URL.hostname`](https://developer.mozilla.org/docs/Web/API/URL/hostname) does not include the port.

| URL | `URL.host` |
|---|---|
| https://www.example.com:443/cat | `www.example.com` `// 443 is the default port for the scheme` |
| https://www.example.com:1234/cat | `www.example.com:1234` |
| https://cat.example.github.io | `cat.example.github.io` |

## Hostname

- [Spec](https://url.spec.whatwg.org/#dom-url-hostname)
- [API](https://developer.mozilla.org/docs/Web/API/URL/hostname)

Hostname is defined by the JavaScript `URL` API, but not elsewhere by the URL
standard. See [host representation](https://url.spec.whatwg.org/#concept-domain) for more detail.

[`URL.hostname`](https://developer.mozilla.org/docs/Web/API/URL/hostname) returns the [host](https://web.dev/articles/url-parts#host) without the [port](https://web.dev/articles/url-parts#port).

| URL | `URL.hostname` |
|---|---|
| https://www.example.com:443/cat | `www.example.com` |
| https://www.example.com:1234/cat | `www.example.com` |
| https://cat.example.github.io | `cat.example.github.io` |

## Origin

- [Spec](https://url.spec.whatwg.org/#dom-url-origin)
- [API](https://developer.mozilla.org/docs/Web/API/URL/origin)

The URL standard [defines `origin`](https://url.spec.whatwg.org/#origin), and
links to the [HTML standard](https://html.spec.whatwg.org/multipage/browsers.html#concept-origin) for
background.

For HTTP or HTTPS URLs, [`URL.origin`](https://developer.mozilla.org/docs/Web/API/URL/origin) returns the [scheme](https://web.dev/articles/url-parts#scheme), the [host](https://web.dev/articles/url-parts#host), and [port](https://web.dev/articles/url-parts#port) (unless the port is the default
for the scheme).

| URL | `URL.origin` |
|---|---|
| https://www.example.com:443/cat | `https://www.example.com` |
| https://www.example.com:1234/cat | `https://www.example.com:1234` |
| https://cat.example.github.io | `https://cat.example.github.io` |

## Parameter

See [Search params](https://web.dev/articles/url-parts#search-params)

## Password

- [Spec](https://url.spec.whatwg.org/#dom-url-password)
- [API](https://developer.mozilla.org/docs/Web/API/URL/password)

See [username](https://web.dev/articles/url-parts#username).

## Pathname

- [Spec](https://url.spec.whatwg.org/#dom-url-pathname)
- [API](https://developer.mozilla.org/docs/Web/API/URL/pathname)

For an HTTP or HTTPS URL, the part after the domain and port (if defined),
including a [filename](https://web.dev/articles/url-parts#filename) (if defined) but not including the
[search string](https://web.dev/articles/url-parts#search) or [hash](https://web.dev/articles/url-parts#hash).

| URL | `URL.pathname` |
|---|---|
| https://example.com | `[empty string]` |
| https://example.com:8000/search?q=tabby | `/search` |
| https://example.github.io/cat/pattern#tabby | `/cat/pattern` |
| https://example.github.io/README.md | `/README.md` |

"Path" is sometimes used to refer to the pathname without the filename. For
example, for the URL `https://example.com/cat/pattern/tabby.html`, the "path"
is `/cat/pattern`.

## Port

- [Spec](https://url.spec.whatwg.org/#dom-url-port)
- [API](https://developer.mozilla.org/docs/Web/API/URL/port)

The number after a `:` in a URL that identifies a network port. For example: for
the URL `https://example.com:1234/tabby` the port number is 1234.

The port number must be a [16-bit unsigned integer](https://url.spec.whatwg.org/#concept-url-port): in other words, an integer
between 0 and 65535 inclusive.

For an HTTP URL, the default port is 80; for HTTPS, the default is 443. A URL
does not need to specify the port number unless a non-default port is used.

The API returns an empty string if the port is the default for the scheme.

| URL | `URL.port` |
|---|---|
| https://example.com | `// empty string` |
| https://example.com:443/foo | `// empty string: port is default for scheme` |
| https://www.example.com:1234/foo | `1234` |

## Protocol

- [Spec](https://url.spec.whatwg.org/#dom-url-protocol)
- [API](https://developer.mozilla.org/docs/Web/API/URL/protocol)

The [scheme](https://web.dev/articles/url-parts#scheme) followed by `:` (for example `http:` or `https:`).

`protocol` is available from the URL API, but `scheme` is not.

## Query (or "query string")

- [Spec](https://url.spec.whatwg.org/#concept-url-query)

The [search](https://web.dev/articles/url-parts#search) portion of the URL, excluding the leading `?`.

## Registrable domain

- For a URL with a single-part [eTLD](https://web.dev/articles/url-parts#etld) such as `com` or `org` (i.e. an eTLD that corresponds to a [TLD](https://web.dev/articles/url-parts#tld)), the domain and the [second-level domain](https://web.dev/articles/url-parts#sld) before it: for example, `example.com` or `example.org`.
- For a URL with a two-part eTLD where only third-level registration is allowed (i.e. entries in the [Public Suffix List](https://publicsuffix.org/list/) such as `com.au` and, `github.io`) the two-part top-level domain ("public suffix") and the third-level domain name just before that. For example: `example.org.au` or `example.github.io`.
- For eTLDs with three or more parts, the eTLD and the domain before that.

**Note:** Confusingly, perhaps, domains such as `example.github.io` or `example.glitch.me` are [defined
as "registrable domains"](https://url.spec.whatwg.org/#host-registrable-domain) though they cannot be "registered" by a developer. GitHub and Glitch act as registrars for these examples.

## Scheme

- [Spec](https://url.spec.whatwg.org/#dom-url-protocol)
- [API](https://developer.mozilla.org/docs/Web/API/URL/protocol)

The part of the URL (before `://`) that defines the [network protocol](https://developer.mozilla.org/docs/Glossary/Protocol) (or action to be taken
by the user agent) when a request is made to a URL. For example, a request to a
URL with an `https` scheme should be made using the [HTTPS protocol](https://en.wikipedia.org/wiki/HTTPS). For a request to a URL with a scheme
such as `file`, `mailto` or `git` that doesn't correspond to a network
protocol, behavior depends on the user agent. For example, when a user clicks
on a `mailto` link, most browsers open their default email application, using
the values in the link's `href` URL.

## Search

- [Spec](https://url.spec.whatwg.org/#dom-url-search)
- [API](https://developer.mozilla.org/docs/Web/API/URL/search)

A question mark followed by a series of key-value pairs that represent
[parameters](https://web.dev/articles/url-parts#parameter) and their values, provided after the [pathname](https://web.dev/articles/url-parts#pathname).

| URL | `URL.search` |
|---|---|
| https://example.com/cats?pattern=tabby\&mood=bonkers | `?pattern=tabby&mood=bonkers` |
| https://example.com/cats:443?pattern=tabby | `?pattern=tabby` |

The [`query`](https://web.dev/articles/url-parts#query) or "query string" refers to the `search` without the
leading `?`.

See also [Search params](https://web.dev/articles/url-parts#search-params).

## Search params

- [Spec](https://url.spec.whatwg.org/#dom-url-searchparams)
- [API](https://developer.mozilla.org/docs/Web/API/URL/searchParams)

Refer to an item of data passed in a [search string](https://web.dev/articles/url-parts#search)
(or "query string").

- For example: for `https://example.com/cats?pattern=tabby&mood=bonkers`, the search string has two parameters: `pattern=tabby` and `mood=bonkers`.

## Second-level domain

The domain before a [top-level domain](https://web.dev/articles/url-parts#tld).

- For the URL `https://www.example.com`, the second-level domain is
  `example.com`, a [subdomain](https://web.dev/articles/url-parts#subdomain) of the top-level domain `com`.

- For `https://example.org.au`, the top-level domain is `au`, the second-level
  domain is `org` and the third-level domain is `example`. In this example,
  `org.au` is a subdomain of `au` and `example.org.au` is a subdomain of
  `org.au`.

## Site

- [Spec](https://html.spec.whatwg.org/multipage/browsers.html#sites)

[Site](https://html.spec.whatwg.org/multipage/browsers.html#sites) is defined by
the HTML standard, along with [same-site](https://html.spec.whatwg.org/multipage/browsers.html#same-site), which
[includes scheme](https://github.com/whatwg/url/issues/448), and
[schemeless same-site](https://html.spec.whatwg.org/multipage/browsers.html#schemelessly-same-site).

Site is not defined in the URL standard or the JavaScript URL API.

In this context:

- For an HTTP or HTTPS URL with a single-part [eTLD](https://web.dev/articles/url-parts#tld) such as `https://example.com`, the site consists of the `scheme`, the eTLD and the [label](https://www.icann.org/en/icann-acronyms-and-terms/label-en) before that. For example: for the URL `https://www.example.com/cat`, the site is `https://example.com`. (For this URL, the eTLD is the same as the [top-level domain](https://web.dev/articles/url-parts#tld).)
- For multipart [eTLD](https://web.dev/articles/url-parts#tld)s such as `co.uk`, `github.io` or `sa.edu.au`, the "site" consists of the `scheme`, the [eTLD](https://web.dev/articles/url-parts#tld) and the [label](https://www.icann.org/en/icann-acronyms-and-terms/label-en) before that. For example: for the URL `https://cat.example.co.uk/tabby`, the site is `https://example.co.uk`, and for `https://www.education.sa.gov.au` the site is `https://education.sa.gov.au`.

| URL | Site (with scheme and eTLD +1) |
|---|---|
| https://cat.example.com/tabby | ("https", "example.com") |
| https://cat.example.co.uk/tabby | ("https", "example.co.uk") |

Unlike [origin](https://web.dev/articles/url-parts#origin), site does not include [port](https://web.dev/articles/url-parts#port).
**Note:** The concept of "site" is important in terms of "same-site", because certain security restrictions apply to subdomains that are considered "same-site" even if they are not "same-origin". [Understanding "same-site" and "same-origin"](https://web.dev/articles/same-site-same-origin) provides further information.

## Subdomain

A domain within a higher-level domain.

For sites with single-part top-level domains such as `com` or `org`, the parts
before the top-level domain, each of which is separated by a dot.

- `www.example.com` is a subdomain of `example.com`.
- `support.api.example.org` is a subdomain of `api.example.org`, which is a subdomain of `example.org`.

For two-part eTLDs where only third-level registrations are allowed(i.e. entries
in the [Public Suffix List](https://publicsuffix.org/list/) such as `co.uk` and
`github.io`) the subdomains are the parts of the domain name before that.

- For example: `cat.example.co.uk` is a subdomain of `example.co.uk`.

## Text fragment

- [Spec](https://wicg.github.io/scroll-to-text-fragment/)
- [API](https://developer.mozilla.org/docs/Web/Text_fragments)

A type of [fragment](https://web.dev/articles/url-parts#fragment) that makes it possible to link to and highlight
a range of text within a page. When a user follows a link with a text fragment,
the browser attempts to locate, scroll to and highlight the text within the page.

A text fragment begins with `:~:text=` followed by the search term.

For example, to link to the first occurrence of the text "fragment"
on this page, use the URL `https://web.dev/articles/url-parts#:~:text=fragment`.

Find out more: [Text fragments](https://developer.mozilla.org/en-US/docs/Web/Text_fragments).

## Top-level domain (TLD)

A domain name listed in the [Root Zone Database](https://www.iana.org/domains/root/db) such as [`com`](https://www.iana.org/domains/root/db/com.html) or [`org`](https://www.iana.org/domains/root/db/org.html). Some top-level domains are
[country code top-level domains](https://web.dev/articles/url-parts#cctld), such as [`uk`](https://www.iana.org/domains/root/db/uk.html) and [`tv`](https://www.iana.org/domains/root/db/tv.html).

When describing the parts of an HTTP or HTTPS URL, the TLD is the domain name
that follows the final dot.

- For `https://example.org`, the URL's top-level domain is `org`.
- For `https://example.org.au`, the URL's top-level domain is `au`, and `org` is a [second-level domain](https://web.dev/articles/url-parts#sld) (even though `org` is also a top-level domain). `org.au` is a two-part [eTLD](https://web.dev/articles/url-parts#etld).

The [Public Suffix List](https://publicsuffix.org/list/) of [eTLD](https://web.dev/articles/url-parts#etld)s includes domains with one, two or more parts, so a TLD can also be an
eTLD. For example:

- For `https://example.com`, the URL's eTLD is `com`, which is also a TLD.

## Username

- [Spec](https://url.spec.whatwg.org/#dom-url-username)
- [API](https://developer.mozilla.org/docs/Web/API/URL/username)

An optional username and [password](https://web.dev/articles/url-parts#password) can be provided at the beginning
of the URL, but this [has been deprecated](https://www.rfc-editor.org/rfc/rfc3986#section-3.2.1)
for security reasons and will be ignored in many cases.

For example, with `https://user123:password1@example.com` the username is
`user123`. Note the username (and password!) is in plain text and not encrypted.
If the username contains `:` or `@` symbols they must be URL encoded to `%3A`
and `%40` respectively.

*** ** * ** ***

## Find out more

- [WHATWG: URL Living Standard](https://url.spec.whatwg.org/)
- [WHATWG: HTML Living Standard](https://html.spec.whatwg.org/)
- [URL API](https://developer.mozilla.org/docs/Web/API/URL_API)
- [Understanding "same-site" and "same-origin"](https://web.dev/articles/same-site-same-origin)
- [RFC: Uniform Resource Locators (URL)](https://www.rfc-editor.org/rfc/rfc1738)
- [RFC: URIs, URLs and URNs](https://datatracker.ietf.org/doc/html/rfc3305)
- [Root Zone Database](https://www.iana.org/domains/root/db) (directory of [TLDs](https://web.dev/articles/url-parts#tld))
- [Public Suffix List](https://publicsuffix.org/list/) (directory of [eTLDs](https://web.dev/articles/url-parts#etld): "A public suffix is a set of DNS names or wildcards concatenated with dots. It represents the part of a domain name which is not under the control of the individual registrant.")
- [ICANN glossary](https://www.icann.org/en/icann-acronyms-and-terms?nav-letter=r&page=1)
- [What is a Fully Qualified Domain Name?](https://datatracker.ietf.org/doc/html/rfc1594#section-5)
- [How many ways can you slice a URL and name the pieces?](https://tantek.com/2011/238/b1/many-ways-slice-url-name-pieces)
- [MDN Web Docs Glossary](https://developer.mozilla.org/docs/Glossary)
- [What is a URL?](https://developer.mozilla.org/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL)
- [The History of the URL](https://blog.cloudflare.com/the-history-of-the-url/)