Introduccion

Uno de los problemas silenciosos en cualquier eCommerce es tener productos que nunca se han vendido. Están publicados, ocupan espacio, pueden salir en el buscador interno, pero no han generado ni una sola venta.

¿Te suena?
→ Productos con descripciones pobres, precios poco competitivos, imágenes olvidadas…
→ O simplemente errores de carga que han dejado artículos huérfanos.

En este artículo te muestro cómo identificar rápidamente esos productos en WooCommerce usando una simple consulta SQL, sin necesidad de instalar plugins o revisar manualmente cada producto.

¿Por qué es importante identificar productos sin ventas?

  • 🧹 Optimiza el catálogo: quita ruido a los compradores.
  • 💡 Detecta errores de carga: sin imágenes, sin precios, mal asignados.
  • 🧠 Decide con datos: qué promocionar, qué eliminar, qué revisar.
  • 💸 Evita pagar más por recursos innecesarios (hosting, caché, etc.)

Requisitos

  • Acceso a phpMyAdmin o a tu base de datos MySQL.
  • WooCommerce funcionando.
  • Backup previo de tu base de datos (si vas a hacer cambios).

Consulta SQL: Detectar productos nunca vendidos

💡 Versión básica

SELECT p.ID, p.post_title, pm.meta_value AS sku
FROM wp_posts p
LEFT JOIN wp_woocommerce_order_items oi ON oi.order_item_name = p.post_title
LEFT JOIN wp_postmeta pm ON pm.post_id = p.ID AND pm.meta_key = '_sku'
WHERE p.post_type = 'product'
AND p.post_status = 'publish'
AND oi.order_item_id IS NULL
LIMIT 100;

 ¿Qué hace esta consulta?

  • Busca todos los productos publicados (post_type = ‘product’ y status = publish).
  • Revisa si algún pedido los ha incluido (usando el nombre del producto).
  • Si no aparecen en ningún pedido (order_item_id IS NULL), los considera no vendidos.
  • Devuelve su ID, título y SKU.

Versión más precisa: usando order_item_meta para SKU

Si quieres más precisión (ya que los nombres pueden cambiar o repetirse), usa esta versión basada en SKU:

SELECT p.ID, p.post_title, pm.meta_value AS sku
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON pm.post_id = p.ID AND pm.meta_key = '_sku'
LEFT JOIN wp_woocommerce_order_itemmeta oim ON oim.meta_value = pm.meta_value AND oim.meta_key = '_product_id'
WHERE p.post_type = 'product'
  AND p.post_status = 'publish'
  AND oim.meta_id IS NULL
  AND pm.meta_value IS NOT NULL
ORDER BY p.post_date DESC
LIMIT 100;

¿Y luego qué hago con esta información?

  1. Exporta estos productos a un CSV para analizarlos.
  2. Revisa:
    • ¿Tienen imágenes?
    • ¿Precio competitivo?
    • ¿Categoría bien asignada?
    • ¿Buen SEO (título, descripción)?
  3. Decide:
    • ¿Los elimino?
    • ¿Los agrupo en una promo?
    • ¿Los oculto temporalmente?
    • ¿Los mejoro visualmente?

Ampliaciones de la consulta

Ver solo productos con stock

AND EXISTS (
SELECT 1 FROM wp_postmeta pm2
WHERE pm2.post_id = p.ID
   AND pm2.meta_key = '_stock'
   AND pm2.meta_value > 0
)

Filtrar por fecha de creación (últimos 12 meses)

AND p.post_date > NOW() - INTERVAL 12 MONTH

💡 Consejos prácticos

  • A veces los productos no vendidos tienen errores de carga: sin imagen, sin descripción o sin categoría.
  • Puedes usar esta info para lanzar campañas específicas:
    “Liquidación de productos olvidados”.
  • Cuidado con productos de temporada: quizá no han vendido aún, pero tienen sentido más adelante.

Conclusión

Saber qué productos nunca han generado una venta es clave para optimizar tu tienda.
No solo te ayuda a limpiar el catálogo, también te da pistas sobre errores en la carga, productos mal presentados o stock que nunca debería haber entrado.

Y lo mejor: puedes obtener esta info con una simple consulta SQL.

¿Quieres que te ayudemos a automatizar esto?
¿Te gustaría que esta consulta genere un informe mensual por correo con productos sin ventas?

👉 Escríbenos y lo preparamos para tu WooCommerce.

Ir al contenido