Docs
搜索文档...⌘K

Cloudflare worker

Cloudflare Worker 会在每次请求时运行脚本,并将数据发送到 Ahrefs。 此方法适用于任何 Cloudflare 套餐,包括免费版。

前提条件

  • 一个 Cloudflare 账户,并已将您网站的域名添加为一个区域。
  • 一个具有以下权限的 Cloudflare API 令牌:
    • 账户 → Worker 脚本 → 编辑
    • 区域 → Worker 路由 → 编辑
    • 区域 → 区域 → 读取

获取 Cloudflare API 令牌

请确保您已使用正确的账户登录 Cloudflare Dashboard。 然后前往 https://dash.cloudflare.com/profile/api-tokens 页面,找到并点击右上角的 Create Token 按钮:

创建令牌

现在继续进行 创建自定义令牌 流程:

创建自定义令牌

填写以下信息:

  • API 令牌名称:ahrefs-bot-analytics
  • 授予以下权限:
    • 账户 / Workers 脚本 / 编辑,以便我们上传用于跟踪机器人访问的 Worker 脚本
    • 区域 / Workers 路由 / 编辑,以便我们将 Worker 脚本分配到请求上运行
    • 区域 / 区域 / 读取,以便我们找到要配置的区域
  • 账户资源可以设置为 包含 / 所有账户;或者将范围限定为托管该网站的那个账户。
  • 区域资源可以设置为 包含 / 所有区域;或者选择与你的网站域名对应的区域。

填写完成的表单应如下所示:

令牌配置

现在点击 继续到摘要 按钮,摘要应如下所示:

令牌摘要

现在点击 创建令牌 按钮,并将生成的令牌复制到剪贴板,以便在接下来的步骤中使用。

更多信息请参阅 Cloudflare 文档:如何创建 API 令牌

自动设置

  1. 在 Ahrefs 中,前往项目设置 → Bot Analytics
  2. 选择 Cloudflare Worker 作为方法。
  3. 粘贴您的 Cloudflare API 令牌,然后点击 连接

Ahrefs 将使用您的令牌来:

  1. 查找与您项目域名匹配的 zone。
  2. 部署 Ahrefs analytics worker.
  3. 设置一个路由,使其在所有请求上运行.

info

您的令牌仅使用一次,不会被存储。

手动设置

如果您不想提供 API 令牌,可以使用 Cloudflare API 手动部署该 Worker。

步骤 1 — 获取您的账户 ID、区域 ID 和 API 令牌

  1. 前往您的 Cloudflare Dashboard,并选择您网站的域名。

  2. 在 Dashboard 中找到您的 $ACCOUNT_ID$ZONE_ID

  3. 点击“获取您的 API 令牌”,并使用以下权限创建一个新令牌:

    • 账户 → Worker 脚本 → 编辑
    • 区域 → Worker 路由 → 编辑
    • 区域 → 区域 → 读取

    详细说明请参阅获取 API 令牌

步骤 2 — 部署 Worker

您可以在 项目设置 → Bot Analytics → 手动设置 中找到已按您项目详情预填的准确命令。

Step 1: Upload the worker script

curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/workers/scripts/ahrefs--bot-analytics" \
  -X PUT \
  -H "Authorization: Bearer $CF_TOKEN" \
  -H "Content-Type: application/javascript" \
  --data-binary '
const WA_ENDPOINT = "https://analytics.ahrefs.com/api/cf_worker";
const WA_SCRIPT = "https://analytics.ahrefs.com/analytics.js";
const WA_CF_DATA_KEY = "YOUR_DATA_KEY";
const WA_DATA_KEY = "";
async function handleBotAnalytics(event, response) {
  let request = event.request;
  event.waitUntil(sendAnalytics(request, response));
  return response;
}

async function sendAnalytics(request, response) {
  try {
    let referer = request.headers.get("referer") || "";
    let userAgent = request.headers.get("user-agent") || "";
    let ip = request.headers.get("cf-connecting-ip") || "";
    let contentType = response.headers.get("content-type") || "";
    let payload = {
      n: "serverpageview",
      u: request.url,
      ip: ip,
      ua: userAgent,
      ct: contentType,
      m: request.method,
      s: response.status,
      k: WA_CF_DATA_KEY,
      r: referer,
    }
    let analyticsResponse = await fetch(WA_ENDPOINT, {
      method: "POST",
      body: JSON.stringify(payload)
    })
    if (!analyticsResponse.ok) {
      console.error("ahrefs bot analytics error:", analyticsResponse.status, analyticsResponse.statusText)
    }
  } catch (error) {
    console.error("ahrefs bot analytics error:", error.message)
  }
}
addEventListener("fetch", event => {
  event.respondWith((async () => {
    let response = await fetch(event.request);
    response = await handleBotAnalytics(event, response);
    return response;
  })());
});
'

Step 2: Create the route

curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes" \
  -X POST \
  -H "Authorization: Bearer $CF_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary '{"pattern":"*youwebsite.com/*","script":"ahrefs--bot-analytics"}'

yourwebsite.com 替换为您的域名。

warning

WA_CF_DATA_KEY 和路由模式对您的项目而言是唯一的。 请从您的 项目设置 → Bot Analytics 页面复制准确的命令,以确保值正确。

第 3 步 — 验证连接

部署 Worker 并创建路由后,返回 Ahrefs 的 项目设置 → Bot Analytics,然后点击 检查状态,以验证是否正在接收数据。