Files
roi-theme/buscar-apus/querys-stats.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

65 lines
1.6 KiB
PHP
Executable File

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;