# How to Update an OpenClaw Website Without Changing Its URL

> Keep the same live URL when OpenClaw revises your static site. Deploy to the same Cloudflare Pages or Netlify project, then test the update.

## Why the URL changes, and how to keep it

To keep a stable website URL, revise the original project folder. Then deploy it to the same hosting project, in production mode. A new hosting project, a preview deployment or a draft deployment gives you a different URL.

OpenClaw can build and update a static site from a chat. It can also run deploy commands through its `exec` tool. This guide shows the update loop (edit, build, deploy, repeat) with two common hosts for prebuilt files: [Cloudflare Pages](https://developers.cloudflare.com/pages/get-started/direct-upload/) and [Netlify](https://docs.netlify.com/deploy/create-deploys/). It also has a note about GitHub Pages. If you publish for the first time, read the [Cloudflare Pages tutorial](/blog/how-to-publish-an-ai-generated-site-on-cloudflare-pages/) or the [Netlify guide](/blog/publish-ai-site-netlify/). They give more detail about the initial setup.

## Understand what keeps the URL stable

A website URL belongs to a hosting project, not to one copy of `index.html`. Each deployment replaces the files that the project serves, and the address stays the same:

| Host | Stable address | Deploy that keeps it | What gives you a different URL |
|---|---|---|---|
| Cloudflare Pages | ` .pages.dev` or your custom domain | `npx wrangler pages deploy --project-name= ` on the production branch | A new project, or a deployment to another branch. Cloudflare serves that branch at ` . .pages.dev` |
| Netlify | The project's main URL or your custom domain | `netlify deploy --prod` from a linked folder | No `--prod` flag (Netlify then creates a draft deployment with a random subdomain), or a deployment to a new project |
| GitHub Pages | The repository's Pages address | A push of new files to the publishing branch and folder | A new repository |

Use this safe loop:

1. Build the site in one dedicated folder.
2. Deploy it once to create the hosting project.
3. Save the live URL and the project's name or ID.
4. Edit the files in place.
5. If the project has a build step, build the site again.
6. Deploy the same output folder to the same project, in production mode.
7. Open the saved URL. Make sure that the change is live.

## Step 1: keep one project folder

Ask OpenClaw to create the static site in a folder with a clear name. The folder must contain the entry file of the site and all relative assets:

```text
project-status-site/
├── index.html
├── styles.css
├── app.js
└── assets/
```

A framework project can have a source folder and a generated output folder, such as `dist` or `build`. In that case, deploy the generated static output. Do not deploy the framework source or a development server.

Know the location of that folder. By default, OpenClaw's [agent workspace](https://docs.openclaw.ai/concepts/agent-workspace) is `~/.openclaw/workspace`, and relative paths start from it. Sandboxing (a mode that runs tools in an isolated area) can change this. If sandboxing is on and its `workspaceAccess` setting is not `"rw"`, tools work inside a sandbox workspace under `~/.openclaw/sandboxes`. Ask OpenClaw to report the absolute path of the project folder. Keep that path with your notes.

## Step 2: deploy once and create the project

The deploy commands need credentials on the machine where OpenClaw runs. On your own computer, sign in once yourself with `npx wrangler login` or `netlify login`. On a server without a browser, put an API token in an environment variable. For Wrangler, use `CLOUDFLARE_API_TOKEN` and `CLOUDFLARE_ACCOUNT_ID`. For the Netlify CLI, use `NETLIFY_AUTH_TOKEN`. Keep these tokens out of the project folder and out of chat messages.

For Cloudflare Pages, create the project once:

```sh
npx wrangler pages project create
```

Wrangler asks for a project name and a production branch. Then deploy the folder:

```sh
npx wrangler pages deploy project-status-site --project-name=project-status
```

Cloudflare serves the production site at `project-status.pages.dev`. If another project already uses the name, Cloudflare adds a few random characters. You can also create the project with drag and drop. Drag the folder into **Workers & Pages** > **Create application** > **Get started** > **Drag and drop your files**. In a Direct Upload project, you can switch between drag and drop and Wrangler for later deployments.

For Netlify, create the project once. For example, sign in and drag the output folder onto [Netlify Drop](https://app.netlify.com/drop). Then run `netlify link` in the project folder to connect the folder to that project. The CLI stores the project ID in `.netlify/state.json`. This command sends later deployments to production:

```sh
netlify deploy --prod --dir=project-status-site
```

Without `--prod`, `netlify deploy` publishes to a unique draft URL for tests. A draft URL is useful for review, but it is not your stable address.

This is a useful first instruction for OpenClaw:

> Deploy the folder project-status-site to a new Cloudflare Pages project named project-status, using production mode. Report the production URL, the project name and the absolute path of the folder you deployed.

Your [exec approval](https://docs.openclaw.ai/tools/exec-approvals) settings can make OpenClaw ask before it runs the deploy command. Read the command before you approve it. The project name and the folder are the two values that decide which URL changes.

## Step 3: save the project identity

After the first deployment, write down these three items:

- The production URL, for example `https://project-status.pages.dev`.
- The project name (Cloudflare) or project ID (Netlify). In Netlify, you can copy it from **Project configuration** > **General** > **Project details** > **Project information** > **Project ID**.
- The absolute path of the output folder that OpenClaw deployed.

An exact name or ID is clearer than a title such as "Project status." This difference is important when you have several similar sites.

## Step 4: revise the original project

Give OpenClaw a specific change, and name the existing project in the request:

> In the existing project-status-site folder, change the heading to "Launch readiness," add a three-item checklist, and rebuild if the project has a build step. Do not create a new folder or a new hosting project.

If you can, open the generated output locally before you deploy it. Both hosts serve static files. Some pages work only with a local development server, private environment variables or a background process. These pages do not work the same way after deployment.

## Step 5: deploy to the same project again

Run the same command from the same location:

```sh
npx wrangler pages deploy project-status-site --project-name=project-status
```

For Netlify, run this command:

```sh
netlify deploy --prod --dir=project-status-site
```

If the folder is inside a Git repository, Wrangler reads the current Git branch. A deployment from a branch other than the production branch becomes a preview deployment. To name the branch explicitly, add `--branch=main` (or the production branch that you chose).

Then open the saved production URL in a private window. As an alternative, do a hard refresh (a reload that skips the cache). This prevents old cached CSS or JavaScript from hiding the update. The command output can also show an address for that one deployment. Share only the saved production URL.

## Step 6: verify access settings

If the site is private, make sure that the protection still works after the update:

1. Open the original URL in a private window.
2. Make sure that the login or password screen appears. On Cloudflare, this screen is the Cloudflare Access email prompt. If you use [Netlify password protection](/blog/how-to-password-protect-a-netlify-site/), it is the Netlify password page.
3. Sign in or enter the password. Make sure that the revised page loads.
4. Keep passwords and tokens out of the published files and out of prompts.

A new deployment replaces the files, not the settings of the project. For this reason, the protection still applies. But look at the access screen after each significant change, because this is a good release habit. On Cloudflare Pages, the built-in access policy of the project covers only preview deployments. To protect `*.pages.dev` and custom domains, do the extra steps in the [Cloudflare Pages Access guide](/blog/how-to-password-protect-a-cloudflare-pages-site/).

## If OpenClaw returned a different URL

Do these checks in order.

### Confirm the folder

Make sure that OpenClaw deployed the original output folder, not a copy. A copied folder can lack the Netlify link file (`.netlify/state.json`). A sandbox copy can also be different from the folder that you edited.

### Confirm the command location

Before the deployment, ask OpenClaw to run `pwd`. Compare the path with the path that you saved. If you use a framework, also make sure that you deploy the same generated output folder.

### Confirm the project

For Cloudflare, make sure that `--project-name` matches exactly. The command `npx wrangler pages project list` shows your projects. For Netlify, make sure that the folder links to the correct project. You can also give the project ID explicitly with `--site` or with the `NETLIFY_SITE_ID` environment variable. Do not ask OpenClaw to "create a site" for a revision.

### Confirm production mode

A Netlify deployment without `--prod` is a draft. A Cloudflare deployment from a non-production Git branch is a preview. Both get their own URLs, and the production site does not change.

### Do not discard the project files

A cleanup step that deletes hidden folders can remove `.netlify/state.json`. Keep the project folder complete. If the file is gone, link the folder again with `netlify link` before the next deployment.

## If the page did not change

A stable URL with old content usually has one of these causes:

- OpenClaw edited the source but did not rebuild the static output.
- The deployment used the wrong output folder.
- OpenClaw edited a sandbox copy while you deployed the host folder, or the other way round.
- The deployment went to a preview or a draft instead of production.
- The browser shows cached assets.
- The updated file has a different name or path from the file that the live page uses.

Add a visible, unique test string to the page. Build and deploy again. Then look for the string in the page source. When the string appears, you know that the path is correct, and you can remove the string.

On GitHub Pages, make sure that the commit reached the publishing branch and folder in **Settings** > **Pages**. Also make sure that the Pages build finished.

## A reusable OpenClaw update prompt

> Open the existing project at [path]. Make these changes: [changes]. Run its static production build if it has one. Deploy the output folder to the existing [Cloudflare Pages project named X | Netlify project with ID Y] in production mode. Confirm that the production URL exactly matches [saved URL]. Do not create a new project. Then summarize the files changed and the live URL.

The prompt states the project, the build step, the existing identity, the expected URL and the verification step. With these details, accidental duplicate sites are much less likely.

## Final checklist

Before you send the revised link, make sure that these statements are true:

- The original URL opens.
- The visible change appears.
- Images and fonts load.
- The deployment has no secret, token or local-only file.
- If the site is private, the expected access screen appears.
- The result is static and does not depend on a development server.
- OpenClaw reports the same production URL.

When this loop works, each future revision is routine: edit, build, deploy to the existing project and open the same link.

A docs portal with Ask AI
and support tickets

Connect a repository, or describe your product to start. Each docs site has search, Ask AI, an API console, an MCP server and support tickets.

Publishes from GitHub on every push

Works with Mintlify repositories

API console from your OpenAPI file

MCP server and llms.txt for AI agents

Ask AI and support tickets

Analytics for people and AI agents

Start Free →

Questions? Ask AI in our docs
No card required.

---

[View the canonical page](https://revdoku.com/blog/how-to-update-an-openclaw-website-without-changing-its-url/) · [Browse llms.txt](https://revdoku.com/llms.txt)
