Cloudflare Worker
Cloudflare Worker запускає скрипт для кожного запиту, який надсилає дані до Ahrefs. Цей метод працює з будь-яким планом Cloudflare, зокрема Free. Запити від браузерів також надсилаються; Ahrefs відкидає все, що не є ботом.
Для кожного запиту воркер надсилає URL, код стану, тип вмісту та, у разі редиректів, заголовок відповіді Location, щоб Bot Analytics могла показати, куди редирект відправив бота. Воркер, розгорнутий до того, як було додано Location, продовжує надсилати старі дані, доки ви не під’єднаєтеся знову або не розгорнете його повторно.
Передумови
- Обліковий запис Cloudflare, у якому домен вашого сайту додано як зону.
- Токен Cloudflare API з такими дозволами:
- Обліковий запис → Workers Scripts → Edit
- Зона → Workers Routes → Edit
- Зона → Zone → Read
- Зона → DNS → Читання (необов’язково; дає змогу Ahrefs перевірити, що ваші DNS-записи проксійовані)
info
Воркер запускається лише для запитів, що проходять через Cloudflare. DNS-записи, для яких установлено лише DNS (сіра хмара), спрямовують відвідувачів безпосередньо на ваш вихідний сервер, тож Bot Analytics не отримує для них даних. Переконайтеся, що записи для вашого домену мають статус Проксійовано (помаранчева хмара). Див. статус проксі.
Квота запитів Workers
warning
Воркер виконується на кожен запит до вашого сайту, тож кожен запит зараховується до вашої квоти запитів Cloudflare Workers. План Free дозволяє 100 000 запитів на день, спільних для всіх воркерів в акаунті. Сайт із великим трафіком може швидко вичерпати її.
Ahrefs створює маршрут із параметром request_limit_fail_open, установленим у true. Коли квота вичерпується, Cloudflare пропускає воркер і обслуговує ваш сайт як зазвичай. Bot Analytics не отримує даних, доки квоту не буде скинуто. Квоту для кожного плану див. у розділі Ліміти Workers.
Якщо ваш сайт отримує більше трафіку, ніж дозволяє квота, оновіть тариф до Workers Paid або скористайтеся Cloudflare Logpush на плані Enterprise.
Отримання API-токена Cloudflare
Переконайтеся, що ви ввійшли до Cloudflare Dashboard з правильним обліковим записом. Потім перейдіть на сторінку https://dash.cloudflare.com/profile/api-tokens, знайдіть і натисніть кнопку Create Token у верхньому правому куті:
Тепер перейдіть до процесу Створення власного токена:
Заповніть таку інформацію:
- Назва API-токена: ahrefs-bot-analytics
- Надайте такі дозволи:
- Account / Workers Script / Edit — щоб ми могли завантажити скрипт worker для відстеження відвідувань ботів
- Zone / Workers Routes / Edit — щоб ми могли призначити скрипт worker для виконання запитів
- Zone / Zone / Read — щоб ми могли знайти зону для налаштування
- Зона / DNS / Читання (необов’язково), щоб ми могли перевірити, чи ваші записи DNS проксійовані через Cloudflare
- Account Resources можна встановити як Include / All Accounts або обмежити до облікового запису, на якому розміщено сайт.
- Zone Resources можна встановити як Include / All Zones або вибрати Zone, що відповідає домену вашого сайту.
Заповнена форма має виглядати так:
Тепер натисніть кнопку Continue to summary, підсумок має виглядати так:
Тепер натисніть кнопку Create Token і скопіюйте згенерований токен у буфер обміну, щоб використати його на наступних кроках.
Додаткову інформацію дивіться в документації Cloudflare: як створити API-токен.
Автоматичне налаштування
- В Ahrefs перейдіть до Налаштування проєкту → Bot Analytics.
- Виберіть Cloudflare Worker як метод.
- Вставте свій токен Cloudflare API і натисніть Підключити.
Ahrefs використає ваш токен, щоб:
- Знайти зону, що відповідає домену вашого проєкту.
- Перевіряти, чи ваші записи DNS проксійовані через Cloudflare, і попереджати вас, якщо це не так (потрібен необов’язковий дозвіл Зона → DNS → Читання).
- Розгорнути Worker для аналітики Ahrefs.
- Налаштуйте маршрут для виконання для всіх запитів.
info
Токен використовується один раз і не зберігається.
Ручне налаштування
Якщо ви не хочете надавати API-токен, можете розгорнути воркер вручну через Cloudflare API.
Крок 1 — Отримайте свій Account ID, Zone ID та API-токен
-
Перейдіть до Cloudflare Dashboard і виберіть домен вашого вебсайту.
-
Знайдіть
$ACCOUNT_IDі$ZONE_IDу Dashboard. -
Клацніть на «Отримати API-токен» і створіть токен із такими дозволами:
- Обліковий запис → Workers Scripts → Edit
- Зона → Workers Routes → Edit
- Зона → Zone → Read
Детальні інструкції див. у розділі Отримання API-токена.
Крок 2 — Розгорніть воркер
Точні команди, уже заповнені даними вашого проєкту, можна знайти в розділі Налаштування проєкту → Bot Analytics → Налаштувати вручну.
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 і шаблон маршруту унікальні для вашого проєкту. Скопіюйте точні команди зі сторінки Налаштування проєкту → Bot Analytics, щоб використати правильні значення.
Крок 3 — Перевірте підключення
Після розгортання воркера та створення маршруту поверніться до Налаштування проєкту → Bot Analytics в Ahrefs і натисніть Перевірити статус, щоб підтвердити, що дані надходять. Якщо дані не надходять, перевірте, чи ваші записи DNS проксійовані.