Trabajador de Cloudflare
Un Cloudflare Worker ejecuta un script en cada solicitud que envía datos a Ahrefs. Este método funciona con cualquier plan de Cloudflare, incluido el gratuito. También se envían solicitudes desde navegadores; Ahrefs descarta todo lo que no sea un bot.
Para cada solicitud, el worker envía la URL, el código de estado, el tipo de contenido y, en el caso de las redirecciones, el encabezado de respuesta Location, para que Bot Analytics pueda mostrar a dónde envió la redirección al bot. Un worker implementado antes de que se añadiera Location sigue enviando los datos antiguos hasta que vuelvas a conectarlo o lo vuelvas a implementar.
Requisitos previos
- Una cuenta de Cloudflare con el dominio de tu sitio web añadido como zona.
- Un Token de API de Cloudflare con los siguientes permisos:
- Cuenta → Workers Scripts → Editar
- Zona → Workers Routes → Editar
- Zona → Zona → Leer
- Zona → DNS → Lectura (opcional, permite que Ahrefs verifique que tus registros DNS tienen el proxy activado)
info
El worker solo se ejecuta para las solicitudes que pasan por Cloudflare. Los registros DNS configurados como solo DNS (nube gris) envían a los visitantes directamente a tu origen, por lo que Bot Analytics no recibe ningún dato de ellos. Asegúrate de que los registros de tu dominio estén con proxy (nube naranja); consulta el estado del proxy.
Cuota de solicitudes de Workers
warning
El worker se ejecuta en cada solicitud a tu sitio, así que cada solicitud cuenta para tu cuota de solicitudes de Cloudflare Workers. El plan gratuito permite 100.000 solicitudes al día, compartidas entre todos los workers de la cuenta. Un sitio con mucho tráfico puede agotarla.
Ahrefs crea la ruta con request_limit_fail_open configurado en true. Cuando se agota la cuota, Cloudflare se salta el worker y sirve tu sitio con normalidad. Bot Analytics no recibe datos hasta que se restablece la cuota. Consulta Límites de Workers para ver la cuota de cada plan.
Si tu sitio recibe más tráfico del que permite la cuota, actualiza a Workers Paid o usa Cloudflare Logpush con un plan Enterprise.
Obtención del token de la API de Cloudflare
Asegúrate de haber iniciado sesión en el Dashboard de Cloudflare con la cuenta correcta. Luego, navega a la página https://dash.cloudflare.com/profile/api-tokens, localiza y haz clic en el botón Crear token en la esquina superior derecha:
Ahora continúa con el flujo de Crear token personalizado:
Rellena la siguiente información:
- Nombre del token de la API: ahrefs-bot-analytics
- Concede los siguientes permisos:
- Cuenta / Script de Workers / Editar para que podamos subir el script del worker para hacer el seguimiento de las visitas de bots
- Zona / Rutas de Workers / Editar para que podamos asignar el script del worker para que se ejecute en las solicitudes
- Zona / Zona / Lectura para que podamos localizar la zona que hay que configurar
- Zona / DNS / Lectura (opcional), para que podamos verificar que tus registros DNS pasan por el proxy de Cloudflare
- Los recursos de la cuenta se pueden configurar como Incluir / Todas las cuentas; como alternativa, limita el alcance a la que aloja el sitio web.
- Los recursos de zona se pueden configurar como Incluir / Todas las zonas; como alternativa, selecciona la zona que corresponde al dominio de tu sitio web.
El formulario rellenado debería verse así:
Ahora haz clic en el botón Continue to summary; el resumen debería verse así:
Ahora haz clic en el botón Crear token y copia el token generado en el portapapeles para usarlo en los siguientes pasos.
Consulta la documentación de Cloudflare sobre cómo crear un token de API para obtener más información.
Configuración automática
- En Ahrefs, ve a Configuración del proyecto → Bot Analytics.
- Selecciona Cloudflare Worker como método.
- Pega tu token de API de Cloudflare y haz clic en Conectar.
Ahrefs usará tu token para:
- Encontrar la zona que coincida con el dominio de tu proyecto.
- Comprueba que tus registros DNS pasan por el proxy de Cloudflare y te avisa si no es así (requiere el permiso opcional Zona → DNS → Lectura).
- Implementa el Worker de análisis de Ahrefs.
- Configura una ruta para que se ejecute en todas las solicitudes.
info
Tu token se usa una vez y no se almacena.
Configuración manual
Si prefieres no proporcionar un Token de API, puedes desplegar el worker manualmente mediante la API de Cloudflare.
Paso 1 — Obtén tu ID de cuenta, ID de zona y Token de API
-
Ve a tu Dashboard de Cloudflare y selecciona el dominio de tu sitio web.
-
Busca tu
$ACCOUNT_IDy$ZONE_IDen el Dashboard. -
Haz clic en "Consigue tu token de API" y crea un nuevo token con los siguientes permisos:
- Cuenta → Workers Scripts → Editar
- Zona → Workers Routes → Editar
- Zona → Zona → Leer
Consulta Obtaining API token para ver instrucciones detalladas.
Paso 2 — Despliega el worker
Puedes encontrar los comandos exactos rellenados previamente con los detalles de tu Proyecto en Configuración del Proyecto → Bot Analytics → Configurar manualmente.
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}'
Sustituye yourwebsite.com por tu dominio.
warning
La WA_CF_DATA_KEY y el patrón de ruta son únicos para tu Proyecto. Copia los comandos exactos de tu página Configuración del Proyecto → Bot Analytics para asegurarte de que los valores sean correctos.
Paso 3 — Verifica la conexión
Después de desplegar el worker y crear la ruta, vuelve a Configuración del Proyecto → Bot Analytics en Ahrefs y haz clic en Comprobar estado para verificar que se están recibiendo datos. Si no llega ningún dato, comprueba que tus registros DNS pasan por el proxy.