> For the complete documentation index, see [llms.txt](https://docs.shopperos.stackline.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.shopperos.stackline.com/pages-studio/hosting.md).

# Domains and hosting

Hosting sets the address where shoppers reach your pages and your concierge. You can use the domain ShopperOS manages for you, your Shopify store, or a domain you own. Open **Settings → Hosting**.

<figure><img src="https://489913050-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FblcXcPwOUg5osGsERflQ%2Fuploads%2Fgit-blob-94ca612cc6ff6ab90b658db3fcf23cad917ea6e0%2Fsettings-hosting.jpg?alt=media" alt="Settings → Hosting"><figcaption><p>The main link is at the top. Your domains are under it.</p></figcaption></figure>

## Each domain moves through a few statuses

A domain you add needs a DNS record before it serves visitors. ShopperOS checks for the record, then shows **Connected**.

```mermaid
stateDiagram-v2
    [*] --> NeedsSetup: Connect
    NeedsSetup --> Checking: I added it — check now
    Checking --> Connected: record found
    Checking --> NeedsAttention: setup stopped
    NeedsSetup: Needs setup
    NeedsAttention: Needs attention
```

*Your own domain, from **Connect** to **Connected**. The ShopperOS domain starts in **Setting up** instead, and needs no DNS record.*

| Status                                              | Meaning                                                                                             |
| --------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| <mark style="color:blue;">**Setting up**</mark>     | ShopperOS is creating your ShopperOS domain. This usually takes a minute or two.                    |
| <mark style="color:orange;">**Needs setup**</mark>  | Your domain needs a DNS record. The open row shows the record to add.                               |
| <mark style="color:blue;">**Checking**</mark>       | ShopperOS is looking for your DNS record. This can take a few minutes. You can leave and come back. |
| <mark style="color:green;">**Connected**</mark>     | The domain serves visitors over HTTPS.                                                              |
| <mark style="color:red;">**Needs attention**</mark> | Something stopped the setup. The open row says what happened.                                       |

## Set up hosting

Setup creates your ShopperOS domain. You need no DNS records for it. ShopperOS manages it for you.

**Before you start:** **Hosting domain** shows **No hosting domain set up yet.** A new project may have no hosting yet.

**Settings → Hosting → Set up hosting**

{% stepper %}
{% step %}

### Start the setup

Click **Set up hosting**. The status shows **Setting up**.
{% endstep %}

{% step %}

### Wait for your ShopperOS domain

ShopperOS creates your ShopperOS domain. This usually takes a minute or two.
{% endstep %}
{% endstepper %}

Done. The ShopperOS domain shows **Connected**. Next, [choose the main link](#choose-the-main-link).

## Choose the main link

**Main link** is the address that shared links and published pages open. You can change it at any time.

| Option               | What it is                                                         | Use it when                                                                                          |
| -------------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
| **ShopperOS domain** | A domain we manage. It works with no store.                        | You do not use a Shopify storefront, or you serve pages on your own domain.                          |
| **Shopify store**    | The connected Shopify store, with its cart, checkout, and sign-in. | Shoppers browse on your Shopify store. The concierge chat shows on your store only with this choice. |

Each option shows the address it uses. Click an option to select it. The change saves at once.

When you change the main link, these move to the new address too:

* Your published pages and your preview links.
* The concierge, checkout, and shopper sign-in.

{% hint style="info" %}
**Pages → Publishing → Domains → Page address** is the same setting. You can change it in either place. See [Domains in Publish and go live](/pages-studio/publishing.md#domains).
{% endhint %}

**Shopify store** needs a connected store. Until then, the option is not available, and you see **No Shopify store is connected.** See [Connect your Shopify store](/selling-and-checkout/shopify-integration.md).

{% hint style="warning" %}
If **Store product pages** is on, you cannot move off your Shopify store. Turn it off first in **Pages → Publishing → Domains**.
{% endhint %}

## Domains lists every address of your project

**Domains** lists every address your project is served on. The ShopperOS domain is always there, marked **Default**. Your own domains are listed below it.

Click a row to open it. The open row says what the domain is doing, and shows its actions. Click the external link icon beside a domain to open it in a new tab.

### Add your own domain

You can add up to three of your own domains. Each one needs a CNAME record at your domain provider.

**Before you start:**

* The ShopperOS domain shows **Connected**.
* You use a subdomain, such as `shop.example.com`. Most domain providers do not allow a CNAME record on a root domain such as `example.com`.

**Settings → Hosting → Domains → Add domain**

{% stepper %}
{% step %}

### Open the form

Under **Domains**, click **Add domain**.
{% endstep %}

{% step %}

### Add the domain

Type your domain, such as `shop.example.com`, and click **Connect**. A new row opens.
{% endstep %}

{% step %}

### Copy the DNS record

The new row opens with **Add this DNS record with your domain provider, then check.** Copy the record from the table:

| Column        | What to enter at your domain provider                                           |
| ------------- | ------------------------------------------------------------------------------- |
| **Type**      | `CNAME`                                                                         |
| **Host**      | Your domain, as shown. Some providers want only the first part, such as `shop`. |
| **Points to** | The target shown.                                                               |
| {% endstep %} |                                                                                 |

{% step %}

### Save the record

Save the record at your domain provider.
{% endstep %}

{% step %}

### Check it

In ShopperOS, click **I added it — check now**. The status changes to **Checking**, then **Connected**. It can take a few minutes after you save the record.
{% endstep %}
{% endstepper %}

Done. The domain serves visitors over HTTPS. If you see **We couldn't find the DNS record yet.**, see [Troubleshooting](#troubleshooting). Next, [make the domain primary](#make-a-domain-primary).

### Make a domain primary

The primary domain is your project's main address.

{% stepper %}
{% step %}

### Open a connected domain

Open the row of a domain that shows **Connected**.
{% endstep %}

{% step %}

### Make it primary

Click **Make primary**. Read **Make … the primary domain?**, and click **Make primary**.
{% endstep %}
{% endstepper %}

Done. The domain is your project's main address. The earlier primary domain stays connected as an additional domain. Nothing goes offline.

### Disconnect a domain

Visitors who use a disconnected domain stop reaching your project.

1. Open the domain's row, and click **Disconnect**.
2. Read **Disconnect …?**, and click **Disconnect**.

Done. To use the domain again, add it again and update DNS.

### Reset hosting

Reset hosting is the last step when the ShopperOS domain setup does not finish.

{% hint style="warning" %}
**Reset hosting** removes the current setup and creates the ShopperOS domain again. It removes your connected domains. You must add them again and update DNS. Setup can take a few minutes.
{% endhint %}

1. Open the ShopperOS domain's row.
2. If it is not **Connected**, click **Re-check now** first.
3. If the setup still does not finish, click **Reset hosting**.
4. Confirm.

Done. ShopperOS creates the ShopperOS domain again. Next, [add your own domains again](#add-your-own-domain).

## Allow another site to call your APIs

Most projects do not need **Advanced · Trusted origins**. Use it only when another site calls your project's APIs from its own address. Your own domains are always allowed. You do not need to add them. You can add up to 16 trusted origins.

1. Under **Domains**, click **Advanced · Trusted origins**.
2. Type the other site's hostname, such as `shop.example.com`.
3. Click **Add**.

Done. That site can now call your project's APIs. To remove an origin, click its close button, then click **Remove**. That site can no longer call your project's APIs.

## What if…?

<details>

<summary>What if I already have three domains and want another?</summary>

Disconnect a domain you no longer use. Then add the new one.

</details>

<details>

<summary>What if I make my own domain primary? Does the old one go offline?</summary>

No. The old primary domain stays connected as an additional domain.

</details>

<details>

<summary>What if my domain provider does not accept the record?</summary>

Most providers do not allow a CNAME record on a root domain such as `example.com`. Use a subdomain, such as `shop.example.com`.

</details>

## Troubleshooting

| Message                                                                                   | What to do                                                                                            |
| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| **We couldn't find the DNS record yet.**                                                  | Check that the CNAME record points to the target shown. Wait a few minutes, then click **Try again**. |
| **This domain is already connected somewhere else.**                                      | Disconnect the domain there first. If this looks wrong, contact support.                              |
| **We're still setting up secure hosting for this domain.**                                | Wait a few minutes. ShopperOS is creating the secure certificate.                                     |
| **We couldn't finish setting up this domain. Reset it to try again, or contact support.** | Click **Reset hosting**. If it fails again, contact support.                                          |
| **The ShopperOS domain is still setting up — add a custom domain once it's live.**        | Wait until the ShopperOS domain shows **Connected**, then add your domain.                            |
| **Up to 3 custom domains. Disconnect one to add another.**                                | Disconnect a domain you no longer use.                                                                |
| **This page changed elsewhere — reloading. Try again.**                                   | Someone else changed hosting. The page reloads. Make your change again.                               |
| **We're experiencing high demand. Please wait a moment and try again.**                   | Wait a moment, then try again.                                                                        |
| **We couldn't connect this domain. Contact support.**                                     | Contact support, and name the domain.                                                                 |
| **Enter a hostname like shop.example.com.**                                               | The trusted origin field is empty. Type the other site's hostname, then click **Add**.                |

## Next step

{% content-ref url="/pages/BHz7i7B97Pz3efe8Wxwu" %}
[AI concierge](/concierge/concierge.md)
{% endcontent-ref %}
