Last updated March 13, 2025
By default, a Heroku app is available at its Heroku domain, which has the form APPNAME-IDENTIFIER.herokuapp.com
or APPNAME-IDENTIFIER.DNS-ZONE.herokuapp.com
. For example, an app named example-app
is hosted at example-app-1234567890ab.herokuapp.com
. While your app is available at your subdomain, we strongly recommend adding a custom domain to production apps.
Heroku started appending identifiers to subdomains on June 14, 2023. Applications created before this date follow the old subdomain scheme where the subdomain was the same as the app name.
Heroku DNS uses DNSSEC to authenticate requests to all herokuapp.com
and herokudns.com
domains. DNSSEC is a security system that gives DNS servers the ability to verify that the information they receive is reliable.
To make your app available at a non-Heroku domain (for example, www.yourcustomdomain.com
), you add a custom domain to it.
You can add custom domains to any Heroku app. Adding domains does not incur extra charges. For security purposes, you must verify your Heroku account to add domains to apps.
Heroku does not provide a domain registration service (for registering a custom domain name) or a DNS provider service (for hosting the DNS servers that point your custom domain name to your app).
Summary of stepsThe remainder of this article covers these steps in greater detail:
heroku domains:add
command.heroku domains
command.To add a custom domain with a subdomain, use the domains:add
Heroku CLI command:
$ heroku domains:add www.example.com -a example-app
Adding www.example.com to ⬢ example-app... done
▸ Configure your app's DNS provider to point to the DNS Target
▸ whispering-willow-5678.herokudns.com.
▸ For help, see https://devcenter.heroku.com/articles/custom-domains
The domain www.example.com has been enqueued for addition
▸ Run heroku domains:wait 'www.example.com' to wait for completion
Domain names that contain accented, or other non-ASCII, characters should be added using punycode. For instance, the éste.com
domain name should be first converted to xn--ste-9la.com
See the Rules on adding domains section if you receive the error message example.com is currently in use by another app
.
After you add a domain with the heroku domains:add
command, you need to point your DNS provider at the DNS target provided by Heroku. You can view this DNS target with the heroku domains
command. See View existing domains for details.
You usually configure a new CNAME
record with your DNS provider to point it at Heroku. The following table shows common CNAME
record patterns:
CNAME
www
whispering-willow-5678.herokudns.com.
CNAME
othersubdomain
autumn-sunset-1495.herokudns.com.
CNAME
examplesecure
example-12345.ssl.herokudns.com.
CNAME
examplefir
example-12345.tulip-virginia.herokudns.com.
The trailing .
on the target domain may or may not be required, depending on your DNS provider.
Consult your DNS provider’s documentation for specific instructions on creating CNAME
records.
You can confirm that your DNS is configured correctly with the host
command, assuming your DNS changes have propagated:
$ host www.example.com
www.example.com is an alias for whispering-willow-5678.herokudns.com.
...
DNS changes can take between several minutes and several days to take effect. Lowering your DNS TTL ahead of time can minimize, but not eliminate, this propagation time.
Your app’s Heroku domain always remains active, even if you set up a custom domain. If you want users to use the custom domain exclusively, your app should send HTTP status 301 Moved Permanently to tell web browsers to use the custom domain. The Host
HTTP request header field shows which domain the user is trying to access; send a redirect if that field is example.herokuapp.com
.
Keep in mind that you have to maintain your DNS records in sync with your Heroku resources. If you decide to remove a Heroku app but do not remove or update your corresponding DNS record, you become vulnerable to Subdomain Takeover attacks.
Add a custom root domainRoot domains must be added in addition to any subdomains. The process for adding root domains is the same in the Heroku CLI:
$ heroku domains:add example.com -a example-app
Adding example.com to ⬢ example-app... done
▸ Configure your app's DNS provider to point to the DNS Target
▸ whispering-willow-5678.herokudns.com.
▸ For help, see https://devcenter.heroku.com/articles/custom-domains
The domain example.com has been enqueued for addition
▸ Run heroku domains:wait 'example.com' to wait for completion
Configuring DNS for root domains
Configuring your DNS provider for a root domain is similar to configuring a DNS provider for a subdomain. However, whereas with subdomains the type of record to configure is always a CNAME, with root domains the type of record depends on the DNS provider:
Some DNS providers only offer A records for root domains. Unfortunately, A records aren’t sufficient for pointing your root domains to Heroku because they require a static IP. These records have serious availability implications when used in environments such as on-premise data-centers, cloud infrastructure services, and platforms like Heroku. Because Heroku uses dynamic IP addresses, it’s necessary to use a CNAME-like record (often referred to as ALIAS or ANAME records) so that you can point your root domain to another domain. See examples below.
Whichever provider you have, point the ALIAS/ANAME/CNAME entry for your root domain to the DNS Target, just as you would with a CNAME record:
Depending on the DNS provider, an empty or @
Name value identifies the root domain.
ALIAS
or ANAME
<empty> or @
hidden-sierra-7936.herokudns.com.
Add a wildcard domain
Wildcard domains allow you to map any and all subdomains to your app with a single record. A common use of a wildcard domain is with applications that use a personalized subdomain for each user or account. You can add a wildcard domain if you own all existing apps already using the same top-level domain (TLD). For example, if an app is already using www.example.com
, you must own it to add *.example.com
.
Add a wildcard domain to your app as you would with any other domain, but use the *
wildcard subdomain notation.
$ heroku domains:add *.example.com -a example-app
Adding *.example.com to ⬢ example-app... done
▸ Configure your app's DNS provider to point to the DNS Target
▸ encircled-magnolia-9265.herokudns.com.
▸ For help, see https://devcenter.heroku.com/articles/custom-domains
The domain *.example.com has been enqueued for addition
▸ Run heroku domains:wait '*.example.com' to wait for completion
If one of your apps has a wildcard domain, you can still add specific subdomains of the same top-level domain (TLD) to any of your other apps. Specific subdomains are evaluated before wildcard domains when routing requests.
With wildcard domains it’s important to make sure your DNS provider configuration agrees with Heroku. In particular, if you have configured your DNS for *.example.com
to point to example.herokuapp.com
, be sure you also run heroku domains:add *.example.com
. Otherwise, a malicious person could add baddomain.example.com
to their Heroku app and receive traffic intended for your application.
Use the *
wildcard subdomain notation to add a CNAME record to encircled-magnolia-9265.herokudns.com.
with your DNS provider.
CNAME
*
encircled-magnolia-9265.herokudns.com.
Remove a custom domain
Remove a domain with domains:remove
:
$ heroku domains:remove www.example.com -a example-app
Removing www.example.com from ⬢ example-app... done
If you destroy the app, any custom domains assigned to it gets freed. You can subsequently assign them to other apps.
View existing domainsUse the heroku domains
command to view an app’s current Heroku domain, custom domains, and DNS targets:
$ heroku domains -a example-app
=== example Heroku Domain
example.herokuapp.com
=== example Custom Domains
Domain Name DNS Target
--------------- --------------------------
example.com hidden-sierra-7936.herokudns.com
www.example.com whispering-willow-5678.herokudns.com
Common Runtime
For older applications, the DNS Target may be of the form [name of app].herokuapp.com
. If you’re not using TLS, both [name of app].herokuapp.com
and <haiku>.herokudns.com
formats work as DNS Targets, regardless of the DNS Targets shown in Dashboard and CLI output.
We recommend using the <haiku>.herokudns.com
format as this format is required when uploading your own certificate or using Automated Certificate Management.
Cedar and Fir Private Spaces
The DNS Target format for Private Space apps depends on its generation. Cedar Private Spaces use <haiku>.<haiku>.herokuspace.com
. Fir Private Spaces use <haiku>.<regional-haiku>.herokudns.com
.
Any Heroku user can attempt to add any domain to their app. Instead of explicitly verifying domain ownership, Heroku enforces the following rules to ensure that domains aren’t claimed by multiple users or apps:
www.example.com
to app example-1
, you can’t also add it to app example-2
.www.example.com
, you must own it in order to add *.example.com
.www.example.com
or example.com
, you must own the app with *.example.com
(if such a custom domain exists).*.example.com
wildcard TLS certificate uploaded, you can’t add something.example.com
to an app on your account.wildcard
is a reserved Heroku subdomain keyword. For example, wildcard.example.com
fails.If you’re unable to add a domain that you own, please file a support ticket.
Domain name glossarywww.yourcustomdomain.com
www
in www.yourcustomdomain.com
*.yourcustomdomain.com
APPNAME-IDENTIFIER.herokuapp.com
.RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4