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

# Host your landing pages

> Upload and publish static landing pages in your own Cloudflare account.

Choose **Hosted** when creating a landing to upload a static page you built yourself, exported from a builder or generated with an AI tool. Metricanic publishes it in your Cloudflare account. The landing type cannot be changed after saving.

## Connect Cloudflare and create a webspace

1. Open **Landings → Create**, choose **Hosted**, then click **Connect Cloudflare**.
2. Authorize access in the Cloudflare window, return to the landing editor and choose **Cloudflare account**.
3. Select a **Webspace**, or enter **Webspace name** and click **Create webspace**. If you already have webspaces, choose **+ Create webspace** first.
4. Wait for setup to finish. If Cloudflare asks you to activate R2 storage, enable it in that account and click **Retry setup**.

Use a Cloudflare account where you can manage Workers, R2 and the domains you want to connect. To add another account, use **Connect another account** in the account selector.

A webspace is a group of landings that share the same domains. Create another webspace when you need a different set of domains or a second page at `/`. A custom domain can belong to only one webspace.

If Metricanic loses access to Cloudflare, click **Reconnect** and authorize the same accounts again, including every account that has webspaces. Your webspaces, domains and landings are kept.

Cloudflare bills hosting usage to your account, and protected pages count toward your Workers usage. Check [Cloudflare's billing and limitations](https://developers.cloudflare.com/workers/static-assets/billing-and-limitations/) before sending campaign traffic.

## Prepare and upload a page

Upload one `.html` or `.htm` file, or a ZIP with `index.html` at its root. Include the page's local styles, scripts, images and fonts. Text files must use UTF-8.

```text theme={null}
index.html
styles.css
images/product.webp
```

Only finished static files are supported. Server code, build projects, dependency folders, `_worker.js`, `_redirects` and `_headers` are not. ZIP files must be unencrypted. File paths can use Latin letters, numbers, spaces, underscores, hyphens and periods. Hidden files and paths that differ only by case are rejected.

Before uploading:

* Use relative links for local files, such as `images/product.webp`. URLs built in JavaScript are not adjusted to the landing's path.
* Remove `<base href>` and Content Security Policy meta tags.
* Remove `integrity` from local stylesheets, including style preloads, or they will not load. Keep it for CDN files.

Enter **Name**, choose **Country**, click **Choose HTML or ZIP**, then set the address as described below. Files and settings are saved only when you click **Publish & Save**. Closing the editor discards them.

## Connect offer buttons

Use `/click` for an offer button:

```html theme={null}
<a href="/click">Continue to the offer</a>
```

Turn on **Add Direct Tracking** and select a **Tracking domain** before publishing. Metricanic then adds the tracking script and connects `/click` links to your offers. Without it, the page is published without tracking and `/click` does not work. Do not add another Metricanic script to the uploaded files.

For buttons created by JavaScript, events sent from the page and other custom code, see [Tracking script functions](/tracking/script-functions).

Send traffic through the campaign's **Tracking link**, or its **Traffic URL** for **Direct Script Mode**. The page address alone does not identify a campaign.

## Choose an address and publish

1. Choose **Landing domain** and enter a **Path**, such as `/summer/`.
2. To use your own hostname, click **Connect domain**, enter an unused **Subdomain**, choose its **Zone**, then click **Connect domain**. Wait for it to appear in **Landing domain**.
3. Set up [Landing protection](#landing-protection) and [Block known bots](#block-known-bots) if needed, then click **Publish & Save**.
4. After publication completes, select the landing in a campaign's **Landers & Offers** path and add an offer.
5. Open the campaign's **Tracking link** and check the visit and offer click in your reports.

Cloudflare may need time to activate DNS and HTTPS for a new domain. Open the published page and check its images, styles and buttons before sending campaign traffic.

Publishing continues if you close the editor. Reopen the landing to check its status, or click **View error** if it fails.

All domains in a webspace serve the same landings, so `/summer/` opens the same page on each of them. Paths in one webspace cannot overlap. A landing at `/` takes the whole webspace, and `/summer/details/` is unavailable while `/summer/` is used. Your hosting hostname must differ from your tracking hostname.

The **Path** cannot be changed after the first publication. To use another path, select the landing in **Landings**, click **Duplicate**, set the new path and click **Publish & Save**.

### Change or disconnect a domain

To move campaign traffic to another domain, select a connected **Landing domain** and click **Save**. Campaigns using the landing switch to the new address without republishing, and the landing keeps its statistics.

The old domain keeps serving the page until you disconnect it with the trash icon in **Landing domain**. A domain cannot be disconnected while saved landings use it, including unpublished ones. The error lists those landings. Restore archived landings before changing their domain. The `workers.dev` address cannot be removed.

### Deployment conflicts

Manage hosted landings only in Metricanic. Changes made to the hosting Worker in Cloudflare cause a deployment conflict. If an error reports one, expand **Resolve deployment conflict** and follow its steps.

### Landing protection

Turn on **Landing protection** for a landing reached through **302 Redirect Mode**. The page then opens only through your campaign's tracking link. No PHP file is needed.

Without a valid key the page returns `404`. A landing address copied from the browser also returns `404` after 10 minutes or in another browser. Every HTML page needs the key in its URL, so plain links between HTML pages of a protected landing return `404`. Images, scripts and styles stay accessible.

Leave it off for the first page of **Direct Script Mode**. See [Landing protection](/tracking/landing-protection) for what this check covers.

Changing **Profile → Security → LP protection key** also updates your webspaces. While the editor shows **Landing protection key update pending**, protected pages may reject new tracking links. Fix the reported problem, then click **Retry protection update**. If the error asks you to republish, click **Publish & Save** for a landing in that webspace.

### Block known bots

**Block known bots** blocks bots verified by Cloudflare, such as search engines, link previews and ad platform crawlers. Other automated traffic is not blocked. Ad platforms that cannot check the landing may reject its ads.

Turn it on and click **Save**. No republishing is needed. The block covers the landing on all custom domains of its webspace. It is unavailable when **Landing domain** is the `workers.dev` address.

If **Save** asks you to reconnect, click **Reconnect**, allow access to security rules, then click **Save** again.

Metricanic adds custom rules named `Metricanic: Block known bots` to the Cloudflare zone of each custom domain. They count toward the zone's [custom rule limit](https://developers.cloudflare.com/waf/custom-rules/) together with your own rules, and the Free plan allows 5. If no rule is available, the change is rejected. Delete an unused rule in Cloudflare or turn the setting off for some landings.

Disconnecting Cloudflare does not remove these rules. Turn off **Block known bots** first, or delete the rules in Cloudflare afterwards.

## Edit and restore

Use the arrow beside the main button to switch between **Save** and **Publish & Save**.

* **Save** applies changes to **Name**, **Country**, **Landing domain** and **Block known bots** without republishing. An unpublished landing stays unpublished.
* **Publish & Save** publishes changes to files, **Add Direct Tracking**, **Tracking domain** and **Landing protection**.

Country must stay compatible with the rotators that use the landing.

Click **Edit files** to change a text file or replace an asset, or **Replace** to upload another HTML file or ZIP. If publishing fails, the current page stays live. The editor shows your uploaded files without the tracking script added during publishing.

**Preview** in the list's context menu opens the published page, including protected pages. Use a campaign's **Tracking link** to test visits and offer clicks.

To roll back, open **Publication history**, click **Restore** beside a completed publication and confirm **Restore & publish**. Its files are published with the current address, tracking domain and protection settings.

Publication history is kept in your Cloudflare R2 storage and counts toward its usage. Deleting these files in Cloudflare can make editing and restoring unavailable.

## Unpublish or archive

Click **Unpublish** at the bottom of the landing editor and confirm. The page goes offline, its files and history are kept, and another landing can use its path. Click **Publish & Save** to publish it again.

A landing cannot be unpublished while a campaign or rotator uses it, including disabled paths and archived rotators. Remove it from them first.

To archive a hosted landing, unpublish it first, then choose **Archive** in **Landings**. Restoring an archived landing does not publish it.

## Limits

| Item                            | Limit                   |
| ------------------------------- | ----------------------- |
| Uploaded files per publication  | 16 MiB                  |
| Unpacked landing files          | 16 MiB                  |
| Files per landing               | 256                     |
| One file                        | 5 MiB                   |
| One text file                   | 1 MiB                   |
| File path                       | 240 bytes               |
| Published files per webspace    | 512 MiB and 5,000 files |
| Published landings per webspace | 100                     |

File sizes include the tracking script and link changes added during publishing. Unpublished and archived landings do not count toward the webspace limits. When a webspace is full, create another **Webspace** for new landings.
