> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sevalla.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> These are the docs for Sevalla, a platform for deploying applications, databases, static sites, object storage and load balancers. The dashboard is at https://app.sevalla.com.
> Bold text in steps is an exact dashboard label.
> To act on a Sevalla account, prefer the Sevalla MCP server (https://mcp.sevalla.com/mcp, see https://docs.sevalla.com/ai-agents/overview.md), then the Sevalla CLI (https://docs.sevalla.com/developer-tools/cli.md), then the REST API (https://api-docs.sevalla.com, OpenAPI spec at https://api.sevalla.com/v3/openapi.json).
> Every page index is at https://docs.sevalla.com/llms.txt.

# Troubleshoot custom domains

> Fix custom domains that stay in Verification or Pointing, time out, fail SSL validation, loop on redirects or can't be added, with the cause and the fix for each.

Most custom domain problems come from a DNS record that is missing, conflicting or mistyped. Find your symptom, check the cause, apply the fix, then click **Refresh records** in the domain's **DNS records** sheet. For how domains work, see [Custom domains](/domains/overview).

## Check what your DNS publishes

DNS changes can take from minutes to hours to reach everyone, depending on the record's TTL. Before you change anything, compare what your DNS returns with the **DNS records** sheet. For `shop.example.com`:

```bash theme={null}
dig +short shop.example.com A                         # pointing record (A)
dig +short shop.example.com CNAME                     # pointing record (CNAME), or a conflicting one
dig +short shop.example.com AAAA                      # IPv6 records left from a previous host
dig +short _cf-custom-hostname.shop.example.com TXT   # ownership record
dig +short _acme-challenge.shop.example.com TXT       # SSL validation record
dig +short _acme-challenge.shop.example.com CNAME     # SSL validation record of a wildcard domain
dig +short shop.example.com CAA                       # allowed certificate authorities
```

Each value must match the sheet exactly. If a command returns nothing, the record isn't published yet, or its name is wrong.

## The domain stays in Verification

The ownership or SSL validation record is missing or wrong, or something else on the domain blocks validation. Check, in this order:

| Cause | Fix |
| - | - |
| An `A` or `CNAME` record on the domain still points at a previous host | Delete it. With an existing record on the name, the certificate authority tries to validate through it and fails. |
| The record name is doubled, such as `_cf-custom-hostname.shop.example.com.example.com` | Your DNS provider adds the domain itself. Use the short name from the sheet (`_cf-custom-hostname.shop`). |
| The `_acme-challenge` record has the wrong type | Use `TXT` for a standard domain and `CNAME` for a wildcard domain, as the sheet shows. |
| Old `_cf-custom-hostname` or `_acme-challenge` records from an earlier attempt | Delete them and add the current values. Every new attempt gets new values. |
| The value is mistyped or has a space or quotes | Copy it again with the copy button. |
| Your DNS is on Cloudflare and the `CNAME` record is proxied (orange cloud) | Set it to **DNS only** until the domain is **Active**. See [Domains on Cloudflare DNS](/domains/overview#domains-on-cloudflare-dns). |
| A `CAA` record doesn't allow Sevalla's certificate authority | See [SSL validation problems](#ssl-validation-problems). |
| A long TTL, or the records were added minutes ago | Wait, then click **Refresh records**. |

Sevalla checks the records every 30 minutes for 7 days, and every 10 seconds while the sheet is open.

## SSL validation problems

When the last check found a problem, the **DNS records** sheet shows `The last check found problems` with the certificate authority's messages. The usual cause is a `CAA` record: when a domain has `CAA` records, only the certificate authorities they name can issue a certificate for it.

Add a `CAA` record that allows Google Trust Services, the authority Sevalla uses:

```text theme={null}
shop.example.com.  CAA  0 issue "pki.goog"
```

For an internationalized domain name (with non-ASCII characters), allow Let's Encrypt instead with `0 issue "letsencrypt.org"`. If you don't need `CAA` records, delete them. A `CAA` record on a parent domain (`example.com`) applies to its subdomains too.

## Verification timed out

A domain that stays in **Verification** for 7 days, or whose certificate validation times out, gets the status **Timed out**, and its **DNS records** sheet says `Verification timed out`. Sevalla stops checking it. The status is final:

<Steps>
  <Step title="Fix the records">
    Check your records against the causes in [The domain stays in Verification](#the-domain-stays-in-verification).
  </Step>

  <Step title="Delete the domain">
    On the service's **Domains** tab, open the domain's ⋯ menu, click **Delete**, then click **Delete domain**.
  </Step>

  <Step title="Add it again">
    Click **Add custom domain** and add the same domain. It gets new verification values: replace the old records with them.
  </Step>
</Steps>

## The domain stays in Pointing

The domain is verified, but Sevalla doesn't see it pointing at Sevalla yet.

| Cause | Fix |
| - | - |
| The `A` record has another value than the sheet, or the `CNAME` another target | Update it to the exact value in the **Point domain** step. |
| More than one `A` record, one of them for a previous host | Delete the others. Every `A` record of the domain must point at Sevalla. |
| A `CNAME` record on a provider other than Cloudflare | Use the `A` record the sheet shows. |
| A wildcard domain without its `*.` record | Add the second pointing record, for `*.` the domain. |
| The domain was added more than 7 days ago | Sevalla no longer checks it on its own. Click **Refresh records** after fixing the record. |

## The domain is Active but shows another site

Some visitors still reach the previous host, or an old version of the site.

| Cause | Fix |
| - | - |
| An `AAAA` record points at the previous host | Delete it. Sevalla uses `A` records only, so IPv6 visitors keep reaching the `AAAA` address. |
| DNS caches still hold the old records | Wait for the old records' TTL to expire. Check from another network or with `dig @1.1.1.1 shop.example.com A`. |
| Your own Cloudflare zone caches the old content | Purge your zone's cache. Purging Sevalla's [cache](/applications/caching) doesn't purge it. |
| The browser cached a redirect or the old page | Open the domain in a private window. |

## Too many redirects

The browser shows `ERR_TOO_MANY_REDIRECTS` (or "redirected you too many times"). The usual cause is a domain proxied through your own Cloudflare zone with the SSL/TLS mode **Flexible**: your zone sends requests to Sevalla over HTTP, Sevalla redirects them to HTTPS, and the loop repeats. Set your zone's SSL/TLS mode to **Full** or **Full (strict)**, or set the record to **DNS only**.

If the domain isn't proxied, check your application's own redirects, for example a redirect from `example.com` to `www.example.com` and another one back.

## The browser shows a certificate warning

| Cause | Fix |
| - | - |
| The domain is still in **Verification**: it has no certificate yet | Finish [verification](/domains/overview#verify-the-domain). The certificate is issued when the status changes to **Pointing**. |
| A subdomain isn't covered: `blog.example.com` when you added only `example.com` without **Wildcard** | Add the subdomain as its own domain, or add `example.com` again with **Wildcard**. |
| The visitor uses an old browser without TLS 1.2 | Sevalla requires TLS 1.2 or later. |

## You cannot add the domain

| Message | Cause | Fix |
| - | - | - |
| `Invalid domain name` | The name isn't a valid public hostname, starts with `*.`, or uses a reserved name such as `localhost` | Enter a hostname like `shop.example.com`. For subdomains, select **Wildcard** instead of typing `*.`. |
| `.ru domain names are not supported` | Sevalla doesn't serve `.ru` domains | See [Acceptable use](/security/acceptable-use#restricted-countries). |
| `Domain already exists` | The domain is on another Sevalla service, in your company or another one | Delete it from the other service first. If it isn't in your company, [contact support](/support/get-help). |
| `Custom domains aren’t available on the Hobby size.` | The application's web process uses the **H1** size (the Hobby size) | Click **Modify process** and pick a larger size. See [Scaling](/applications/scaling). |
| `Add a payment method or credits to add custom domains.` | The company has no valid payment method or credits | Add a [payment method](/billing/payments). |
| `Cannot add a new domain to the application due to the existing restriction` | The company has a restriction on its account | [Contact support](/support/get-help). |
| `Failed to add custom domain` | Cloudflare refused the domain | [Contact support](/support/get-help) with the domain name. |

## You cannot rename the Sevalla domain

| Message | Cause | Fix |
| - | - | - |
| `This domain name is not allowed` | The name contains a blocked word | Pick another name. |
| `Failed to update domain` | The name contains a blocked word inside another word: Sevalla also refuses short terms such as `x`, `tor` or `ms` anywhere in the name, so `nextjs` and `storefront` fail | Pick a name without them. |
| `Domain already exists` | Another service already uses that Sevalla domain | Pick another name. |

**Update** is disabled for a disabled Sevalla domain: enable it first. For every rule, see [Rename a Sevalla domain](/domains/overview#rename-a-sevalla-domain).

## Still stuck

[Contact support](/support/get-help) with the domain name, the service it's on, its status, and the output of the `dig` commands in [Check what your DNS publishes](#check-what-your-dns-publishes). Support can see Cloudflare's own diagnostics for the domain.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.