Skip to main content
Laravel Cloud provides two types of domains for each environment: an automatically assigned laravel.cloud domain and any custom domains you connect.
Domain stuck verifying? Read our docs on verifying domains.

Cloud domains

Laravel Cloud assigns each environment a free laravel.cloud domain after its first successful deployment. This domain is ideal for testing and staging before switching to your own domain. Laravel Cloud builds Cloud domains from your application and environment name. If you rename either, the Cloud domain changes, and you need to redeploy for the change to take effect. Because Cloud domains are frequently used for non-production environments, Laravel Cloud automatically sets an X-Robots-Tag: noindex, nofollow header on all *.laravel.cloud domains so search engines do not index them. Laravel Cloud does not set this header for custom domains.

Custom domains

A custom domain lets visitors reach your application at your own address (for example, example.com) instead of the default laravel.cloud domain. Laravel Cloud automatically provisions and renews SSL certificates for each custom domain so visitors reach your site over HTTPS.

Add a custom domain

In the dashboard, open your environment’s Network settings and select “Add domain”. Laravel Cloud asks you to choose:
  • Wildcard support: Whether to accept traffic on all subdomains (for example, *.example.com).
  • Redirect behavior: Whether Cloud should redirect www.example.com to example.com (or the reverse).
  • Downtime preference: Whether brief downtime is acceptable during setup, or whether you need an uninterrupted transition with no gaps in service.
  • Cloudflare DNS settings: Whether Cloudflare manages your DNS and whether the hostname is already proxied (routed through Cloudflare’s network).
These choices determine which DNS records Laravel Cloud asks you to add and in what order.
1

Add the domain in Laravel Cloud

Enter the domain and choose your options.
2

(Optional) Pre-verify ownership and SSL

If you selected the uninterrupted path, add the ownership and SSL validation records first. These records let Laravel Cloud confirm you own the domain and issue an SSL certificate before you switch any traffic over. This option is available only if the hostname is not already proxied through Cloudflare’s network.
3

Point the domain to Laravel Cloud

Add the origin records shown in the UI. Origin records are the DNS entries that direct your domain’s traffic to Laravel Cloud’s servers.
4

Refresh until connected

Use the Refresh action in the dashboard until the domain status shows as connected. Most domains connect within 15 minutes, but DNS propagation can occasionally take longer.

Verification paths

Laravel Cloud supports two verification approaches. The right choice depends on whether you can tolerate a brief gap in service while DNS changes take effect:
  • Real-time verification (flexible): Point the domain to Laravel Cloud first, and Laravel Cloud then verifies ownership and issues an SSL certificate. This is the simplest path, but there may be a short window where the domain is not yet serving over HTTPS.
  • Pre-verification (uninterrupted): Prove ownership and issue the SSL certificate before switching traffic. This path avoids any downtime or insecure window, but requires additional DNS records up front. This approach is available only if the hostname is not already proxied through Cloudflare’s network.

DNS records you will see in Cloud

When you open a domain’s configuration, Laravel Cloud shows the exact DNS records required for your setup. Copy each record’s type, name, and value exactly as shown into your DNS provider.

Origin records

Origin records are the primary DNS entries that tell the internet to send traffic for your domain to Laravel Cloud:
  • An A record maps your domain to an IP address and is common when you are not using Cloudflare DNS.
  • A CNAME record maps your domain to another hostname and is common when you are using Cloudflare DNS (Cloudflare supports CNAME flattening at the apex, which allows a CNAME on the root domain).

Ownership verification record

During pre-verification, Laravel Cloud may require a temporary TXT record to confirm that you control the domain. This record looks like: TXT _cf-custom-hostname.<your-domain> -> <value> After Laravel Cloud confirms ownership, you no longer need this record, though leaving it in place does not cause any issues.

SSL validation records

To issue an SSL certificate for your domain (so your site can use HTTPS), Laravel Cloud may require one or more validation records: TXT _acme-challenge.<your-domain> -> <value> CNAME _acme-challenge.<your-domain> -> <value> (common for wildcard domains or DCV delegation) If you are using wildcard support, keep the DCV delegation CNAME record in place permanently. This record lets Laravel Cloud automatically renew your wildcard SSL certificate. Removing it prevents future renewals.

Understanding verification status

A domain is fully connected once Laravel Cloud verifies three components:
  • Hostname: Ownership of the domain is confirmed.
  • SSL: An SSL certificate has been issued and is active, so HTTPS works.
  • Origin: DNS is correctly routing traffic to Laravel Cloud.
As verification progresses, the dashboard shows one of the following statuses:
  • Verifying ownership: Laravel Cloud is waiting for your ownership and SSL validation DNS records to become visible. This is the propagation stage.
  • Verifying: Ownership and SSL are confirmed, but origin routing has not been detected yet. Your origin DNS record may still be propagating.
  • Connected: All three components are verified and your domain is live.
  • Timed out: Verification did not complete within the allowed window. Review your DNS records for errors and retry.
Laravel Cloud retries verification checks for approximately 12 hours before timing out, so you do not need to re-trigger verification manually during this period. If you are using real-time verification, visiting your domain in a browser can help Laravel Cloud detect traffic flowing through the network and speed up the final verification step.

Wildcard domains

A wildcard domain (for example, *.example.com) lets any subdomain, such as app.example.com or api.example.com, route to your environment without configuring each one individually. Wildcard domains follow the same verification path as any other domain, determined by your downtime preference. When you configure a wildcard domain:
  • Also configure the root domain example.com, so both example.com and its subdomains are covered.
  • Add the DCV delegation record shown in the UI. This record lets Laravel Cloud continue issuing and renewing wildcard SSL certificates on your behalf.
If Cloudflare manages your DNS, make sure the DCV delegation records under _acme-challenge are set to DNS only (gray cloud, not proxied). Proxying these records blocks certificate issuance.

Managing domains

From your environment’s domain settings, you can detach and reassign domains between environments in the same organization. You can also set a verified root domain as the primary domain for an environment. You cannot move or remove a primary domain until you unset it as the primary domain.

Limitations

Any number of Cloud environments can have a custom domain assigned to them. Each plan includes a number of custom domains across your entire organization:
  • Starter: 10 custom domains per organization
  • Growth: 50 custom domains per organization
  • Business: 250 custom domains per organization
  • Enterprise: Custom
Laravel Cloud bills additional custom domains beyond your plan’s included amount at $0.25 per domain per month. If you have a special use case that requires many domains (for example, multi-tenant applications), contact us to discuss raising your limits.

Troubleshooting

For guided troubleshooting and provider-specific DNS instructions, see the Domain Verification guide.

Verify DNS from the terminal

You can confirm your records are publicly visible by running the following commands in your terminal. Replace example.com with your actual domain. The examples show both dig and nslookup, so use whichever is available on your system:
If a command returns no output, the record is either missing or has not finished propagating.