Cloudflare Worker
Cloudflare Worker は、Ahrefs にデータを送信するスクリプトを各リクエストで実行します。この方法は、Free を含む すべての Cloudflare プランで利用できます。ブラウザからのリクエストも送信されますが、Ahrefsはボット以外のものはすべて破棄します。
各リクエストについて、ワーカーはURL、ステータスコード、コンテンツタイプ、そしてリダイレクトの場合はレスポンスヘッダー Location を送信します。これにより、ボット解析でボットがどこにリダイレクトされたかを表示できます。 Location が追加される前にデプロイされたワーカーは、再接続するか再デプロイするまで、古いデータを送り続けます。
前提条件
- ウェブサイトのドメインがゾーンとして追加されている Cloudflare アカウント。
- 次の権限を持つ Cloudflare API トークン:
- アカウント → ワーカースクリプト → 編集
- ゾーン → ワーカールート → 編集
- ゾーン → ゾーン → 読み取り
- ゾーン → DNS → 読み取り(任意。Ahrefs が DNS レコードがプロキシ経由かどうかを検証できるようになります)
info
ワーカーは、Cloudflare を経由するリクエストでのみ実行されます。 DNS のみ(グレーのクラウド)に設定された DNS レコードは、訪問者を直接オリジンに誘導するため、ボット解析はそれらのデータを受信しません。ドメインの DNS レコードが プロキシ済み(オレンジ色のクラウド)になっていることを確認してください。詳しくは プロキシステータス をご覧ください。
Workers のリクエストクォータ
warning
Worker はサイトへのすべてのリクエストで実行されるため、各リクエストが Cloudflare Workers のリクエストクォータにカウントされます。 Free プランでは、アカウント内のすべての Worker で共有される 1 日あたり 100,000 件のリクエストが利用できます。トラフィックの多いサイトでは、上限に達する可能性があります。
Ahrefs は request_limit_fail_open を true に設定したルートを作成します。クォータを使い切ると、Cloudflare は Worker をスキップし、通常どおりサイトを配信します。クォータがリセットされるまで、ボット解析はデータを受信しません。各プランのクォータについては、Workers の制限 を参照してください。
サイトのトラフィックがクォータの上限を超える場合は、Workers Paid へアップグレードするか、エンタープライズプランで Cloudflare Logpush を使用してください。
Cloudflare APIトークンの取得
正しいアカウントでCloudflareダッシュボードにログインしていることを確認してください。次に https://dash.cloudflare.com/profile/api-tokens ページに移動し、右上にある Create Token ボタンを見つけてクリックしてください:
続いて、カスタムトークンの作成フローに進みます:
以下の情報を入力してください:
- APIトークン名:ahrefs-bot-analytics
- 以下の権限を付与してください:
- ボットのアクセスをトラッキングする worker スクリプトをアップロードできるように、Account / Workers Script / Edit を付与します
- リクエスト時に worker スクリプトを実行するよう割り当てられるように、Zone / Workers Routes / Edit を付与します
- 設定対象のゾーンを特定できるように、Zone / Zone / Read を付与します
- DNSレコードがCloudflare経由でプロキシされていることを確認するために、Zone / DNS / Read(任意)
- Account Resources は Include / All Accounts に設定できます。もしくは、ウェブサイトをホストしているアカウントのみにスコープを絞ってください。
- Zone Resources は Include / All Zones に設定できます。もしくは、ウェブサイトのドメインに対応するゾーンを選択してください。
入力後のフォームは次のようになります:
次に Continue to summary ボタンをクリックします。サマリーは次のようになります:
Create Token ボタンをクリックし、生成されたトークンをクリップボードにコピーして、次の手順で使用してください。
詳しくは、Cloudflare のドキュメント「API トークンの作成方法」をご覧ください。
自動セットアップ
- Ahrefs で プロジェクト設定 → ボット解析 に移動します。
- 方法として Cloudflare Worker を選択してください。
- Cloudflare API トークンを貼り付け、接続 をクリックします。
Ahrefs はトークンを使用して次を行います:
- プロジェクトのドメインに一致するゾーンを特定します。
- DNSレコードがCloudflare経由でプロキシされていることを確認し、プロキシされていない場合は警告します(任意の Zone → DNS → Read 権限が必要です)。
- Ahrefs アナリティクス Worker をデプロイ.
- すべてのリクエストで実行されるルートをセットアップします.
info
お客様のトークンは一度使用され、保存されません。
手動セットアップ
API トークンを提供したくない場合は、Cloudflare API を使用して worker を手動でデプロイできます。
ステップ 1 — アカウント ID、ゾーン ID、API トークンを取得する
-
Cloudflare ダッシュボード に移動し、ウェブサイトのドメインを選択してください。
-
ダッシュボードで
$ACCOUNT_IDと$ZONE_IDを見つけてください。 -
「API トークンを取得」をクリックし、以下の権限で新しいトークンを作成してください。
- アカウント → ワーカースクリプト → 編集
- ゾーン → ワーカールート → 編集
- ゾーン → ゾーン → 読み取り
詳しい手順は、API トークンの取得 を参照してください。
ステップ 2 — worker をデプロイする
プロジェクトの詳細が事前入力された正確なコマンドは、プロジェクト設定 → ボット分析 → 手動で設定で確認できます。
Upload the Worker script
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/workers/scripts/ahrefs--bot-analytics--YOUR_SCRIPT_ID" \
-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 hs = {};
for (let name of ["signature", "signature-input", "signature-agent"]) {
let value = request.headers.get(name);
if (value) hs[name] = value;
}
if (Object.keys(hs).length > 0) payload.hs = hs;
let rhs = {};
for (let name of ["location"]) {
let value = response.headers.get(name);
if (value) rhs[name] = value;
}
if (Object.keys(rhs).length > 0) payload.rhs = rhs;
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;
})());
});
'
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--YOUR_SCRIPT_ID","request_limit_fail_open":true}'
yourwebsite.com を自分のドメインに置き換えてください。
warning
WA_CF_DATA_KEY とルートパターンはプロジェクトごとに固有です。正しい値を確実に使用するために、プロジェクト設定 → ボット分析ページから正確なコマンドをコピーしてください。
ステップ 3 — 接続を確認
worker をデプロイしてルートを作成したら、Ahrefs の プロジェクト設定 → ボット分析 に戻り、ステータスを確認をクリックして、データが受信されていることを確認してください。データが届かない場合は、DNSレコードがプロキシされていることを確認してください。