# Prueba 1 --- url: https://cursoseomurcia.com/prueba-1/ date: 2025-09-09 author: cursoseo1 --- `); alert('✅ Ventana de exportación abierta!\n\n' + '📋 El CSV está seleccionado automáticamente\n' + '⌨️ Presiona Ctrl+C para copiar\n' + '📊 Pega en Excel o Google Sheets'); } else { // Fallback si no se puede abrir ventana alert('❌ No se pudo abrir ventana de exportación.\n\n' + 'CSV generado:\n\n' + csvContent.substring(0, 500) + '...\n\n' + 'Copia este contenido manualmente.'); } } catch (error) { console.error('Error en exportación:', error); alert('❌ Error exportando: ' + error.message); } }; const getIntentColor = (intent) => { const colors = { informational: 'bg-blue-100 text-blue-800', commercial: 'bg-green-100 text-green-800', transactional: 'bg-purple-100 text-purple-800', mixed: 'bg-orange-100 text-orange-800', manual: 'bg-indigo-100 text-indigo-800', general: 'bg-gray-100 text-gray-800' }; return colors || 'bg-gray-100 text-gray-800'; }; const getAllKeywords = () => { return )]; }; return ( {/* Header */} # Keyword Clustering AI Agrupa automáticamente tus keywords por intención de búsqueda y temática usando algoritmos de NLP avanzados {/* Panel de entrada */} ## Cargar Keywords Subir archivo CSV/TXT o Pegar keywords (una por línea) setInputText(e.target.value)} placeholder="como hacer pan receta pan casero comprar harina mejor harina para pan..." className="w-full h-32 p-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-indigo-500 focus:border-transparent resize-none" /> Cargar Keywords ### Configuración Tamaño mínimo del cluster: {minClusterSize} setMinClusterSize(parseInt(e.target.value))} className="w-full" /> Keywords que no formen clusters del tamaño mínimo irán a "Keywords Individuales" {/* Panel principal */} {keywords.length > 0 && ( {keywords.length} Keywords {clusters.length} Clusters {clusters.reduce((sum, c) => sum + c.size, 0)} Agrupadas )} {keywords.length > 0 && ( {isProcessing ? ( Procesando... ) : ( Generar Clusters )} {clusters.length > 0 && ( setShowModal(true)} className="bg-blue-600 text-white py-3 px-6 rounded-xl hover:bg-blue-700 flex items-center gap-2" > Crear Manual Exportar )} )} {clusters.length > 0 ? ( ### Clusters Generados ({clusters.length}) {clusters.map((clusterItem) => ( setSelectedCluster(selectedCluster === clusterItem.id ? null : clusterItem.id)} > {clusterItem.intent === 'informational' && } {clusterItem.intent === 'commercial' && } {clusterItem.intent === 'transactional' && } {clusterItem.intent === 'mixed' && } {clusterItem.intent === 'manual' && } {clusterItem.intent === 'general' && } #### {clusterItem.name} {clusterItem.intent} {clusterItem.size} keywords {clusterItem.coherence && ( {clusterItem.coherence} )} {clusterItem.isManual && ( { e.stopPropagation(); deleteCluster(clusterItem.id); }} className="text-red-500 hover:text-red-700 p-1 rounded" title="Eliminar cluster" > × )} Vol: {clusterItem.avgSearchVolume.toLocaleString()} Dif: {clusterItem.difficulty}/100 {selectedCluster === clusterItem.id && ( ##### Keywords en este cluster: {clusterItem.keywords.map((keyword, idx) => ( {keyword} ))} ###### Recomendación de contenido: {clusterItem.intent === 'informational' && "Crear contenido educativo como guías, tutoriales o artículos informativos." } {clusterItem.intent === 'commercial' && "Desarrollar páginas de comparación, reviews o landing pages comerciales." } {clusterItem.intent === 'transactional' && "Optimizar páginas de producto, checkout o formularios de contacto." } {clusterItem.intent === 'general' && "Contenido general que puede adaptarse según el contexto específico." } {clusterItem.intent === 'mixed' && "Keywords diversas que no forman un grupo semántico cohesivo. Considera revisarlas individualmente." } {clusterItem.intent === 'manual' && "Cluster creado manualmente. Revisa la coherencia temática y ajusta si es necesario." } )} ))} ) : keywords.length === 0 ? ( ### ¡Comienza tu análisis! Carga tu lista de keywords para generar clusters inteligentes automáticamente ) : null} {/* Modal para crear cluster manual */} {showModal && ( ## Crear Cluster Manual { setShowModal(false); setManualClusterName(''); setSelectedKeywords([]); }} className="text-gray-400 hover:text-gray-600 text-2xl" > × Nombre del cluster setManualClusterName(e.target.value)} placeholder="Ej: Recetas de cocina, Productos deportivos..." className="w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent" /> Seleccionar keywords ({selectedKeywords.length} seleccionadas) {selectedKeywords.length > 0 && ( #### Keywords seleccionadas: {selectedKeywords.map((keyword, idx) => ( {keyword} setSelectedKeywords( selectedKeywords.filter(k => k !== keyword) )} className="text-indigo-600 hover:text-indigo-800 ml-1" > × ))} )} {selectedKeywords.length > 0 && getSuggestedKeywords().length > 0 && ( #### Sugerencias automáticas: {getSuggestedKeywords().map((keyword, idx) => ( { if (!selectedKeywords.includes(keyword)) { setSelectedKeywords(); } }} className="px-2 py-1 bg-green-200 text-green-800 rounded-full text-sm hover:bg-green-300 transition-colors" > + {keyword} ))} )} {getAllKeywords().map((keyword, idx) => ( { if (selectedKeywords.includes(keyword)) { setSelectedKeywords(selectedKeywords.filter(k => k !== keyword)); } else { setSelectedKeywords(); } }} > {keyword} {selectedKeywords.includes(keyword) && ( ✓ )} ))} Crear Cluster ({selectedKeywords.length} keywords) { setShowModal(false); setManualClusterName(''); setSelectedKeywords([]); }} className="px-6 py-3 border border-gray-300 rounded-xl hover:bg-gray-50" > Cancelar )} ); }; export default KeywordClusteringApp; }; ReactDOM.render(, document.getElementById('tsx-app-792-69f40756b9c62')); })();