Mi buscador se rompió cuatro horas de madrugada y solo lo vieron 74 búsquedas sin resultados
En 90 días y 94.645 búsquedas, una tienda real acumuló 95 búsquedas en cero. 74 de esas 95 pasaron en la misma ventana de cuatro horas, de madrugada. No era falta de stock: «goku» devolvió cero teniendo 179 productos en catálogo. Las búsquedas sin resultados no son solo una lista de deseos de tus clientes: son la única alarma que tienes.
La forma habitual de leer las búsquedas sin resultados de una tienda es como una lista de deseos: alguien buscó algo, no lo tenías, apúntalo para el próximo pedido a proveedor.
Es una lectura razonable. Esta semana me habría costado un día entero.
Estos son los ceros de una tienda WooCommerce real, de coleccionismo, con 5.646 productos indexados, entre el 10 de julio y el 29 de septiembre de 2026 — 94.645 búsquedas:
| Día | Búsquedas | En cero | % |
|---|---|---|---|
| 15–26 de septiembre (12 días) | 21.736 | 0 | 0,00 % |
| 27 de septiembre | 2.317 | 63 | 2,72 % |
| 28 de septiembre | 1.990 | 11 | 0,55 % |
| 29 de septiembre | 266 | 0 | 0,00 % |
En 90 días hubo 95 búsquedas sin resultados. 74 de esas 95 pasaron dentro de la misma ventana de cuatro horas, entre las 23:00 del 27 y las 03:00 del 28 (hora peninsular). Dentro de esa ventana, el 38,7 % de todas las búsquedas devolvió una página vacía, a 23 visitantes distintos. Fuera de ella, en los otros 89 días y pico: 21 ceros en 94.454 búsquedas, el 0,022 %.
No era falta de stock
Lo primero que comprobé fue lo obvio: ¿es que esa noche pedían cosas que no vendo?
No. Estos son algunos de los términos que devolvieron cero esa madrugada, contra el número de productos que hay en el catálogo con esa palabra en el título:
| Lo que buscaron | Resultados esa noche | Productos en catálogo |
|---|---|---|
goku |
0 | 179 |
luffy |
0 | 215 |
bleach |
0 | 70 |
miku |
0 | 34 |
Ciento setenta y nueve productos con Goku en el título, y el buscador devolvió una página vacía.
Y el detalle que más me despistó al principio: el buscador no estaba caído. Las búsquedas que sí funcionaron esa noche devolvieron 71 resultados de media, exactamente lo mismo que cualquier otro día del trimestre. Visto desde fuera —desde la web, desde el panel, desde cualquier monitor de «¿responde el servidor?»— la tienda funcionaba. Era un fallo parcial, de madrugada, y lo único que dejó rastro fueron 74 líneas en un registro de búsquedas.
Sigo investigando la causa exacta y no la voy a inventar aquí. Lo que sí sé es lo que la cazó, y que sin ese registro esas cuatro horas no habrían existido para nadie.
Las tres cosas distintas que mide un cero
Un cero no significa una cosa. Significa tres, y tienen prioridades muy distintas:
- Estás roto. El producto está, indexado y en stock, y aun así no sale. Indexación a medias, un servicio externo que falla, un filtro que se quedó pegado, un despliegue.
- Habláis distinto. El producto está y el buscador no lo encuentra porque el cliente lo escribe de otra forma: erratas, plurales, sinónimos. De esto van el artículo de las erratas y el de los sinónimos.
- No lo tienes. El caso de la lista de deseos. Es el único de los tres que se arregla comprando producto.
El orden importa mucho más de lo que parece. Casi todo el mundo lee su lista de ceros como si todo fuera del tipo 3, que es el más caro de arreglar y el más lento. Si el 27 de septiembre yo hubiera abierto esa lista con esa cabeza, habría visto «goku, luffy, bleach, miku» y habría concluido que tenía un agujero de catálogo enorme en las licencias más vendidas de la tienda.
Por eso la primera pregunta ante cualquier cero nuevo no es «¿qué me están pidiendo?», sino «¿tengo ese producto?». Si lo tienes, el problema es tuyo y es urgente. Si no lo tienes, el problema es de catálogo y puede esperar al lunes.
Cómo tener esto en tu tienda hoy
WooCommerce no guarda las búsquedas de tus clientes. En ningún sitio. Si no lo montas tú, esa ventana de cuatro horas no deja ni rastro.
Son veinte líneas. Guarda esto como wp-content/mu-plugins/registro-busquedas.php — la carpeta mu-plugins puedes crearla si no existe, y lo que hay dentro se activa solo:
<?php
/**
* Plugin Name: Registro de búsquedas
* Description: Guarda cada búsqueda de la tienda y cuántos resultados devolvió.
*/
add_action('wp', function () {
if (is_admin() || !is_search() || !is_main_query()) {
return;
}
$termino = trim(get_search_query());
if ($termino === '') {
return;
}
global $wp_query, $wpdb;
$tabla = $wpdb->prefix . 'busquedas';
// La tabla se crea una sola vez, no en cada búsqueda.
if (get_option('registro_busquedas_tabla') !== '1') {
$wpdb->query("CREATE TABLE IF NOT EXISTS {$tabla} (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
termino VARCHAR(191) NOT NULL,
resultados INT NOT NULL,
creado DATETIME NOT NULL,
INDEX idx_termino (termino),
INDEX idx_creado (creado)
) {$wpdb->get_charset_collate()}");
update_option('registro_busquedas_tabla', '1');
}
$wpdb->insert($tabla, [
'termino' => mb_substr($termino, 0, 191),
'resultados' => (int) $wp_query->found_posts,
'creado' => current_time('mysql'),
]);
});
Si ya lo tenías puesto por alguno de los artículos anteriores, no hace falta tocar nada: es la misma tabla.
La consulta que hay que mirar cada día
No la lista de términos. La tasa, por hora. Es lo que convierte el registro en una alarma en lugar de en un archivo:
SELECT DATE_FORMAT(creado, '%Y-%m-%d %H:00') AS hora,
COUNT(*) AS busquedas,
SUM(resultados = 0) AS ceros,
ROUND(100 * SUM(resultados = 0) / COUNT(*), 1) AS pct
FROM wp_busquedas
WHERE creado >= NOW() - INTERVAL 14 DAY
GROUP BY hora
HAVING busquedas >= 20
ORDER BY hora DESC;
El HAVING busquedas >= 20 es importante: a las cuatro de la mañana con tres búsquedas, una sola en cero te da un 33 % y una alarma falsa cada noche.
¿Qué umbral? El tuyo, no el mío. Déjalo correr una semana, mira qué porcentaje tienes en un día normal y pon la alarma en tres o cuatro veces eso. En esta tienda la línea base es 0,02 % y la avería marcó 38,7 %, así que cualquier umbral razonable la habría cazado. Si tu línea base es del 8 % —muy normal con el buscador nativo de WooCommerce, que falla con cualquier errata—, tendrás que arreglar primero las erratas y los sinónimos, porque con ese ruido de fondo no se ve ninguna avería.
Y para que sea de verdad una alarma, con WP-CLI y una tarea de cron cada hora:
wp db query "SELECT ROUND(100*SUM(resultados=0)/COUNT(*),1) FROM wp_busquedas \
WHERE creado >= NOW() - INTERVAL 1 HOUR HAVING COUNT(*) >= 20" --skip-column-names \
| while read pct; do
if [ -n "$pct" ] && [ "${pct%.*}" -ge 10 ]; then
echo "Buscador: $pct% sin resultados en la última hora" \
| mail -s "Alarma buscador" tu@correo.com
fi
done
Cuando te sientes a leer la lista: pliega los prefijos primero
Aquí hay una trampa que ensucia todos los informes de búsquedas sin resultados, y es que buena parte de tus ceros no son búsquedas: son gente escribiendo.
Si tu buscador va enseñando resultados según se teclea, cada pulsación queda registrada. En los 90 días de esta tienda, los 95 ceros eran 76 términos distintos. Pero mirándolos en orden aparecen así:
ble → blea → bleac → bleach
boa → boa ha → boa hancoc → boa hancock
ju → juu → juuzou → juuzou su → juuzou suzuya
Cuatro y cinco líneas para una única persona buscando una única cosa. Si cuentas eso como cuatro problemas, tu lista de prioridades sale del revés.
Se pliega con una consulta: quédate solo con los términos que no son principio de ningún otro término de la lista.
SELECT a.termino, COUNT(*) AS veces
FROM wp_busquedas a
WHERE a.resultados = 0
AND a.creado >= NOW() - INTERVAL 30 DAY
AND NOT EXISTS (
SELECT 1 FROM wp_busquedas b
WHERE b.resultados = 0
AND b.creado >= NOW() - INTERVAL 30 DAY
AND b.termino <> a.termino
AND b.termino LIKE CONCAT(a.termino, '%')
)
GROUP BY a.termino
ORDER BY veces DESC;
En esta tienda, esa consulta convierte 76 términos en 33 intenciones reales. Menos de la mitad. Y ahora sí se puede leer de un vistazo: cuatro o cinco erratas, unas cuantas licencias, y una línea que vale ella sola el rato invertido:
dragon ball por menos de 4€!
Dos veces, en dos sesiones distintas. Eso no es una errata ni un producto que falte: es alguien intentando filtrar por precio escribiéndolo en la caja de búsqueda, con signo de exclamación incluido. Ninguna tienda tiene eso en su lista de deseos de catálogo, y está ahí escrito por el cliente.
No persigas la cola larga
Lo último, porque ahorra mucho tiempo perdido. Así se reparten las 94.645 búsquedas de esta tienda entre sus 23.261 términos distintos:
| Términos | % de términos | Búsquedas | % de búsquedas | |
|---|---|---|---|---|
| Se buscaron 1 vez | 16.484 | 70,9 % | 16.484 | 17,4 % |
| Se buscaron 2–4 veces | 4.389 | 18,9 % | 11.010 | 11,6 % |
| Se buscaron 5 o más | 2.388 | 10,3 % | 67.151 | 71,0 % |
Siete de cada diez términos se escriben una sola vez en un trimestre. El 10 % de los términos se lleva el 71 % de las búsquedas.
Traducido a tu lunes por la mañana: ignora sin remordimiento los ceros que aparecen una vez. No son representativos de nada y no vas a poder con ellos a mano, porque cada producto nuevo trae nombres nuevos. Ordena la lista plegada por frecuencia y trabaja de arriba abajo. Los diez primeros te dan casi todo.
La excepción, y es la del principio: si de pronto aparecen cincuenta ceros que ayer no estaban, no los ordenes por frecuencia. Mira la hora.
Por orden, lo que yo haría esta semana:
- Pon el registro de búsquedas si aún no lo tienes. Sin él, una avería de cuatro horas no existe.
- A los siete días, saca tu línea base con la consulta por horas. Ese número es tu normalidad.
- Pon la alarma en tres o cuatro veces esa línea base, con el mínimo de 20 búsquedas por hora.
- Pliega los prefijos antes de leer nada, y ordena por frecuencia.
- Para cada uno de los diez primeros, la pregunta en este orden: ¿tengo el producto? (entonces es avería o vocabulario) → ¿lo escribe distinto? (sinónimo o errata) → ¿no lo tengo? (catálogo).
Si tu línea base sale alta y la mayor parte de tus ceros son del tipo 2 —vocabulario—, la lista a mano tiene un techo y llega rápido. Ahí es donde un buscador dedicado deja de ser un lujo: tienes la guía de cómo elegir un buscador para ecommerce, con los precios de cada opción comprobados y cuándo cada competidor es mejor que nosotros.
¿Tu tienda pierde ventas por búsquedas que no encuentran nada?
WildRock añade a tu WooCommerce un buscador que entiende lo que tus clientes quieren decir, y te dice en euros cuánto te está generando. Plugin gratuito, sin tocar código.
Seguir leyendo
Cuánto vale de verdad un visitante de tu tienda
Medido hoy en una tienda WooCommerce real, 31 días y 11.273 sesiones: el valor medio que abre una sesión es de 73,67 € de catálogo y la mediana es de 0,00 €. El 10 % de arriba concentra el 61,9 % de todo. El visitante medio no existe, y calcular tu valor por visitante dividiendo ingresos entre visitas te da un número con el que no se decide nada. Aquí está el cálculo que sí sirve, con el SQL para sacarlo de tu propia tienda.
Las 6 métricas de una tienda que sí mueven dinero
Medido hoy en una tienda WooCommerce real de 5.621 productos: 255 se llevan la mitad de los clics. El 4,5 % del catálogo. Y 4.163 productos no recibieron ni uno en 31 días. Aquí están las seis métricas que cambian decisiones de verdad —concentración, catálogo muerto, demanda sin stock— con el SQL para sacar cada una de tu propia base de datos hoy.
