Top búsquedas (últimos 30 días, no bots; aquí no guardamos bot flag, así que todo cuenta): SELECT q_term, COUNT(*) AS n FROM wp_search_log WHERE ts >= NOW() - INTERVAL 30 DAY GROUP BY q_term ORDER BY n DESC LIMIT 100; Búsquedas sin resultados (qué falta en tu índice): SELECT q_term, COUNT(*) AS n FROM wp_search_log WHERE zero_results = 1 GROUP BY q_term ORDER BY n DESC LIMIT 100; CTR por consulta (clics / búsquedas): SELECT s.q_term, COUNT(DISTINCT s.id) AS searches, COUNT(c.id) AS clicks, ROUND(COUNT(c.id)/COUNT(DISTINCT s.id), 3) AS ctr FROM wp_search_log s LEFT JOIN wp_search_click c ON c.search_id = s.id GROUP BY s.q_term HAVING searches >= 5 ORDER BY ctr DESC, searches DESC LIMIT 100; Posición media clicada por consulta (calidad percibida): SELECT s.q_term, AVG(c.position) AS avg_pos, COUNT(*) AS clicks FROM wp_search_click c JOIN wp_search_log s ON s.id = c.search_id GROUP BY s.q_term HAVING clicks >= 5 ORDER BY avg_pos ASC; -- más bajo = mejor Embudo por dispositivo: SELECT s.device, COUNT(DISTINCT s.id) AS searches, COUNT(c.id) AS clicks, ROUND(COUNT(c.id)/COUNT(DISTINCT s.id), 3) AS ctr FROM wp_search_log s LEFT JOIN wp_search_click c ON c.search_id = s.id GROUP BY s.device; Refinamientos (siguientes consultas en la misma sesión, 10 min): SELECT a.q_term AS q1, b.q_term AS q2, COUNT(*) AS n FROM wp_search_log a JOIN wp_search_log b ON a.visitor_id = b.visitor_id AND b.ts BETWEEN a.ts AND a.ts + INTERVAL 10 MINUTE AND b.id > a.id GROUP BY q1, q2 ORDER BY n DESC LIMIT 100;