Caso real 09 · Seguridad · bots y spam

167.770 peticiones de bots en un día: qué buscaban y cómo se limpió la analítica

El tráfico se disparó con decenas de miles de «visitantes». Parecía un éxito, pero era una botnet de reconocimiento. Meses antes, el mismo sitio había acumulado spam a través del buscador interno.

Caso real, cliente anonimizado. El nombre del cliente, las personas y los datos internos se omiten por confidencialidad. Las cifras salen de logs, Search Console, GA4 y del propio código. Si un dato de negocio no se midió, no aparece.
167.770peticiones de bots en el pico
10.165peticiones maliciosas
0archivos sensibles expuestos
181traducciones spam bloqueadas
Contexto

El punto de partida.

Durante cinco días, GA4 mostró unos 60.000 visitantes directos sin asignar concentrados en seis países sin relación con el mercado del producto.

Antes, el sitio había acumulado traducciones de contenido spam en caracteres CJK. No había hackeo de base de datos: eran búsquedas spam en el buscador interno que el plugin de traducción procesaba como contenido.

Síntomas observados

  • Pico de tráfico directo sin conversiones.
  • En el edge: peticiones a .env.production, .env.local, .env.staging y config.json.
  • Una segunda oleada que sí cargaba páginas y ejecutaba GA4.
  • Cientos de cadenas spam en el panel del plugin de traducción.
Diagnóstico

Hipótesis descartadas antes de tocar nada.

Lo que parecía obvio y no era. Descartar bien ahorra días de trabajo en la dirección equivocada.

Campaña o mención externa

Sin referrers, sin conversiones y con un solo tipo de dispositivo.

Inyección en la base de datos

Las cadenas procedían de URLs de búsqueda, no de contenido almacenado.

Filtro de bots de GA4

GA4 no permite filtros de bots propios; solo excluye bots conocidos.

Implementación

Qué hice, paso a paso.

Datos del edge

Clasificación del hosting en el pico: 167.770 probables bots y 10.165 maliciosas. Patrón de reconocimiento, no spam aleatorio.

Exposición

Todas las sondas devolvían 404 y el edge las bloqueaba. Ningún archivo sensible en el directorio público.

Firma de la segunda oleada

Casi todo desde un mismo país, 100 % escritorio, cada sesión un usuario nuevo, sin fuente ni conversiones.

Limpiar la analítica

Bloqueo en el edge por ASN de centro de datos y un segmento en GA4 para los informes.

Spam en el buscador

Un mu-plugin rechaza búsquedas con caracteres CJK, demasiado largas o con patrones de spam, y las URLs de búsqueda quedan excluidas de la traducción.

Comunicación

Resumen para negocio: qué pasó, qué riesgo real hubo y qué se cambió.

Bajo el capó

El código que importa.

Fragmentos simplificados y sin datos del cliente, para que se vea el enfoque técnico real.

Filtro de búsquedas spamphp
add_action( 'template_redirect', function () {
    if ( ! is_search() ) return;
    $q = get_search_query();
    if ( '' === trim( $q )
      || mb_strlen( $q ) > 100
      || preg_match( '/[\x{4E00}-\x{9FFF}\x{3000}-\x{303F}]/u', $q )
      || preg_match( '/(https?:\/\/|www\.|\.cn\b|casino|viagra)/i', $q ) ) {
        wp_safe_redirect( home_url( '/' ), 301 );
        exit;
    }
} );
Qué buscaba la botnettext
GET /.env.production   404
GET /.env.local        404
GET /.env.staging      404
GET /config.json       404
Decisiones

Por qué así y no de otra forma.

Bloquear antes de filtrar

Lo que no llega al sitio no ensucia la analítica ni consume recursos.

Segmento en GA4 en lugar de borrar datos

Los datos crudos se conservan; los informes se limpian.

Resultado

Qué cambió, con datos verificables.

IndicadorAntesDespuésContexto
Peticiones de bots en el pico167.770Bloqueadas en el edge+10.165 maliciosas
Archivos sensibles expuestos—0todas las sondas en 404
Tráfico falso en informesMezcladoSegmentadofirma identificada
Traducciones spam181Bloqueadas en origenbúsquedas excluidas

Cómo lo validé

  • Ninguna ruta sensible accesible desde fuera.
  • Informes de GA4 con y sin segmento comparados.
  • Búsquedas spam de prueba redirigidas sin generar traducciones.
Lo que me llevo

Un pico de tráfico sin conversiones y con un solo tipo de dispositivo casi nunca es buena noticia. Antes de celebrarlo, miro los logs del edge.

  • WordPress
  • PHP
  • CDN
  • GA4
  • Plugin de traducción
Para tu web

Checklist rápida: ¿te está pasando lo mismo?

  • ¿Algún .env o config accesible en tu directorio público?
  • ¿Distingues bots en tus informes?
  • ¿Tu traductor procesa URLs de búsqueda?
  • ¿Filtras consultas de búsqueda anómalas?
¿Te suena?

¿Tienes un problema parecido?

Preguntas frecuentes

Dudas habituales sobre este tipo de problema.

¿Cómo sé si un pico de tráfico son bots?

Un solo país o dispositivo, ningún usuario recurrente y cero conversiones. Los logs lo confirman.

¿Se pueden filtrar bots en GA4?

GA4 excluye bots conocidos, pero no permite filtros propios. Hay que bloquear antes y segmentar.

¿Por qué aparece spam en mi web traducida?

A menudo son búsquedas spam que el traductor procesa. Se excluyen las URLs de búsqueda y se filtran las consultas.

WordPress · SEO técnico · IA

Cuéntame qué está frenando tu web.

Si ya tienes un WordPress en producción, reviso el contexto y te digo con honestidad si lo que necesitas es desarrollo, SEO técnico, rendimiento o automatización.