Cloudflare Workers
Un Cloudflare Worker exécute un script à chaque requête qui envoie des données à Ahrefs. Cette méthode fonctionne avec tout forfait Cloudflare, y compris Free. Les requêtes provenant des navigateurs sont également envoyées ; Ahrefs écarte tout ce qui n’est pas un bot.
Pour chaque requête, le worker envoie l’URL, le code d’état, le type de contenu et, pour les redirections, l’en-tête de réponse Location, afin que Bot Analytics puisse afficher vers où une redirection a envoyé le bot. Un worker déployé avant l’ajout de Location continue d’envoyer les anciennes données jusqu’à ce que vous vous reconnectiez ou que vous le redéployiez.
Prérequis
- Un compte Cloudflare avec le domaine de votre site web ajouté en tant que zone.
- Un jeton d'API Cloudflare avec les autorisations suivantes :
- Compte → Scripts des Workers → Modifier
- Zone → Routes des Workers → Modifier
- Zone → Zone → Lire
- Zone → DNS → Lecture (facultatif, permet à Ahrefs de vérifier que vos enregistrements DNS sont proxifiés)
info
Le worker s’exécute uniquement pour les requêtes qui passent par Cloudflare. Les enregistrements DNS configurés sur DNS uniquement (nuage gris) envoient les visiteurs directement vers votre serveur d’origine ; Bot Analytics ne reçoit donc aucune donnée les concernant. Assurez-vous que les enregistrements de votre domaine sont définis sur Proxifié (nuage orange) ; consultez l’état du proxy.
Quota de requêtes Workers
warning
Le worker s’exécute à chaque requête vers votre site ; chaque requête est donc comptabilisée dans votre quota de requêtes Cloudflare Workers. Le forfait gratuit autorise 100 000 requêtes par jour, partagées entre tous les workers du compte. Un site à fort trafic peut rapidement épuiser ce quota.
Ahrefs crée la route avec request_limit_fail_open défini sur true. Lorsque le quota est épuisé, Cloudflare ignore le worker et sert votre site normalement. Bot Analytics ne reçoit aucune donnée tant que le quota n’est pas réinitialisé. Consultez la page Limites des Workers pour connaître le quota de chaque offre.
Si votre site reçoit plus de trafic que ne l’autorise le quota, mettez à niveau vers Workers Paid ou utilisez Cloudflare Logpush avec une offre Entreprise.
Obtention du jeton d’API Cloudflare
Assurez-vous d’être connecté au Dashboard Cloudflare avec le bon compte. Accédez ensuite à la page https://dash.cloudflare.com/profile/api-tokens, repérez et cliquez sur le bouton Create Token en haut à droite :
Passez maintenant au flux Créer un jeton personnalisé :
Renseignez les informations suivantes :
- Nom du jeton API : ahrefs-bot-analytics
- Accordez les autorisations suivantes :
- Compte / Script Workers / Modifier afin que nous puissions importer le script Worker pour le suivi des visites de bots
- Zone / Routes Workers / Modifier afin que nous puissions attribuer le script Worker pour qu’il s’exécute sur les requêtes
- Zone / Zone / Lire afin que nous puissions localiser la zone à configurer
- Zone / DNS / Lecture (facultatif) afin que nous puissions vérifier que vos enregistrements DNS transitent par le proxy de Cloudflare
- Les ressources de compte peuvent être définies sur Inclure / Tous les comptes ; sinon, limitez la portée à celui qui héberge le site web.
- Les ressources de zone peuvent être définies sur Inclure / Toutes les zones ; sinon, sélectionnez la zone qui correspond au domaine de votre site web.
Le formulaire renseigné devrait ressembler à ceci :
Cliquez maintenant sur le bouton Continuer vers le récapitulatif ; le récapitulatif devrait ressembler à ceci :
Cliquez maintenant sur le bouton Créer un jeton et copiez le jeton généré dans le presse-papiers pour l’utiliser lors des étapes suivantes.
Consultez la documentation Cloudflare sur la création d’un jeton API pour plus d’informations.
Configuration automatique
- Dans Ahrefs, allez dans Paramètres du projet → Bot Analytics.
- Sélectionnez Cloudflare Worker comme méthode.
- Collez votre jeton d'API Cloudflare et cliquez sur Connecter.
Ahrefs utilisera votre jeton pour :
- Trouver la zone correspondant au domaine de votre projet.
- Vérifier que vos enregistrements DNS transitent par le proxy de Cloudflare et vous avertir si ce n’est pas le cas (nécessite l’autorisation facultative Zone → DNS → Lecture).
- Déployer le worker d’analyse Ahrefs.
- Configurer un chemin qui s’exécute pour toutes les requêtes.
info
Votre jeton est utilisé une seule fois et n’est pas stocké.
Configuration manuelle
Si vous préférez ne pas fournir de jeton d'API, vous pouvez déployer le worker manuellement à l'aide de l'API Cloudflare.
Étape 1 — Obtenir votre ID de compte, ID de zone et jeton d'API
-
Accédez à votre Dashboard Cloudflare et sélectionnez le domaine de votre site web.
-
Trouvez vos identifiants
$ACCOUNT_IDet$ZONE_IDdans le Dashboard. -
Cliquez sur « Obtenir votre jeton API » et créez un jeton avec les autorisations suivantes :
- Compte → Scripts des Workers → Modifier
- Zone → Routes des Workers → Modifier
- Zone → Zone → Lire
Voir Obtention d'un jeton API pour obtenir des instructions détaillées.
Étape 2 — Déployer le worker
Vous pouvez trouver les commandes exactes, préremplies avec les détails de votre projet, dans Paramètres du projet → Bot Analytics → Configurer manuellement.
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}'
Remplacez yourwebsite.com par votre domaine.
warning
La clé WA_CF_DATA_KEY et le modèle de route sont propres à votre projet. Copiez les commandes exactes depuis votre page Paramètres du projet → Bot Analytics pour vous assurer d'utiliser les bonnes valeurs.
Étape 3 — Vérifier la connexion
Après avoir déployé le worker et créé la route, retournez dans Paramètres du projet → Bot Analytics dans Ahrefs et cliquez sur Vérifier l'état pour vérifier que les données sont bien reçues. Si aucune donnée n’arrive, vérifiez que vos enregistrements DNS sont proxifiés.