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

# Publishing & domains

> Publish pages and websites, use your webstor.io subdomain, and connect a custom domain.

Going live on Webstorio is a two-step process: **publish pages**, then **publish the website**. This guide covers URLs, custom domains, and SSL.

## Publishing workflow

```mermaid theme={"dark"}
flowchart LR
  Draft["Page draft"]
  PubPage["Publish page"]
  PubSite["Publish website"]
  Live["Live at subdomain"]

  Draft --> PubPage --> PubSite --> Live
```

### Publish a page

1. Edit your page in the dashboard.
2. When satisfied, open **Actions** on that page from the project dashboard.
3. Click **Publish**.

Published pages are included when the site is live. Draft pages are hidden from visitors.

### Publish the website

1. Ensure **at least one page** is published.
2. On the project dashboard, click **Publish Website**.
3. Your site is reachable at:

```
https://your-subdomain.webstor.io
```

To take the site offline, use **Unpublish**.

<Warning>
  Plan limits apply: the Free plan allows **one published website**. Publishing
  additional sites on Free may require upgrading or unpublishing another
  project.
</Warning>

## Your default subdomain

When you create a project, Webstorio generates a subdomain from your project name:

| Project name   | Typical subdomain           |
| -------------- | --------------------------- |
| My Bakery      | `my-bakery.webstor.io`      |
| Acme Labs 2024 | `acme-labs-2024.webstor.io` |

Reserved and inappropriate names are blocked. If a subdomain is taken, choose a different project name.

Every site gets **free SSL** on `*.webstor.io`.

## Custom domains

**Available on:** Starter plan and above.

Connect your own domain (e.g. `www.mybakery.com`) so visitors see your brand, not `*.webstor.io`.

### Setup overview

1. Open **Project → Settings → Domains** (or **Custom domains**).
2. Add your domain (e.g. `mybakery.com` or `www.mybakery.com`).
3. Webstorio shows **DNS records** to add at your registrar:
   * Usually a **CNAME** or **A** record pointing to Webstorio's servers
4. Wait for DNS propagation (minutes to 48 hours).
5. Webstorio provisions **SSL** automatically once verification succeeds.

<Tip>
  Use `www` or apex (`@`) consistently. Add both if you want `mybakery.com` and
  `www.mybakery.com` to work — follow the in-app DNS instructions for each.
</Tip>

### Auth callback URLs

If **User Authentication** is enabled, sign-in redirects must work on custom domains too. Check **Auth → Settings** after adding a domain — callback URLs should include your custom domain.

## Preview vs live

| Mode                                | Where                           | Who sees it           |
| ----------------------------------- | ------------------------------- | --------------------- |
| **Editor preview**                  | Dashboard page editor           | You (while editing)   |
| **Draft**                           | Not on public URL               | Only you in dashboard |
| **Published page + published site** | `*.webstor.io` or custom domain | Everyone              |

## SEO when publishing

Before going live, set per-page SEO in the editor or project settings:

* **Title** — appears in browser tab and search results
* **Description** — meta description for search snippets
* **Social image** — Open Graph preview when shared

Webstorio includes built-in SEO defaults from your project name and description.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Publish Website is disabled" icon="circle-help">
    Publish at least one page first. Check that you're a project owner or admin.
  </Accordion>

  <Accordion title="Custom domain not verifying" icon="circle-help">
    Double-check DNS records at your registrar. Use an DNS lookup tool to
    confirm propagation. TTL changes can take up to 48 hours.
  </Accordion>

  <Accordion title="Changes not visible on live site" icon="circle-help">
    Edits save as drafts until you **publish the page** again. Hard-refresh the
    browser (Ctrl+Shift+R) to bypass cache.
  </Accordion>
</AccordionGroup>
