Docs
Buscar documentación...⌘K

Fastly

La transmisión en tiempo real de registros de Fastly puede enviar los registros de solicitudes de tu servicio a Ahrefs a través de HTTPS. Añade un punto de conexión de registro a tu servicio de Fastly desde el panel de control de Fastly; Ahrefs nunca necesita acceder a tu cuenta de Fastly.

Requisitos previos

  • Un servicio CDN de Fastly que da servicio al dominio de tu proyecto de Ahrefs. Cualquier plan de Fastly funciona, incluido el nivel gratuito.
  • Permiso para editar la configuración de ese servicio y activar una nueva versión.

Paso 1 — Obtén tu clave de acceso

  1. En Ahrefs, ve a Configuración del proyecto → Bot Analytics de tu proyecto.
  2. Selecciona Fastly.
  3. Copia la URL, el nombre del encabezado personalizado y el valor del encabezado personalizado. El valor del encabezado es tu clave de acceso: identifica tu proyecto, así que trátalo como una contraseña.

Todo lo demás que necesitas está en esta página.

Paso 2 — Añade el punto de conexión de registro

En el panel de control de Fastly, abre tu servicio, haz clic en Editar configuración y clona la versión activa. En el menú de la izquierda, elige Registro, luego HTTPS y Crear punto de conexión.

Campos del punto de conexión

CampoValor
NombreAhrefs Bot Analytics
AsignaciónVersión de formato predeterminada
Formato de registroEl formato de registro de abajo, sustituyendo el predeterminado
URLhttps://analytics.ahrefs.com/api/fastly/logs
Registros máximos, bytes máximosDejar en blanco
Tipo de contenidoapplication/json
Nombre del encabezado personalizadoX-Ahrefs-Web-Analytics-Property
Valor del encabezado personalizadoLa clave de acceso del Paso 1
MétodoPOST
Formato de entrada de registro JSONDelimitado por saltos de línea. También funciona una matriz de JSON.
CompresiónGzip (recomendado) o ninguna. No se aceptan Zstd ni Snappy.
Campos de TLSDejar en blanco

En Opciones Advanced, establece Seleccionar un formato de línea de registro en En blanco. Haz clic en Crear y luego en Activar para activar la nueva versión. Fastly empieza a transmitir de inmediato.

warning

El formato de línea de registro debe ser En blanco. El valor predeterminado, Clásico, antepone un encabezado syslog a cada línea, y Ahrefs rechaza esos lotes.

info

Cuando guardas el punto de conexión, Fastly comprueba que el host de destino acepte registros desde servicios de Fastly. Ahrefs responde a esa comprobación para todos, así que no hay nada que configurar por tu parte.

Formato de registro

Fastly rellena los marcadores de posición %{...}V para cada solicitud. Tú decides qué compartir: el formato mínimo es suficiente para que Bot Analytics funcione, y el formato recomendado ofrece mejores resultados. Las claves desconocidas se ignoran, así que puedes mantener los campos adicionales que ya registras.

Mínimo. Visitas de bots con hora, página y nombre del bot:

{
  "timestamp": %{time.start.msec}V,
  "host": "%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V",
  "url": "%{json.escape(req.url)}V",
  "request_user_agent": "%{json.escape(req.http.User-Agent)}V"
}

Recomendado. Añade la IP del visitante para los datos de ubicación, el estado y los detalles de respuesta que se muestran con cada visita, la verificación de Web Bot Auth y el marcador de borde que elimina duplicados cuando tu servicio usa shielding:

{
  "timestamp": %{time.start.msec}V,
  "client_ip": "%{req.http.Fastly-Client-IP}V",
  "host": "%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V",
  "scheme": "%{req.protocol}V",
  "url": "%{json.escape(req.url)}V",
  "request_method": "%{json.escape(req.method)}V",
  "request_referer": "%{json.escape(req.http.Referer)}V",
  "request_user_agent": "%{json.escape(req.http.User-Agent)}V",
  "response_state": "%{json.escape(fastly_info.state)}V",
  "response_status": %{resp.status}V,
  "response_body_size": %{resp.body_bytes_written}V,
  "response_content_type": "%{json.escape(resp.http.Content-Type)}V",
  "fastly_server": "%{json.escape(server.identity)}V",
  "fastly_is_edge": %{if(fastly.ff.visits_this_service == 0, "true", "false")}V,
  "request_id": "%{json.escape(req.xid)}V",
  "signature": "%{json.escape(req.http.Signature)}V",
  "signature_input": "%{json.escape(req.http.Signature-Input)}V",
  "signature_agent": "%{json.escape(req.http.Signature-Agent)}V"
}

Combina ambos como quieras: las cuatro claves mínimas son obligatorias; cualquier otra clave puede omitirse, dejarse vacía o como (null). Mantén fastly_is_edge siempre que tu servicio tenga un shield; de lo contrario, cada fallo se cuenta dos veces. Las claves sin comillas (timestamp, response_status, response_body_size, fastly_is_edge) siempre deben tener un valor; de lo contrario, la línea no es un JSON válido.

info

Los servicios Fastly Compute escriben el mismo JSON desde el código, un objeto por línea, con la configuración del punto de conexión del paso 2.

Paso 3 — Verificar

Fastly entrega los registros en lotes pequeños, normalmente en el minuto siguiente a las solicitudes. Las visitas de bots aparecen en el informe de Bot Analytics unos minutos después. También se envían solicitudes desde navegadores; Ahrefs descarta todo lo que no sea un bot.

Solución de problemas

Fastly no muestra errores de entrega para puntos de conexión HTTPS en el panel de control, así que comprueba la configuración con la tabla anterior cuando no llegue nada. Ahrefs responde a cada lote con una de estas opciones:

RespuestaCausa
401 missing authentication headerEl nombre del encabezado personalizado está mal escrito o está vacío.
403 invalid authenticationEl valor del encabezado personalizado no coincide con un proyecto de Ahrefs. Cópiala de nuevo del Paso 1.
400 record 0: …El formato de la línea de registro es Clásico en lugar de En blanco, la compresión no es Gzip ni está desactivada, o el formato de registro no es JSON válido.
400 record N: Missing record field …Delimitado por saltos de línea: al formato de registro le falta una de las claves obligatorias.
400 invalid body: not a JSON array of log records: …Array de JSON: el formato de la línea de registro es Clásico en lugar de En blanco, al formato de registro le falta una clave obligatoria o no es JSON válido.
400 body is not valid gzipLa compresión es Gzip en Fastly, pero el cuerpo no se pudo descomprimir.