Análisis de logs de servidor para SEO: guía completa

Cómo analizar los logs de rastreo, mantener el alcance del análisis y separar la actividad de los bots de cualquier conclusión sobre posiciones o tráfico al priorizar correcciones técnicas.

Por qué analizar los logs

Google Search Console solo muestra datos agregados, con un retraso de tres días. Screaming Frog simula un navegador, no a Googlebot. Los archivos de log del servidor web son la única fuente que registra cada petición real de un bot de búsqueda: la marca de tiempo exacta, la URL, el código de respuesta y la IP del rastreador.

Flujo de análisis de logs del servidor para auditorías SEO.

El análisis de logs responde preguntas que no se resuelven de otra forma: qué páginas rastrea Googlebot cada hora y cuáles lleva meses sin visitar; dónde se encuentra con 404 y errores 500; si hay bucles de redirección infinitos; si el presupuesto se desperdicia en duplicados por parámetros o en páginas tras un inicio de sesión. Estos datos son justo lo que necesitas para tomar decisiones fundadas sobre la gestión del presupuesto de rastreo.

Regla práctica: si tu sitio tiene más de 10 000 URL, o si la sección «Detectada, actualmente sin indexar» de GSC no deja de crecer, el análisis de logs es obligatorio, no opcional.

Qué aporta el análisis de logs

100%

Peticiones reales

Cada petición HTTP de un rastreador queda registrada en el archivo de log: sin muestreo ni retrasos de agregación

≤1s

Precisión temporal

Las marcas de tiempo con precisión de segundo permiten seguir los patrones de rastreo por día de la semana y hora del día

3+

Bots en una sola fuente

Googlebot, Bingbot, Yandex y otros: todos los rastreadores en un único archivo, comparables en una sola vista

0

Retraso de datos

Los logs están disponibles al instante: no hay que esperar a un nuevo rastreo ni a que se actualice el informe de GSC

Cómo acceder a los logs

La ruta a tus logs depende del servidor web y del proveedor de hosting. En la mayoría de VPS y servidores dedicados se puede acceder a los logs directamente por SSH. Para el análisis necesitas, por lo general, los logs de acceso de los últimos 30–90 días: ese periodo es lo bastante largo para detectar patrones estacionales y, a la vez, mantiene los datos actualizados.

Servidor / plataformaRuta de log por defectoNotas
Nginx/var/log/nginx/access.logRotación con logrotate. Archivos: access.log.1, access.log.2.gz, etc.
Apache/var/log/apache2/access.log (Debian/Ubuntu) o /var/log/httpd/access_log (RHEL)El formato puede ser CLF o Combined: revisa la directiva LogFormat
cPanel / WHM~/access-logs/<dominio> o Administrador de archivos → LogsA menudo se separan por dominio. Raw Access está disponible en la interfaz de cPanel
Cloudflare Workers / EnterpriseLogpush API → S3, R2, GCSSolo en el plan Enterprise. En Free/Pro, usa Workers Analytics Engine
AWS CloudFrontBucket de S3 configurado en Distribution settings → LoggingGenera logs cada 5–10 minutos, comprimidos en gzip
Google Cloud / GCSCloud Logging → exportación a BigQuery o GCSIdeal para grandes volúmenes: lanza consultas SQL directamente en BigQuery
Ejemplo de implementación:
bash
# Nginx: view the last 1000 lines of the access log
tail -n 1000 /var/log/nginx/access.log

# Size of the current log file
du -sh /var/log/nginx/access.log

# Decompress and merge rotated logs
zcat /var/log/nginx/access.log.*.gz | cat - /var/log/nginx/access.log > all_access.log

# Line count (≈ number of requests) in the merged file
wc -l all_access.log
Consejo sobre la rotación: por defecto, logrotate conserva de 7 a 14 días de logs. Para el análisis SEO necesitas al menos 30 días. Aumenta rotate 30 en /etc/logrotate.d/nginx con antelación: los logs borrados no se pueden recuperar.

Estructura de un registro de log: formato CLF

La mayoría de servidores usan por defecto el Combined Log Format (CLF), una versión ampliada del Common Log Format. Estos son los campos que importan para el análisis SEO.

text
# Combined Log Format record (Nginx/Apache)
66.249.66.1 - - [19/May/2026:14:32:01 +0000] "GET /blog/seo-guide/ HTTP/1.1" 200 45231 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
│           │ │  │                              │                          │    │       │   │
│           │ │  │                              │                          │    │       │   └─ User-Agent
│           │ │  │                              │                          │    │       └───── Referer
│           │ │  │                              │                          │    └─────────── Bytes sent
│           │ │  │                              │                          └──────────────── HTTP status
│           │ │  │                              └─────────────────────────────────────────── Request
│           │ │  └────────────────────────────────────────────────────────────────────────── Timestamp
│           │ └───────────────────────────────────────────────────────────────────────────── Auth user
│           └─────────────────────────────────────────────────────────────────────────────── Ident
└─────────────────────────────────────────────────────────────────────────────────────────── IP address
Comparativa de campos:
CampoRelevancia para SEOQué buscar
Dirección IPAltaRangos IP de Googlebot, Bingbot y Yandex: sirven para filtrar los rastreadores reales
Marca de tiempoAltaFrecuencia de rastreo y fecha de la última visita a URL concretas
Petición (método + URL)CríticaQué URL se rastrean: páginas necesarias, duplicados, parámetros y rutas inexistentes
Código de estado HTTPCrítica200 (correcto), 301/302 (redirecciones), 404 (enlaces rotos), 500 (errores del servidor)
Bytes enviadosMediaUn tamaño anormalmente pequeño es señal de una página vacía o de una respuesta incompleta
User-AgentCríticaDistinguir Googlebot de otros bots y de los usuarios reales

Filtrado: aislar a los rastreadores

Los logs en bruto mezclan peticiones de usuarios, pings de monitorización, bots de spam y rastreadores de buscadores. Para el análisis SEO solo necesitas extraer los robots de búsqueda. El método más fiable es filtrar por la cadena User-Agent y luego verificar la IP mediante DNS.

bash
# Extract all Googlebot requests
grep -i 'googlebot' /var/log/nginx/access.log > googlebot.log

# Extract all SEO crawlers
grep -iE '(googlebot|bingbot|yandex|ahrefsbot|semrushbot|mj12bot)' \
     /var/log/nginx/access.log > all_bots.log

# Count requests by crawler
grep -oiE '(googlebot|bingbot|yandexbot|ahrefsbot|semrushbot)' \
     /var/log/nginx/access.log | sort | uniq -c | sort -rn

# Verify IP via reverse DNS (confirm it's the real Googlebot)
host 66.249.66.1
# Should return: crawl-66-249-66-1.googlebot.com
# Then forward DNS:
host crawl-66-249-66-1.googlebot.com
# Should return the same IP — then it's a legitimate Googlebot
No te fíes solo del User-Agent. Los bots de spam suelen falsear la cadena Googlebot. Para un filtrado preciso, verifica las IP mediante DNS inverso: el Googlebot real se resuelve en *.googlebot.com. Google publica sus rangos IP oficiales a través de la Special IP Addresses API.

Métricas SEO clave

Tras el filtrado, pasa al análisis. Estas son seis métricas que aportan más información con menos esfuerzo.

Métrica 1Frecuencia de rastreo

Cuántas veces visitó Googlebot una URL concreta durante el periodo. Las páginas con PageRank alto y actualizaciones frecuentes se rastrean con más frecuencia. Si una página importante se visitó una sola vez en 30 días, Google la considera de poco valor.

Objetivo: páginas clave, al menos una vez cada 3 días
Métrica 2Tasa de respuestas de error

Proporción de respuestas 4xx y 5xx en las peticiones de Googlebot. Los 404 desperdician presupuesto de rastreo. Los 500 apuntan a problemas sistémicos. Una tasa alta de errores reduce la confianza de Google en el sitio.

Referencia: 4xx < 3 %, 5xx < 0,5 %
Métrica 3Proporción de redirecciones

Qué fracción de las peticiones de Googlebot termina en 301 o 302. Las redirecciones consumen presupuesto y ralentizan la reindexación. Las cadenas de redirección (A → B → C) son especialmente dañinas.

Referencia: 3xx < 10 % de todas las peticiones de bots
Métrica 4URL duplicadas en los logs

El mismo contenido bajo URL distintas: con y sin www, con y sin barra final, con parámetros UTM. Cada variante se rastrea por separado: una fuga directa del presupuesto de rastreo.

Objetivo: una única URL canónica por cada contenido
Métrica 5Páginas importantes sin rastreo

Páginas clave (categorías, landing pages, artículos nuevos) que Googlebot no pidió en 30 días. Esto apunta a problemas con el enlazado interno o a un bloqueo en robots.txt.

Objetivo: 0 páginas importantes sin rastreo en 30 días
Métrica 6Páginas no deseadas en el rastreo

Páginas que Google rastrea y no debería: paneles de administración, páginas de sesión, entornos de prueba, duplicados por parámetros. Desperdician presupuesto y a veces suponen un riesgo de seguridad.

Objetivo: 0 URL sensibles en los logs de Googlebot

Herramientas de análisis

Tres herramientas cubren el 95 % de las tareas de análisis de logs: la línea de comandos para comprobaciones rápidas, una herramienta gráfica especializada para análisis en profundidad, y Python/BigQuery para grandes volúmenes de datos y automatización.

Bash: análisis rápido sin instalar nada

bash
# Top 20 URLs Googlebot crawls most often
grep -i 'googlebot' access.log \
  | awk '{print $7}' \
  | sort | uniq -c | sort -rn | head -20

# Response status distribution for Googlebot
grep -i 'googlebot' access.log \
  | awk '{print $9}' \
  | sort | uniq -c | sort -rn

# URLs returning 404 to Googlebot
grep -i 'googlebot' access.log \
  | awk '$9 == 404 {print $7}' \
  | sort | uniq -c | sort -rn | head -50

# Googlebot request count by day
grep -i 'googlebot' access.log \
  | awk '{print $4}' \
  | cut -d: -f1 | tr -d '[' \
  | sort | uniq -c

# Parametric URLs in Googlebot requests
grep -i 'googlebot' access.log \
  | awk '{print $7}' \
  | grep '?' \
  | sort | uniq -c | sort -rn | head -30

Screaming Frog Log File Analyser

Herramienta de pago ($259 al año), pero imprescindible para el análisis periódico. Carga el archivo de log, lo analiza y genera informes: segmentación bot frente a navegador, paneles de códigos de estado, mapas de calor del rastreo por directorio y una lista de páginas sin rastreo. Admite los formatos de Nginx, Apache, IIS, CloudFlare, Fastly y CSV personalizados.

Python: análisis flexible para archivos grandes

python
import re
from collections import Counter

LOG_PATTERN = re.compile(
    r'(?P<ip>\S+) \S+ \S+ \[(?P<time>[^\]]+)\] '
    r'"(?P<method>\S+) (?P<url>\S+) \S+" '
    r'(?P<status>\d{3}) (?P<size>\S+) '
    r'"(?P<referer>[^"]*)" "(?P<ua>[^"]*)')

def parse_log(path: str, bot_pattern: str = 'googlebot') -> list[dict]:
    entries = []
    with open(path) as f:
        for line in f:
            m = LOG_PATTERN.match(line)
            if not m:
                continue
            if bot_pattern.lower() not in m.group('ua').lower():
                continue
            entries.append({
                'ip': m.group('ip'),
                'url': m.group('url'),
                'status': int(m.group('status')),
                'ua': m.group('ua'),
            })
    return entries

entries = parse_log('access.log')

# Top 20 URLs by crawl frequency
url_counts = Counter(e['url'] for e in entries)
for url, count in url_counts.most_common(20):
    print(f'{count:>6}  {url}')

# 404 errors
errors = [e['url'] for e in entries if e['status'] == 404]
for url, count in Counter(errors).most_common(20):
    print(f'{count:>6}  404  {url}')
BigQuery para empresas: cuando los logs de acceso ocupan cientos de GB, el análisis local no es práctico. Cárgalos en BigQuery (GCS → BigQuery → consulta programada) y analízalos con SQL. Analizar 1 TB cuesta unos $5.

Patrones de rastreo: qué buscar

Las métricas en bruto no dicen nada sin interpretarlas. Estos son los patrones concretos que conviene buscar en los logs de Googlebot.

Patrón 1: rastreadas pero no indexadas

Googlebot visita una página con regularidad, pero nunca aparece como «Indexada» en GSC. Causas: una etiqueta meta noindex, un bloqueo mediante X-Robots-Tag en las cabeceras HTTP, contenido pobre, o una etiqueta canonical que apunta a otra página. Compara la lista de URL rastreadas con regularidad con las páginas indexadas obtenidas de la API de GSC: las discrepancias señalan las páginas problemáticas.

Patrón 2: tormentas de rastreo

Un pico repentino de peticiones de Googlebot en una ventana corta suele indicar URL generadas de forma infinita: facetas, URL de paginación con parámetros, tokens de sesión en la URL. Una tormenta de rastreo puede agotar todo el presupuesto en horas y suponer una carga real para el servidor. Representa las peticiones como un histograma por hora: los picos anormales se ven al instante.

Patrón 3: páginas nuevas ignoradas

Hace tres semanas se creó una página nueva y se añadió al sitemap, pero Googlebot no registra ninguna petición en los logs. Causas: no hay enlaces internos a la página, el bot no está volviendo a rastrear el sitemap, o la página está a un nivel de anidamiento demasiado profundo. Comprueba las URL nuevas con la herramienta de inspección de URL de GSC y busca la fecha de la primera aparición en los logs.

Patrón 4: recursos que bloquean el renderizado

Googlebot pide no solo páginas HTML, sino también CSS, JS e imágenes. Si los recursos críticos están bloqueados en robots.txt, el bot no puede renderizar la página y puede infravalorarla. Comprueba en los logs qué porcentaje de las peticiones de Googlebot apunta a recursos estáticos y si algún archivo JS necesario está bloqueado.

Problemas habituales y soluciones

Problema en los logsCausa raízSolución
Muchos 404 de GooglebotPáginas eliminadas que aún tienen enlaces externos o internos apuntando a ellas301 a la página activa más cercana + eliminar los enlaces internos rotos
URL con parámetros en el rastreoEtiquetas UTM, ordenaciones y sesiones sin bloquear en robots.txtDisallow en robots.txt + canonical a la URL limpia en las propias páginas
Cadenas de redirecciones (A→B→C)Redirecciones acumuladas tras una reestructuraciónReducir a un solo salto y actualizar todos los enlaces salientes
Páginas /admin y /staging en los logsSecciones de servicio sin bloquearDisallow /admin/ en robots.txt + autenticación HTTP en staging
Respuestas 5xx a GooglebotSobrecarga del servidor en picos de tráfico o errores del backendOptimizar el TTFB, añadir caché y configurar un límite de frecuencia de rastreo
Página importante sin rastrearSin enlaces internos, demasiado profunda en la jerarquía, fuera del sitemapAñadir al sitemap + enlaces internos desde las páginas clave
Duplicados www / sin wwwNo hay una redirección 301 configurada a la versión canónica del dominio301 de sin www a www (o al revés) a nivel de nginx/Apache
robots.txt bloquea JS/CSS necesariosDisallow /assets/ o /static/ en la plantillaQuitar el bloqueo de los recursos críticos para el renderizado
Ejemplo de implementación:
bash
# Detect redirect chains in logs
# Step 1: extract all URLs with 301/302 status for Googlebot
grep -i 'googlebot' access.log \
  | awk '$9 ~ /^30[12]$/ {print $7}' | sort -u > redirects.txt

# Step 2: check if any of those URLs are also redirect sources
while read url; do
  if grep -q "GET $url " redirects.txt 2>/dev/null; then
    echo "CHAIN: $url"
  fi
done < redirects.txt

# Find 5xx errors grouped by URL and hour
grep -i 'googlebot' access.log \
  | awk '$9 ~ /^5/ {print $4" "$7}' \
  | cut -d: -f1-2 \
  | sort | uniq -c | sort -rn | head -20

Preguntas frecuentes

Conclusión

El análisis de logs es la auditoría SEO más honesta que existe. GSC muestra agregados, Screaming Frog simula un rastreo, pero los logs registran cada decisión real que toma Googlebot. El proceso es sencillo: obtén logs de 30–90 días → filtra los rastreadores por User-Agent con verificación DNS → calcula las seis métricas clave → cruza los datos con el índice de GSC → corrige las discrepancias.

Empieza con tres comandos de Bash: las 20 URL más rastreadas, la distribución de códigos de estado y los 404 más frecuentes. En una hora tendrás una lista concreta de acciones: redirecciones que configurar, URL que bloquear en robots.txt y páginas que añadir al sitemap. Es más rápido y barato que cualquier auditoría de pago: los datos ya están en tu servidor.

¿Con qué frecuencia debo analizar los logs?
Como mínimo cada trimestre en sitios estables. Después de cambios importantes (una nueva estructura del sitio, un rediseño o la publicación masiva de contenido), hazlo de inmediato. En comercio electrónico con decenas de miles de SKU y generación activa de URL con parámetros, cada mes. Si GSC muestra una caída anormal en la actividad de rastreo, hazlo enseguida.
¿Necesito logs si mi sitio es pequeño (menos de 500 páginas)?
En sitios pequeños, GSC suele bastar. Pero si las posiciones cayeron sin una causa aparente, o las páginas nuevas tardan mucho en aparecer en el índice, los logs dan la respuesta más rápido que cualquier otra herramienta. Un análisis puntual lleva 30 minutos y merece la pena hacerlo al menos una vez, como auditoría de calibración.
¿Cómo distingo el Googlebot real de un suplantador?
Verificación DNS en dos pasos: primero una búsqueda inversa de la IP, que debe resolver a *.googlebot.com o *.google.com. Después, una búsqueda directa de ese nombre de host, que debe devolver la misma IP. Los dos pasos son necesarios: el DNS inverso por sí solo no basta, porque cualquiera puede configurar un registro PTR.
¿La frecuencia de rastreo afecta directamente a las posiciones?
La frecuencia de rastreo y las posiciones son observaciones distintas. Una página que se rastrea a menudo no es automáticamente más fuerte, y una que se rastrea poco no es automáticamente débil. Usa los logs para entender el descubrimiento y el comportamiento de nuevo rastreo, y estudia las posiciones con datos de búsqueda independientes.
¿Qué hago si Googlebot rastrea demasiado agresivamente y sobrecarga el servidor?
Ajusta la frecuencia de rastreo en Google Search Console (Configuración → Límite de frecuencia de rastreo). Para secciones concretas puedes usar Crawl-delay en robots.txt, pero Google no promete oficialmente respetarlo. La opción más fiable es optimizar el TTFB y la caché para que el servidor aguante la carga sin tener que restringir el rastreo.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it