> ## Content Index
> Fetch the complete content index at: https://isoziyuan.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 用 Cloudflare Pages 做联盟营销落地页：免费部署、访问分析与跳转统计实战
- URL: https://isoziyuan.com/p/100110/
- Published: 2026-08-29T01:21:31.000Z
- Updated: 2026-08-29T01:21:28.000Z
- Author: Isoziyuan
- Tags: Cloudflare, 联盟营销, 静态网站, 避坑

## 先说结论：它适合什么样的联盟网站

Cloudflare Pages 很适合搭建以下类型的联盟营销页面：

- 软件、主机、课程等产品的评测页；
- 多个联盟产品的对比页；
- 针对广告或社交媒体流量制作的专题落地页；
- 内容较少、更新频率不高的静态赚钱网站；
- 需要全球 CDN、HTTPS 和自定义域名的小型项目。

它的主要优势是静态资源请求不按传统虚拟主机的流量方式收费，免费计划通常足以支撑刚起步的联盟站点。纯 HTML、CSS、JavaScript 页面也不需要维护服务器。

不过，Cloudflare Pages 本身不是完整的联盟营销系统。它可以托管页面、提供基础流量数据，但不会自动统计每个联盟按钮的有效点击，更无法替代联盟平台提供的订单、佣金和转化报表。

更合理的数据链路应该是：

1. Cloudflare Pages 负责展示落地页；
2. Cloudflare Web Analytics 统计页面访问；
3. Pages Functions 或第三方分析工具记录出站点击；
4. 联盟平台后台确认订单和佣金。

这样才能区分“访问量”“点击量”和“实际成交量”。

> 本文所述额度与功能按 2026 年 8 月可查到的 Cloudflare 官方规则整理。Cloudflare 可能调整限制，正式上线前应再次查看 [Pages Limits](https://developers.cloudflare.com/pages/platform/limits/?ref=isoziyuan.com) 和控制台中的当前说明。

## Cloudflare Pages 免费额度够不够用

对于以静态内容为主的联盟落地页，免费计划通常够用。

Cloudflare Pages 免费计划的几个关键限制包括：

| 项目              | 免费计划情况                           |
| --------------- | -------------------------------- |
| 静态资源请求          | 免费，不受普通 Workers 请求额度限制           |
| 静态资源带宽          | Cloudflare Pages 不按传统主机方式单独收取流量费 |
| 每月构建次数          | 500 次                            |
| 单次构建最长时间        | 20 分钟                            |
| 单个文件大小          | 最大 25 MiB                        |
| 单个站点文件数量        | 免费计划最多 20,000 个文件                |
| HTTPS           | 自动提供                             |
| 自定义域名           | 支持                               |
| Pages Functions | 按 Cloudflare Workers 对应计划计算      |

这里最容易被误解的是“免费请求”。

如果访客只是打开 HTML 页面、CSS、图片和 JavaScript 文件，这些属于静态资源请求。使用 Pages Functions 处理跳转、查询数据库或生成动态响应时，则会进入 Workers 的计量体系，不能再简单理解为全部无限。

对普通联盟站来说，真正可能遇到的限制通常不是访问量，而是以下几项：

- 使用自动化程序频繁触发部署，耗尽每月构建次数；
- 上传大量未经压缩的图片，导致页面加载缓慢；
- 把视频安装包等大文件直接放进项目；
- 每次联盟链接点击都调用多个动态服务；
- 遭遇机器人持续请求动态跳转地址。

域名注册费也不包含在 Pages 免费额度内。Pages 可以免费绑定域名，但域名本身仍需向注册商购买或续费。

## 上线前先准备一个真正有内容的页面

联盟落地页不应只是标题、按钮和联盟链接。过于单薄的“跳板页”不仅转化效果差，还可能违反广告平台或联盟项目的规则。

一个可用的页面至少应包含：

- 产品适合哪些用户；
- 主要功能和使用场景；
- 优点与限制；
- 价格信息的核验日期；
- 与同类产品的区别；
- 清晰的联盟关系披露；
- 联系方式、隐私说明和必要的法律页面；
- 不夸大收益的行动按钮。

例如：

```text
public/
├── index.html
├── review.html
├── privacy.html
├── disclosure.html
├── css/
│   └── style.css
├── js/
│   └── main.js
└── images/
    └── product.webp

```

在按钮附近应明确说明链接性质，而不是隐藏在网站底部：

```html
<p class="affiliate-notice">
  说明：本页面包含联盟链接。通过这些链接购买产品时，
  我们可能获得佣金，但不会因此增加你的购买价格。
</p>

<a
  href="https://example.com/your-affiliate-link"
  rel="sponsored nofollow noopener"
  target="_blank"
>
  查看产品详情
</a>

```

其中：

- `sponsored` 表示这是商业或联盟性质的链接；
- `nofollow` 可避免向商业链接传递常规搜索权重；
- `noopener` 用于降低新窗口访问原页面对象的风险。

是否使用 `target="_blank"` 应根据实际体验决定。移动端用户通常更适合直接在当前页面打开，不必为了保留落地页而强制新窗口。

## 部署 Cloudflare Pages 的两种方式

### 方式一：连接 Git 仓库

如果页面会持续修改，推荐使用 GitHub 或 GitLab 仓库。

基本步骤如下：

1. 将静态网站上传到 Git 仓库；
2. 登录 Cloudflare 控制台；  
3.进入 Workers & Pages；
3. 创建 Pages 项目并连接 Git 仓库；
4. 选择对应分支；
5. 设置构建命令和输出目录；
6. 部署项目。

纯静态项目如果不需要构建工具，可以不填写构建命令，输出目录填写实际存放网页的目录，例如 `public`。

如果使用 Astro、Hugo、Vite 等工具，则应根据该工具设置构建命令。例如 Vite 项目常见的输出目录是 `dist`，但不能机械照抄，必须以项目配置为准。

Git 部署的优势是每次提交代码后可以自动构建，也可以通过预览部署检查修改结果。

### 方式二：直接上传或使用 Wrangler

不想使用 Git 时，可以直接上传静态文件，也可以通过 Wrangler 命令行部署：

```bash
npx wrangler pages deploy public

```

首次执行时，命令行会要求登录并选择或创建项目。

直接上传适合一次性页面，但如果后续需要频繁更新、回滚或多人协作，Git 工作流更容易管理。创建项目之前最好确定部署方式，因为不同项目类型之间的迁移并不总是无缝完成。

## 绑定域名时不要绕过 Cloudflare 配置

Cloudflare 会为 Pages 项目生成一个 `pages.dev` 子域名，可以直接访问。但用于联盟营销时，独立域名通常更适合品牌建设，也便于更换托管平台。

在 Pages 项目的自定义域名设置中添加域名后，根据提示完成 DNS 配置即可。不要只在 DNS 页面随意添加一条记录，却不在 Pages 项目中绑定域名，否则可能出现证书、域名验证或路由问题。

建议同时确定主域名版本，例如：

```text
https://example.com

```

然后把其他版本统一重定向到主域名：

```text
https://www.example.com → https://example.com

```

页面中还应设置规范网址：

```html
<link rel="canonical" href="https://example.com/review.html">

```

如果为不同广告渠道复制大量内容几乎相同的页面，应谨慎处理索引和规范网址，避免形成重复内容。

## 如何查看静态落地页访问数据

### 使用 Cloudflare Web Analytics

Cloudflare Web Analytics 适合查看静态落地页的基础访问情况。它与服务器日志不同，主要通过浏览器端脚本收集页面访问和性能数据。

常见指标包括：

- 页面浏览量；
- 访客和访问次数；
- 热门页面；
- 引荐来源；
- 国家或地区；
- 浏览器和设备信息；
- Core Web Vitals 等页面性能指标。

配置时可以在 Cloudflare 控制台进入 Web Analytics，添加站点后复制系统生成的脚本。不要照抄其他网站的令牌，必须使用自己站点对应的代码。

生成的代码通常放在页面 `</body>` 之前：

```html
<!-- 此处粘贴 Cloudflare 控制台为当前站点生成的 Web Analytics 脚本 -->
</body>

```

部分 Pages 项目可以在控制台中直接启用相关集成。由于控制台入口可能调整，应以当前界面为准。

Cloudflare Web Analytics 的特点是偏向轻量、隐私友好的页面分析，但它仍有几个局限：

1. 浏览器拦截脚本时，访问可能不会被记录；
2. 数据不是财务结算依据；
3. 它不能自动判断联盟订单是否成交；
4. 页面访问数据与联盟平台点击数据不会完全一致；
5. 它不等于自定义事件分析平台。

因此，静态落地页访问分析可以用 Cloudflare Web Analytics，但联盟链接跳转统计需要单独设计。

## 三种联盟链接处理方式怎么选

### 方案一：直接使用联盟链接

最简单的方式是让按钮直接指向联盟平台提供的链接：

```html
<a
  href="https://merchant.example/path?affiliate_id=your-id"
  rel="sponsored nofollow"
>
  前往官网
</a>

```

优点：

- 跳转链路最短；
- 不依赖 Functions 或数据库；
- 不会因为自建跳转服务故障而损失点击；
- 更容易符合禁止隐藏链接的联盟项目规则。

缺点：

- 只能依赖联盟后台的点击报表；
- 很难统一管理散落在多个页面中的链接；
- 无法直接按按钮位置、页面版本统计点击。

对刚开始做站的人，直接链接通常是最稳妥的方案。先验证页面是否有流量和转化，再考虑搭建复杂的统计系统。

### 方案二：使用 Pages 静态重定向

可以在项目中添加 `_redirects` 文件：

```text
/go/product-a  https://merchant.example/path?affiliate_id=your-id  302

```

页面按钮改为：

```html
<a href="/go/product-a" rel="sponsored nofollow">
  查看 Product A
</a>

```

这种方式便于集中修改目标地址，也能让页面代码更整洁。

但必须注意：**静态重定向本身不会生成可靠的业务点击计数。** 即使某些请求指标中能看到跳转路径访问，也不应把它直接视为真实用户点击，因为数据可能包含：

- 搜索引擎抓取；
- 社交平台链接预览；
- 安全扫描程序；
- 浏览器预加载；
- 重复点击；
- 自动化机器人。

因此，静态重定向适合链接管理，不适合作为精确的联盟点击统计系统。

### 方案三：Pages Functions 加 D1 记录点击

如果需要按日期和链接标识统计跳转次数，可以用 Pages Functions 接收 `/go/产品标识` 请求，再将汇总数据写入 D1 数据库。

这会引入动态请求和数据库配额，也增加维护成本，适合已经获得稳定流量的网站。

## 用 Pages Functions 实现可控跳转

项目目录可以调整为：

```text
project/
├── public/
│   ├── index.html
│   └── css/
│       └── style.css
└── functions/
    └── go/
        └── [slug].js

```

在 D1 中创建一张按日期汇总的表：

```sql
CREATE TABLE click_daily (
  slug TEXT NOT NULL,
  day TEXT NOT NULL,
  clicks INTEGER NOT NULL DEFAULT 0,
  PRIMARY KEY (slug, day)
);

```

然后在 Pages 项目设置中添加 D1 绑定，变量名设为：

```text
DB

```

`functions/go/[slug].js` 可以写成：

```javascript
const LINKS = {
  "product-a": "https://merchant.example/path?affiliate_id=your-id",
  "product-b": "https://another.example/offer?ref=your-id"
};

export async function onRequest(context) {
  const { request, params, env } = context;

  if (request.method !== "GET" && request.method !== "HEAD") {
    return new Response("Method Not Allowed", {
      status: 405,
      headers: {
        "Allow": "GET, HEAD"
      }
    });
  }

  const slug = String(params.slug || "");
  const target = LINKS[slug];

  if (!target) {
    return new Response("Link not found", {
      status: 404,
      headers: {
        "Content-Type": "text/plain; charset=UTF-8"
      }
    });
  }

  if (request.method === "GET") {
    const day = new Date().toISOString().slice(0, 10);

    const task = env.DB.prepare(`
      INSERT INTO click_daily (slug, day, clicks)
      VALUES (?, ?, 1)
      ON CONFLICT(slug, day)
      DO UPDATE SET clicks = clicks + 1
    `)
      .bind(slug, day)
      .run();

    context.waitUntil(task);
  }

  return new Response(null, {
    status: 302,
    headers: {
      "Location": target,
      "Cache-Control": "no-store"
    }
  });
}

```

页面按钮使用站内路径：

```html
<a href="/go/product-a" rel="sponsored nofollow">
  查看 Product A 优惠信息
</a>

```

查询每日点击量：

```sql
SELECT slug, day, clicks
FROM click_daily
ORDER BY day DESC, slug ASC;

```

查询某个链接的总点击量：

```sql
SELECT slug, SUM(clicks) AS total_clicks
FROM click_daily
GROUP BY slug
ORDER BY total_clicks DESC;

```

这里使用 `context.waitUntil()`，目的是先向访客返回跳转响应，再在允许的执行周期内完成计数，尽量减少跳转等待时间。

但它仍不能保证每次写入都成功。例如数据库暂时不可用、函数达到额度或请求被中断时，点击可能没有记录。因此它适合趋势分析，不适合作为佣金结算依据。

## 为什么不能让用户提交任意跳转网址

不要设计成下面这种开放跳转：

```text
/go?url=https://任意网站.example

```

然后由 Function 直接读取 `url` 参数并重定向。

这种做法会形成开放重定向漏洞，可能被用于：

- 钓鱼邮件；
- 恶意软件下载；
- 冒充你的品牌域名；
- 绕过某些安全检查；
- 制作垃圾外链；
- 损害域名信誉。

正确做法是使用服务器端白名单，将固定的 `slug` 映射到经过审核的联盟链接。即使需要在后台修改链接，也应该验证目标域名，不应接受访客传入的完整网址。

## 点击数据为什么总比联盟后台高

自建跳转统计与联盟平台数据不一致是正常现象，常见原因包括：

### 机器人和预览程序访问

聊天软件、社交平台或安全工具可能提前打开链接，以生成预览或检查风险。你的系统会记录一次请求，但没有真实用户访问商家页面。

### 用户重复点击

同一个用户可能多次点击按钮，而联盟平台可能去重，或者只展示有效点击。

### 广告拦截和隐私工具

页面分析脚本可能被拦截，但站内跳转仍然发生，于是出现“跳转次数高于页面分析点击”的情况。

### 联盟平台过滤无效流量

联盟平台可能排除机器人、自我点击、异常 IP、重复请求或不符合地区要求的流量。

### 归因窗口和订单审核

点击并不等于订单。订单还可能因为退款、取消、跨设备访问或归因给其他渠道而不产生佣金。

所以不应拿自建点击次数乘以佣金比例来计算“已赚收入”。收入只能以联盟平台审核后的订单和佣金报表为准。

## 不要为了统计而破坏联盟归因

联盟链接中经常包含用于归因的查询参数，例如：

```text
?ref=your-id
?aff_id=123
?subid=landing-page-a

```

修改链接时要特别注意：

- 不要删除联盟平台要求的参数；
- 不要自行猜测参数名称；
- 不要把两个 `?` 直接拼在同一个网址中；
- 不要将内部广告参数误当成联盟归因参数；
- 不要把用户隐私信息放进 `subid`；
- 不要在前端公开不应公开的 API 密钥。

如果联盟平台支持子标识，可以为不同页面设置不含个人信息的标记，例如：

```text
review_page
comparison_top
comparison_bottom
email_august

```

这样可以直接在联盟后台分析渠道，通常比自己搭建数据库更可靠。但必须使用该平台文档明确支持的字段，不能自行添加参数并假设平台会识别。

## 联盟跳转最容易踩的政策问题

### 联盟项目可能禁止隐藏或缩短链接

部分联盟项目不允许链接伪装、框架嵌套或使用户无法判断目标网站。即使技术上可以通过 `/go/product-a` 跳转，也不代表项目政策允许。

上线前应检查：

- 是否允许短链接；
- 是否允许服务器端重定向；
- 是否必须展示特定声明；
- 是否允许在电子邮件、广告或社交平台投放；
- 是否允许在域名、页面标题中使用商标；
- 是否允许自行展示价格。

如果规则不明确，直接使用联盟平台生成的原始链接更安全。

### 不要使用延迟跳转和强制跳转

不建议使用：

- 页面打开后自动跳往商家；
- JavaScript 倒计时跳转；
- 隐藏 iframe；
- 看似下载按钮、实际跳转到无关商品；
- 多层重定向；
- 无法关闭的弹窗。

这些做法会降低用户信任，也可能被搜索引擎、广告平台和联盟项目认定为误导。

### 价格和优惠必须及时核验

联盟产品价格随时可能变化。除非联盟平台提供允许使用的实时接口，否则不要写“永久最低价”“今天最后一天”等无法证明的内容。

更稳妥的表达是：

```text
价格和套餐可能调整，请以产品官网结算页面显示为准。
页面信息核验日期：2026 年 8 月。

```

也不要编造优惠码、折扣比例或限时活动。

## Pages Functions 的额度要单独核算

一旦使用 Pages Functions，动态请求会按照 Cloudflare Workers 的规则计量；如果再使用 D1，数据库读写也有独立限制。

具体额度应查看：

- [Pages Functions Pricing](https://developers.cloudflare.com/pages/functions/pricing/?ref=isoziyuan.com)
- [Workers Platform Limits](https://developers.cloudflare.com/workers/platform/limits/?ref=isoziyuan.com)
- [D1 Platform Limits](https://developers.cloudflare.com/d1/platform/limits/?ref=isoziyuan.com)

需要重点关注：

- 每日动态请求数；
- 单次请求 CPU 时间；
- D1 每日读取和写入量；
- 数据库存储量；
- 日志保留和可查询范围；
- 超过免费额度后的处理方式。

降低消耗的方法包括：

1. 只对真正需要分析的联盟链接使用 Function；
2. 静态图片、CSS 和页面继续由 Pages 直接提供；
3. 按天、链接汇总计数，不保存每次点击的完整记录；
4. 不记录完整 IP 地址和不必要的用户标识；
5. 对异常高频请求配置速率限制或安全规则；
6. 不在一次跳转中连续调用多个外部接口。

按天汇总还有一个优势：数据库只保存业务所需的计数，不会形成包含大量个人访问轨迹的明细表。

## 如何评估一个落地页能不能赚钱

Cloudflare 搭建赚钱网站只是降低托管成本，并不会自动带来流量或收入。判断页面效果时，至少应观察以下指标：

### 页面到联盟链接的点击率

计算方式：

```text
联盟按钮点击次数 ÷ 有效页面访问次数

```

如果访问很多但点击很少，可能存在以下问题：

- 页面没有清楚解释产品价值；
- 行动按钮位置不合理；
- 内容与搜索意图不一致；
- 页面加载过慢；
- 用户不信任网站；
- 移动端排版有问题。

### 联盟平台转化率

计算方式：

```text
有效订单数 ÷ 联盟平台认可的点击数

```

点击率高但转化率低，可能是产品不匹配、价格缺乏竞争力，或者页面对产品进行了过度承诺。

### 每次访问收益

计算方式：

```text
已审核佣金 ÷ 有效访问次数

```

这个指标能帮助比较不同选题，而不是只追求表面流量。

### 退款和拒付情况

佣金显示为待审核并不等于最终收入。评估项目时应使用已经确认的佣金，并考虑退款周期、最低付款门槛和结算方式。

## 一套适合新站的低成本配置

如果刚开始制作 Cloudflare Pages 联盟落地页，可以按以下顺序实施：

### 第一阶段：先验证内容

- 使用纯静态 Pages；
- 绑定独立域名；
- 启用 Cloudflare Web Analytics；
- 直接使用联盟官方链接；
- 添加清晰的联盟披露；
- 在联盟平台中使用其官方支持的子标识。

此阶段不需要数据库和 Functions。

### 第二阶段：有稳定访问后再统计点击

- 将重要链接改为固定的 `/go/slug`；
- 确认联盟协议允许重定向；
- 使用 Pages Functions 处理跳转；
- 用 D1 按天汇总点击；
- 设置异常流量监控；
- 定期对比自建点击与联盟后台有效点击。

### 第三阶段：根据收益决定是否扩展

只有当页面已经产生收入时，再考虑：

- A/B 测试；
- 多语言页面；
- 邮件订阅；
- 更细的渠道参数；
- 付费分析工具；
- 自动生成报表；
- 付费 Workers 计划。

不要在没有流量时投入大量时间开发复杂统计面板。对多数新站而言，内容可信度、流量来源和产品匹配度，比统计系统精细程度更影响收入。

## 发布前检查清单

正式上线前，可以逐项核对：

- \[ \] 所有联盟链接都能正常打开；
- \[ \] 联盟标识和必要参数没有丢失；
- \[ \] 联盟项目允许当前推广渠道；
- \[ \] 如使用站内跳转，项目规则允许重定向；
- \[ \] 页面明确披露联盟关系；
- \[ \] 商标、截图和产品素材具有使用权限；
- \[ \] 没有编造价格、优惠或收益承诺；
- \[ \] 页面在手机端正常显示；
- \[ \] 图片已经压缩并设置尺寸；
- \[ \] Web Analytics 使用本站生成的脚本；
- \[ \] 自建点击统计不被当作订单数据；
- \[ \] Function 不接受任意外部网址；
- \[ \] D1 绑定在生产环境中已经配置；
- \[ \] 跳转接口返回 302，而不是缓存时间很长的永久重定向；
- \[ \] 隐私说明解释了实际使用的分析和统计方式；
- \[ \] 定期检查 Cloudflare 与联盟平台政策变化。

## 最后的建议

Cloudflare Pages 的价值在于用较低成本提供速度快、维护简单的静态落地页，而不是提供一套开箱即用的联盟追踪系统。

最稳妥的实施原则是：

- 页面访问用 Cloudflare Web Analytics；
- 联盟成交以联盟平台后台为准；
- 点击趋势可以用 Pages Functions 和 D1 辅助分析；
- 不需要点击统计时，优先使用直接链接或静态重定向；
- 任何跳转方式都必须先符合联盟项目政策；
- 不保存与业务无关的个人数据；
- 先验证内容和转化，再增加技术复杂度。

免费托管可以减少建站成本，但联盟网站最终能否赚钱，仍取决于内容是否解决真实问题、流量是否精准，以及推荐是否值得用户信任。