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

# Connect your domain

> How to connect a domain so generated pages publish on your own site.

Anymorph writes pages, but they have to be served from a web address. Until you connect a domain, pages sit on an Anymorph preview address — fine for review, but it builds no authority for your brand. Connect a domain and your pages publish on your own site, where AI engines and search engines read them as yours.

<Note>
  **Publish** requires an active custom domain. Without one, publishing fails with "No active custom domain configured".
</Note>

<Frame>
  <img src="https://mintcdn.com/opactor/ueicEUgPZ5iGb5FG/images/settings/settings-domain-wizard.png?fit=max&auto=format&n=ueicEUgPZ5iGb5FG&q=85&s=d9d601872d090faf3d2be4adfa67c257" alt="Domain connection wizard with the domain entry field" width="1600" height="1000" data-path="images/settings/settings-domain-wizard.png" />
</Frame>

***

## Pick one of three shapes

| Shape                             | Where pages live             | What it needs                                                    | Best when                                                              |
| --------------------------------- | ---------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------- |
| **Subpath Routing** — recommended | `yourdomain.com/a/page-name` | No DNS change. One forwarding rule on your hosting platform      | Your platform supports rewrites. Fastest to set up and easiest to undo |
| **Subdomain Routing**             | `pages.yourdomain.com`       | One CNAME record plus a TXT record for the certificate           | You would rather not touch the root domain                             |
| **Domain Routing**                | `yourdomain.com/page-name`   | Same records, plus a DNS provider that supports CNAME flattening | Pages must serve straight from the root domain                         |

<Warning>
  Root domains (`example.com`) only work with a DNS provider that supports CNAME flattening. Anymorph detects your provider from your nameservers, and only **Cloudflare** and **Namecheap** count as supporting it. On Vercel DNS, Route 53, Google Domains, GoDaddy, Netlify DNS, Azure DNS or DigitalOcean, use a subdomain such as `pages.example.com` instead.
</Warning>

DNS is the address book that decides where a web address points. A CNAME record says "this address follows that address"; a TXT record is a note used to prove you own the domain.

### Who does what

| Step                                    | Marketer         | Developer / IT        |
| --------------------------------------- | ---------------- | --------------------- |
| Run the wizard, pick platform and shape | You              | —                     |
| Add the CNAME and TXT records           | —                | In your DNS provider  |
| Ship the subpath forwarding rule        | Copy the snippet | Ships it on your site |
| Certificate (SSL), status checks        | —                | Anymorph handles it   |

***

## Steps

<Steps>
  <Step title="Enter your domain">
    Go to **Settings** → **Domain** → the **Connect Domain** card and type your address into *Enter your domain* (for example `example.com`). Root domains and subdomains are both accepted. **Continue** first checks whether that address redirects elsewhere. If you see *"This domain redirects"*, take the suggestion with the **Use \[canonical]** button — pointing at an address that redirects breaks the setup.
  </Step>

  <Step title="Choose your platform and routing shape">
    Under *What platform hosts your site?* pick your host (Vercel, Netlify, Cloudflare Pages, Cloudflare Workers, AWS CloudFront, GCP Cloud CDN, Azure CDN, Framer, Webflow, Wix, Shopify, Squarespace, Other / Self-hosted). Then choose **Subpath Routing**, **Domain Routing** or **Subdomain Routing**. Subpath carries a **Recommended** badge where the platform supports it and is greyed out with *"Not supported by \[platform]"* where it does not. For a subdomain you also enter a **Subdomain prefix** such as `pages`.
  </Step>

  <Step title="Give an Origin URL (domain and subdomain shapes)">
    The **Origin URL** is where your existing site really lives right now. Anymorph forwards every non-Anymorph request to it. Leave it out and requests loop back on themselves forever. The screen shows a hint per platform — Framer `your-site.framer.app`, Wix `username.wixsite.com/mysite`, Squarespace `your-site.squarespace.com`, Vercel `your-project.vercel.app`. For Webflow and Shopify, Anymorph generates a hidden address instead (`wf.yourdomain.com` / `sp.yourdomain.com`) and walks you through pointing that one first.
  </Step>

  <Step title="Add the DNS records (domain and subdomain shapes)">
    Click **Add Domain** and you get the **Configure DNS Records** table — Type / Name / Value, with a copy button on every cell. Hand that table to whoever runs your DNS.

    | Type                           | What it does                                                                            |
    | ------------------------------ | --------------------------------------------------------------------------------------- |
    | `CNAME` → `proxy.anymorph.app` | Routes requests for this address to Anymorph                                            |
    | `TXT` (`_acme-challenge.…`)    | Proves you own the domain so the security certificate (SSL) can be issued automatically |

    <Tip>On Cloudflare, this CNAME must be set to **DNS only** (grey cloud). Proxied (orange cloud) will not complete the connection.</Tip>
  </Step>

  <Step title="Subpath: ship the rule, then verify">
    Choosing subpath shows **Configure Your Proxy** with your workspace's proxy address (`https://p-…anymorph.app`), the **Route prefix** (default `a`) and a copy-ready snippet for your platform — a rewrites entry in `vercel.json`, a redirects block in `netlify.toml`, one `_redirects` line on Cloudflare Pages, a path passthrough on Cloudflare Workers, or a `/a/*` path pattern on AWS CloudFront. Your developer ships that change, then you come back and click **Verify Connection**.
  </Step>
</Steps>

What **Verify Connection** tells you:

* *"Connection verified successfully!"* — done, and the domain flips to **Active**.
* *"Domain is already connected"* — nothing to do.
* *"Proxy returned \[code]. Make sure your rewrite is configured correctly."* — the forwarding rule is wrong.
* *"Failed to connect: \[reason]. Make sure your rewrite is configured and deployed."* — the rule is not live on your site yet.

***

## How long it takes

The screen says 5–30 minutes, and that is typical. Anymorph re-checks the domain every 15 seconds and looks for your CNAME every 5 seconds while setup is incomplete. DNS propagation itself is outside Anymorph's control, so if the old record had a long lifetime it can take up to a day.

**Reading the status chips**

* **Active** — connected. You can publish pages now.
* **Pending** — still waiting on records. You will see *"Waiting for CNAME & SSL"*, *"SSL certificate will be issued automatically after CNAME propagation"* or *"SSL certificate issued! Waiting for CNAME propagation…"*.
* **Error** — something in the address or the records is wrong. See Troubleshooting.
* **SSL \[status]** — the certificate is being issued. You never buy or install one yourself.
* **CNAME Routing** / **Subpath Routing** — the shape you are on.

<Frame>
  <img src="https://mintcdn.com/opactor/ueicEUgPZ5iGb5FG/images/settings/settings-domain.png?fit=max&auto=format&n=ueicEUgPZ5iGb5FG&q=85&s=686c81c5dafb5cd017be70cd225abaf1" alt="Domain screen with a connected domain, status chips and the checklist" width="1600" height="1000" data-path="images/settings/settings-domain.png" />
</Frame>

<Note>
  **Shopify has one more step, later.** Once the domain reads **Active**, the card shows **Complete Setup (Zero-Downtime Cutover)**. During initial setup the wizard warns *"Do not set as primary domain yet!"* — so switch your Shopify primary domain only after the connected domain is Active.
</Note>

***

## Troubleshooting

<AccordionGroup>
  <Accordion title="&#x22;This domain redirects&#x22;">
    The address you typed forwards somewhere else. Click **Use \[canonical]** to connect the final address instead. Connecting the redirecting one never completes.
  </Accordion>

  <Accordion title="&#x22;Couldn't connect domain&#x22;">
    The hostname was rejected (`Invalid domain format`, `Invalid hostname format`, `hostname is required`). Enter just the domain name — no `https://`, no path, no spaces.
  </Accordion>

  <Accordion title="&#x22;CNAME record not found yet. Please wait for DNS propagation.&#x22;">
    The record is not resolving yet. Check the Name and Value in your DNS provider match the table exactly, and on Cloudflare that it is grey cloud (DNS only). If it all matches, wait a few minutes and press **Refresh** or **Check**.
  </Accordion>

  <Accordion title="Stuck on Pending with an SSL chip">
    The `_acme-challenge` TXT record has not resolved. Confirm it was added exactly as shown, record name included. The certificate is issued automatically the moment it resolves.
  </Accordion>

  <Accordion title="My root domain won't accept a CNAME">
    A CNAME at the root needs a DNS provider that flattens it (Cloudflare, Namecheap). If yours does not, connect a subdomain such as `pages.example.com` instead.
  </Accordion>

  <Accordion title="Pages that Anymorph did not create now 404">
    The **Origin URL** is wrong. It must be where your site is actually served today. Webflow in particular must not use `cdn.webflow.com` as the origin — use the hidden address the wizard set up.
  </Accordion>

  <Accordion title="&#x22;Proxy returned [code]&#x22; on subpath verification">
    The forwarding rule is not live, or the path is different. Ask your developer to open `https://yourdomain.com/[prefix]/__check__` directly — that address has to reach Anymorph before **Verify Connection** succeeds.
  </Accordion>

  <Accordion title="I want to disconnect the domain">
    On the domain row, kebab menu → **Remove domain** → **Remove** in the *"Remove this domain?"* dialog. You get a *"Domain disconnected"* toast and can reconnect later.
  </Accordion>
</AccordionGroup>

***

## The checklist after activation

Once the domain reads **Active**, a **Checklist** appears under the card (or **Action Required** if something is failing). It matters most on subpath routing, because those files live on your site rather than on Anymorph.

* **robots.txt exists** — the file that tells search and AI crawlers what they may read. Copy-ready content is provided.
* **Sitemap URL added to robots.txt** — one line pointing at the list of your generated pages.
* **IndexNow instant indexing** — instantly notifies Bing and similar engines about new pages. Paste a key or click **Generate**, then save.
* **Google Search Console connected** — use the **GSC Integrations** link. Full steps are in [Search Console and indexing](/guides/search-console-indexing).

When everything passes you see *"All done! You're ready to publish pages."* On CNAME and subdomain shapes, Anymorph handles robots.txt, the sitemap and IndexNow for you, so those items do not appear.

<Tip>
  Your generated pages are served by Anymorph, so your site-wide tracking tags are not on them automatically. Add your GA4 measurement ID or GTM container ID under [Custom scripts](/settings/custom-scripts).
</Tip>

***

## Related

<CardGroup cols={2}>
  <Card title="Domain settings" icon="globe" href="/settings/domain">
    Every field and status on the Domain screen.
  </Card>

  <Card title="Search Console and indexing" icon="magnifying-glass" href="/guides/search-console-indexing">
    Getting your published pages into Google.
  </Card>

  <Card title="On-site" icon="file-lines" href="/dashboard/on-site">
    Where you publish pages once the domain is live.
  </Card>

  <Card title="Custom scripts" icon="code" href="/settings/custom-scripts">
    Put your tracking tags on generated pages.
  </Card>
</CardGroup>
