Custom domains
Serve a site that SHIP hosts on a domain that you own, such as blog.example.com. Add two DNS records, and the domain goes live after SHIP finds them.
Custom domains are not available yet
Custom domains are not on yet. Until SHIP turns them on, each site stays on its SHIP address, and a request to add a domain gets the answer custom_domains_not_available. This page shows how the feature works when SHIP turns it on.
A custom domain serves the production site of a project on a host name that you own, for example blog.example.com. The site keeps its SHIP address too. Custom domains need a paid plan: a monthly plan, an Enterprise contract or site hosting. On the free plan, SHIP refuses to add a domain and tells you what to buy.
Add a domain
- Open the site on the Sites page of the console.
- In Domains, type the host name and select Add domain.
- Copy the two DNS records that the console shows.
- Add both records at the DNS provider of the domain.
- Select Check now, or wait for the hourly check.
From a terminal, ship sites domain add <SITE_ID> <HOSTNAME> does the same and prints the records. An agent uses the add_site_domain tool of the SHIP MCP server.
An admin or an owner of the workspace can add a domain. Each site can have three custom domains.
The DNS records
| Type | Name | Value |
|---|---|---|
| TXT | _ship-challenge.<your domain> | ship-domain-verification=<token>, from the console |
| CNAME | <your domain> | The SHIP host that the console shows |
The TXT record proves that you control the domain. SHIP gives each domain its own token. The CNAME record sends the traffic of the domain to SHIP. Most DNS providers do not allow a CNAME record on the root of a domain, such as example.com. Use a subdomain such as www or blog, or a provider that flattens a CNAME on the root.
Keep the TXT record while you use the domain. SHIP reads it at each check.
The states of a domain
| State | What it means |
|---|---|
pending | SHIP did not find the TXT record yet, or the certificate for the domain is not ready. |
active | The domain serves the site. |
failed | SHIP found no TXT record for 72 hours, or the certificate failed. The domain serves no pages. |
removing | SHIP removes the domain. A moment later, it serves no more pages. |
A domain goes live only when SHIP finds the TXT record and the certificate for the domain is active. A new certificate can take a few minutes after SHIP finds the record. A DNS change can take up to an hour to reach every resolver.
When SHIP cannot find the TXT record of a live domain, the domain keeps its site for 72 hours, and the console shows a warning. If SHIP still finds no record after that, the domain fails. To start a failed domain again, add the records and select Check now.
A custom domain follows the rules of its site. If SHIP suspends the site, the domain also answers that the site is not available.
Remove a domain
In Domains, select Remove and confirm. From a terminal, run ship sites domain remove <SITE_ID> <HOSTNAME>. A moment later, the domain serves no more pages, and SHIP deletes its certificate. Then you can delete the two records at your DNS provider.
SHIP also removes each custom domain of a site when you unpublish the site. When a monthly plan or site hosting ends, the free plan allows no custom domain. The email that tells you about the change names each domain, and SHIP removes them on the date of the change.
How is this page?
Manage a site
Read the page views and the deploys of a site that SHIP hosts. Set its badge, roll it back or unpublish it, and see what your plan allows.
Leave SHIP Sites hosting
Your repository and your build belong to you. Serve the same build from another static host, then unpublish the site that SHIP hosts.