Pulsa ESC para cerrar

Curso WordpressCurso Wordpress

Tu tienda WooCommerce se cae sin visitas: los bots y los filtros de productos

Tu tienda WooCommerce se cae, el hosting te avisa que superaste tus recursos, y sin embargo no hay ventas ni campañas ni nada raro. Antes de pensar en un ataque, revisa qué direcciones están pidiendo los robots. Muy probablemente estén recorriendo, una por una, todas las combinaciones posibles de tu filtro de productos.

Este problema tiene nombre: trampa de rastreo (crawl trap). Y puede botar casi cualquier tienda.

Por qué un filtro puede botar tu tienda

El filtro clásico de atributos de WooCommerce (talla, color, material…) funciona con enlaces normales. Cada opción que marcas genera una dirección nueva:

/categoria-producto/poleras/?filter_color=azul,rojo&query_type_color=or&filter_talla=m,l

Ahora haz la cuenta. Con 10 tallas hay 1.023 formas de marcar al menos una. Con 30 colores, más de mil millones. Y si sumas talla, color y material, las combinaciones se multiplican entre sí. Ninguna persona las va a probar todas. Un robot, sí.

Tres cosas se juntan para formar la tormenta perfecta:

  • Combinaciones casi infinitas, y a un robot no le cuesta nada pedirlas.
  • Enlaces que cualquiera puede seguir. Algunos llevan rel="nofollow", pero eso es una sugerencia, no una barrera.
  • Nada sale de la caché. Como cada dirección es distinta, WordPress y WooCommerce tienen que armar cada página desde cero, con todas sus consultas a la base de datos.

El resultado típico en cPanel es el error 508 (Resource Limit Is Reached): tu cuenta se quedó sin CPU o sin procesos y el servidor empieza a rechazar visitas.

Cómo saber si te está pasando

Prueba 1: la barra de direcciones. Entra a una categoría de tu tienda y marca un filtro. Si aparece ?filter_ en la dirección, tu filtro escribe la selección en la URL.

Prueba 2: el código fuente. Pulsa Ctrl+U y busca filter_. Si lo encuentras dentro de enlaces (<a href="…filter_…">), los robots pueden seguirlos.

Prueba 3: los registros de acceso. En cPanel, Métricas → Acceso sin procesar te deja descargar el registro. Si tienes acceso SSH, es más rápido así (cambia el usuario y el dominio):

LOG=~/access-logs/tudominio.cl-ssl_log

# ¿Cuántas peticiones a filtros hubo?
grep -c 'filter_' "$LOG"

# ¿Quién las pide? (los 10 "User-Agent" más frecuentes)
grep 'filter_' "$LOG" | awk -F'"' '{print $6}' | sort | uniq -c | sort -rn | head

Si ves miles de peticiones a filtros, muchas a horas en que nadie compra o desde países donde no vendes, ya tienes al culpable.

La solución, en tres capas

Los robots son de dos tipos: los que se identifican (Googlebot, el de Meta, los de inteligencia artificial) y los que se disfrazan de navegador común. Por eso la idea clave es bloquear por el patrón de la dirección, no por quién la pide.

Capa 1: robots.txt (para los educados)

Los buscadores serios respetan robots.txt. Agrégale esta línea dentro del bloque User-agent: *:

User-agent: *
Disallow: /*?*filter_

Las páginas de categoría sin filtros siguen indexándose. Solo dejas fuera las combinaciones. Pero los robots maleducados ignoran este archivo, así que no basta.

Capa 2: .htaccess (para todos)

Esta regla hace dos cosas: rechaza los filtros a cualquier robot que se identifique como tal, y rechaza a cualquiera las combinaciones absurdas de más de tres valores en un mismo filtro (ningún cliente real marca cuatro colores a la vez). Pégala en .htaccess antes del bloque # BEGIN WordPress:

<IfModule mod_rewrite.c>
RewriteEngine On

# 1) Robots identificados: nunca necesitan las URLs de filtros
RewriteCond %{QUERY_STRING} (^|&)filter_ [NC]
RewriteCond %{HTTP_USER_AGENT} (bot|crawl|spider|slurp|meta-externalagent|facebookexternalhit|Bytespider) [NC]
RewriteRule ^ - [F,L]

# 2) Combinaciones absurdas: más de 3 valores en un mismo filtro
RewriteCond %{QUERY_STRING} (^|&)filter_[^=&]+=[^&,]*,[^&,]*,[^&,]*,[^&]* [NC]
RewriteRule ^ - [F,L]
</IfModule>

**Antes de editar .htaccess**, descarga una copia. Si la tienda deja de cargar, vuelve a subir la copia. Después prueba tú mismo los filtros con uno o dos valores para confirmar que siguen funcionando.

La ventaja de esta capa es que una respuesta 403 de Apache casi no gasta recursos: el robot se va sin que WordPress llegue a despertar.

Capa 3: Cloudflare (para cortarlo antes de que llegue)

Si usas Cloudflare, puedes frenar el tráfico antes de que toque tu servidor. En Seguridad → WAF → Reglas personalizadas, crea una regla con esta expresión (pestaña Editar expresión):

(http.request.uri.query contains "filter_" and cf.client.bot)

con la acción Bloquear. cf.client.bot identifica a los robots verificados (Google, Bing y compañía), que no necesitan esas direcciones. Para los disfrazados, puedes crear una segunda regla con http.request.uri.query contains "filter_" y la acción Desafío administrado: a las personas casi nunca les aparece nada, y a los scripts automáticos los frena.

Bonus: no es solo cuestión de servidor

Si quieres que Google entienda tu tienda, ayúdalo a no perder tiempo: que tus categorías principales estén bien enlazadas desde el menú, y que las combinaciones de filtros no sean el camino para llegar a tus productos. Un robot que no se pierde en laberintos rastrea más rápido lo que sí importa.

¿Ejecutaste los comandos de la prueba 3 y no sabes leer el resultado? Pega las primeras líneas en el foro (sin IPs de clientes) y te ayudamos a identificar qué robots están golpeando tu tienda.