# Subdomains and domains

Source: /docs/concepts/subdomains-and-domains

Every app gets a platform subdomain the moment it goes live. You can also serve it on a domain you own; the subdomain keeps working as the technical address either way.

## The platform subdomain [#the-platform-subdomain]

When you create an app you pick a **subdomain**, or leave it blank for a generated one. As you type, the dashboard checks it:

* **subdomain available** — yours to take.
* **subdomain taken** — in use; pick another.
* **subdomain reserved** — held by the platform; pick another.
* **invalid subdomain format** — use lowercase letters, numbers and hyphens.

## Changing the subdomain [#changing-the-subdomain]

You can change it later from the app. The change is safe: the current address keeps working until the new one is verified live, so there is **no downtime**, and it is reversible. The dashboard shows &#x2A;*changing address…** while it finishes.

## Using your own domain [#using-your-own-domain]

A custom domain is available on paid plans. Serve the app on a domain like `shop.example.com` while the subdomain stays as the technical address.

### Turn on your own domain [#turn-on-your-own-domain]

In the app, enable **Use my own domain** and enter the domain, for example `shop.example.com`.

### Add the DNS record [#add-the-dns-record]

Click **Show DNS record**. Add the record it shows at the company you bought the domain from (OVH, GoDaddy, and similar), in its DNS section. It can take a few minutes to an hour to show up.

### Wait for verification [#wait-for-verification]

The platform checks for the record and switches the app over when it appears. The domain status moves through **verifying** → **live**. Your app stays reachable on its subdomain the whole time.

A domain you add before the first deploy is connected when you deploy. The certificate is handled for you.

## Removing a custom domain [#removing-a-custom-domain]

**Remove** sends visitors, password-reset links and payment redirects back to the subdomain and takes the certificate off the gateway. If the domain is live you confirm by typing it.

## What can go wrong [#what-can-go-wrong]

* **"That doesn't look like a valid domain."** — Enter a full domain, like `shop.example.com`.
* **"This domain is already connected to an app."** — It is in use elsewhere on the platform.
* **"This domain doesn't point at our gateway yet. Update its A-record and try again."** — The DNS record is missing or not propagated. Add or fix it, wait, then **Check now**.
* **"That's one of our subdomains, so use the subdomain field instead."** — Use the subdomain field, not the custom-domain field.
* **not verified** — The platform stopped checking on its own. Confirm the record at your provider, then press **Check now**.