Docs
ドキュメントを検索...⌘K

Cloudflare Logpush

Cloudflare Logpush は HTTP リクエストログを Ahrefs に自動送信します。高トラフィックのサイトには推奨されますが、Cloudflare エンタープライズ プランが必要です。

前提条件

  • 監視したいゾーンに Cloudflare エンタープライズ プランが適用されていること。
  • 次の権限を持つ Cloudflare API トークン:
    • ゾーン → ゾーン → 読み取り
    • Zone → Logs → Edit
    • ゾーン → DNS → 読み取り(任意。Ahrefs が DNS レコードがプロキシ経由かどうかを検証できるようになります)
  • 手動セットアップの場合のみ:セットアップコマンドがCloudflareの設定を読み取り・更新するために使用する、ローカルにインストールされたjq。

info

Logpush は、Cloudflare を経由したリクエストのみを記録します。 DNS のみ(グレーのクラウド)に設定された DNS レコードは、訪問者を直接オリジンに誘導するため、ボット解析はそれらのデータを受信しません。ドメインの DNS レコードが プロキシ済み(オレンジ色のクラウド)になっていることを確認してください。詳しくは プロキシステータス をご覧ください。

制限と費用

Logpush ジョブは、ドメインおよびそのサブドメインへのすべてのリクエストについて、リクエストごとにログ行を送信します。ブラウザからのリクエストも送信されますが、Ahrefsはボット以外のものはすべて破棄します。

warning

Cloudflare では、1 つのゾーンにつき Logpush ジョブを最大 4 つまでしか設定できません。ゾーンにすでに 4 つ設定されている場合、1 つ削除するまでセットアップに失敗します。

Cloudflare は、配信された非圧縮バイト数で Logpush の利用量を測定します。課金方法についてはエンタープライズ契約をご確認のうえ、詳細は Logpush を参照してください。

Cloudflare APIトークンの取得

正しいアカウントでCloudflareダッシュボードにログインしていることを確認してください。次に https://dash.cloudflare.com/profile/api-tokens ページに移動し、右上にある Create Token ボタンを見つけてクリックしてください:

トークンを作成

続いて、カスタムトークンの作成フローに進みます:

カスタムトークンを作成

以下の情報を入力してください:

  • APIトークン名:ahrefs-bot-analytics
  • 以下の権限を付与してください:
    • Ahrefs ボット解析 にログをプッシュする Logpush ジョブを設定できるように、Zone / Logs / Edit を有効にします
    • 設定対象のゾーンを特定できるように、Zone / Zone / Read を付与します
    • DNSレコードがCloudflare経由でプロキシされていることを確認するために、Zone / DNS / Read(任意)
  • Zone Resources は Include / All Zones に設定できます。もしくは、ウェブサイトのドメインに対応するゾーンを選択してください。
トークンの設定

次に Continue to summary ボタンをクリックします。サマリーは次のようになります:

トークンのサマリー

Create Token ボタンをクリックし、生成されたトークンをクリップボードにコピーして、次の手順で使用してください。

詳しくは、Cloudflare のドキュメント「API トークンの作成方法」をご覧ください。

自動セットアップ

  1. Ahrefs で プロジェクト設定 → ボット解析 に移動します。
  2. 方法として Cloudflare Logpush を選択します。
  3. Cloudflare API トークンを貼り付け、接続 をクリックします。

Ahrefs はトークンを使用して次を行います:

  1. プロジェクトのドメインに一致するゾーンを特定します。
  2. DNSレコードがCloudflare経由でプロキシされていることを確認し、プロキシされていない場合は警告します(任意の Zone → DNS → Read 権限が必要です)。
  3. 既存の Logpush ジョブをチェック.
  4. Ahrefs にログを送信する新しいジョブを作成します。
  5. ゾーンにカスタムログフィールドルールを追加し、ログにボット検証リクエストヘッダー(signature、signature-input、signature-agent)と、リダイレクトでボットが送られた先を示すLocationレスポンスヘッダーが含まれるようにします。ジョブがそれらを受け取れるように、RequestHeadersフィールドとResponseHeadersフィールドをリクエストします。ゾーン上の既存ルールは保持されます。

info

Locationヘッダーが追加される前に作成されたジョブでは、これが送信されません。再度接続するか、手動セットアップをもう一度実行して、ジョブとルールを置き換えてください。

info

お客様のトークンは一度使用され、保存されません。

手動セットアップ

API トークンを提供したくない場合は、Cloudflare API を使って Logpush ジョブを手動で設定できます。

ステップ 1 — APIトークンを取得する

  1. Cloudflare ダッシュボード に移動し、ウェブサイトのドメインを選択してください。

  2. 「API トークンを取得」をクリックし、以下の権限で新しいトークンを作成してください。

    • ゾーン → ゾーン → 読み取り
    • Zone → Logs → Edit

    詳しい手順は、API トークンの取得 を参照してください。

info

Zone ID を調べる必要はありません。これらのコマンドは、ゾーン → ゾーン → 読み取り 権限を使って、ドメインからゾーンを特定します。

ステップ 2 — Logpush ジョブを作成

API トークンを最初のブロックに入力し、その後、以下の各ブロックをターミナルで1つずつ実行して、いずれもエラーなく完了することを確認してください。これらを組み合わせると、ゾーンを特定し、Logpush ジョブを作成し、自動設定で説明されているカスタムログフィールドルールを追加できます。プロジェクトの詳細が事前入力された正確なコマンドは、プロジェクト設定 → ボット分析 → 手動で設定で確認できます。

export CF_TOKEN="<your Cloudflare API token>"
BASE="https://api.cloudflare.com/client/v4"

Find the Cloudflare zone for yourwebsite.com

ZONE_ID=$(curl -s --fail-with-body "$BASE/zones?name=yourwebsite.com&status=active&match=all" \
  -H "Authorization: Bearer $CF_TOKEN" | jq -r '.result[0].id // error("no active Cloudflare zone found for yourwebsite.com")')

echo "ZONE_ID=$ZONE_ID"

Remove the existing Logpush job if present

OLD_JOB_ID=$(curl -s --fail-with-body "$BASE/zones/$ZONE_ID/logpush/jobs" \
  -H "Authorization: Bearer $CF_TOKEN" | jq -r '([(.result // [])[] | select(.name == "ahrefs-web-analytics-http-requests")])[0].id // ""')

echo "OLD_JOB_ID=$OLD_JOB_ID"
if [ -n "$OLD_JOB_ID" ]; then
  curl -s --fail-with-body "$BASE/zones/$ZONE_ID/logpush/jobs/$OLD_JOB_ID" -X DELETE \
    -H "Authorization: Bearer $CF_TOKEN"
fi

Create the Logpush job

curl -s --fail-with-body "$BASE/zones/$ZONE_ID/logpush/jobs" -X POST \
  -H "Authorization: Bearer $CF_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary '{"name":"ahrefs-web-analytics-http-requests","destination_conf":"https://analytics.ahrefs.com/api/cf_logpush/http_requests?header_x-ahrefs-web-analytics-property=YOUR_PROPERTY_KEY","dataset":"http_requests","frequency":"high","filter":"{\"where\":{\"or\":[{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"yourwebsite.com\"},{\"key\":\"ClientRequestHost\",\"operator\":\"endsWith\",\"value\":\".yourwebsite.com\"}]}}","output_options":{"field_names":["ClientIP","ClientRequestMethod","ClientRequestHost","ClientRequestProtocol","ClientRequestScheme","ClientRequestURI","ClientRequestPath","ClientRequestUserAgent","ClientRequestReferer","EdgeStartTimestamp","EdgeEndTimestamp","EdgeResponseStatus","EdgeResponseBytes","EdgeResponseContentType","EdgeTimeToFirstByteMs","ClientCountry","ClientCity","ClientASN","ClientDeviceType","ClientRegionCode","BotScore","BotScoreSrc","BotTags","VerifiedBotCategory","RayID","RequestHeaders","ResponseHeaders"],"timestamp_format":"unixnano"},"enabled":true}'

Add the custom log fields rule

RULES=$(curl -s --fail-with-body "$BASE/zones/$ZONE_ID/rulesets/phases/http_log_custom_fields/entrypoint" \
  -H "Authorization: Bearer $CF_TOKEN" | jq -c '.result.rules // []')

echo "RULES=$RULES"
BODY=$(jq -nc --argjson rules "$RULES" \
  '{rules: ([$rules[] | select(.description != "ahrefs-web-analytics-web-bot-auth-signature")] + [{"action":"log_custom_field","expression":"true","description":"ahrefs-web-analytics-web-bot-auth-signature","action_parameters":{"request_fields":[{"name":"signature"},{"name":"signature-input"},{"name":"signature-agent"}],"response_fields":[{"name":"location"}]}}])}')

curl -s --fail-with-body "$BASE/zones/$ZONE_ID/rulesets/phases/http_log_custom_fields/entrypoint" -X PUT \
  -H "Authorization: Bearer $CF_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary "$BODY"

info

BotScore、BotScoreSrc、BotTags フィールドは、Cloudflare Bot Management のサブスクリプションでのみ利用できます。ただし、これらがなくてもボット解析は機能しますが、含めることでボット分類の精度が向上します。お使いのゾーンで Bot Management を利用できない場合は、ジョブを作成する前に field_names からこれら 3 つのフィールドを削除してください。

warning

destination_conf の URL とプロパティキーは、プロジェクトごとに固有です。正しい値を確実に使用するために、プロジェクト設定 → ボット分析ページから正確なコマンドをコピーしてください。

ステップ 3 — 接続を確認

ジョブを作成したら、Ahrefs の プロジェクト設定 → ボット解析 に戻り、ステータスを確認 をクリックして、データが受信されていることを確認します。データが届かない場合は、DNSレコードがプロキシされていることを確認してください。