Tabla de Contenidos


Qué hace que un directorio web funcione

Los directorios web conectan personas con negocios, servicios o recursos. Piensa en Yelp, Doctoralia, Infojobs o directorios de nicho como una guía de restaurantes locales o un directorio de servicios profesionales. El modelo está más que probado y la demanda no desaparece — en cada sector hay una oportunidad para un directorio.

Lo que diferencia a un directorio exitoso de uno que muere en el intento se resume en tres factores: calidad de los datos, experiencia de búsqueda y SEO. Si tus fichas están incompletas, la búsqueda es lenta o Google no puede indexar tus páginas, el directorio fracasa.

Next.js es la herramienta ideal para este tipo de proyectos porque resuelve la tensión fundamental inherente a los directorios: necesitan miles de páginas estáticas optimizadas para SEO (para listados y categorías), pero también requieren funcionalidades dinámicas e interactivas (búsqueda, filtros, mapas, cuentas de usuario). Next.js gestiona ambas necesidades con generación estática para las páginas de listados y Server Components para las funcionalidades dinámicas.

Tipos de sitios de directorio

Directorios de negocios — Listados de empresas locales o por sector. Ingresos a través de listados destacados y publicidad.

Directorios profesionales — Directorios para encontrar médicos, psicólogos, consultores o abogados. Ingresos mediante suscripciones y generación de leads.

Directorios de recursos — Listas curadas de herramientas, software, cursos o conjuntos de datos. Ingresos por enlaces de afiliado y patrocinios.

Directorios marketplace — Listados con capacidad de reserva o compra (modelo Airbnb). Ingresos por comisiones en las transacciones.

Directorios de comunidad — Directorios de miembros para asociaciones, redes de antiguos alumnos u organizaciones.

Elegir la arquitectura adecuada

Estrategia de renderizado

Para un directorio con menos de 50.000 listados, la mejor opción es la generación estática con ISR (Incremental Static Regeneration): genera todas las páginas de listados en el momento del build para tiempos de carga instantáneos y un SEO impecable, usa ISR con una ventana de revalidación de 60 segundos para que las actualizaciones aparezcan en menos de un minuto, y deja que los Server Components gestionen los resultados de búsqueda y las vistas filtradas para que los datos estén siempre frescos.

Para directorios con más de 100.000 listados, lo más conveniente es cambiar a ISR bajo demanda, donde las páginas se generan en la primera visita y se almacenan en caché.

Capa de datos

Nuestra recomendación es PostgreSQL (a través de Supabase o Neon). Gestiona la búsqueda de texto completo de forma nativa con tsvector, las consultas geográficas con PostGIS y los atributos flexibles de los listados con JSONB. Una sola base de datos lo resuelve todo.

Alternativas: Elasticsearch para funcionalidades de búsqueda avanzada, Algolia como solución de búsqueda gestionada, o Meilisearch como alternativa de código abierto autoalojada.

Diseño de base de datos para listados

Tablas principales

listings — La tabla central. Cada listado tiene nombre, slug, descripción, categoría, ubicación (lat/lng), información de contacto, estado y una columna JSONB de metadatos para atributos flexibles.

categories — Categorías jerárquicas mediante una autorreferencia parent_id. Admite categorías anidadas como Salud > Dentistas > Odontología Estética.

locations — Datos de ubicación normalizados: ciudad, provincia/estado, país, código postal y coordenadas. Utiliza el tipo geográfico de PostGIS para la columna de coordenadas.

reviews — Valoraciones de usuarios con puntuación (1-5), texto, referencia al autor y referencia al listado. La puntuación media se almacena directamente en el listado para agilizar las lecturas.

media — Imágenes y documentos adjuntos a los listados. Guarda las URLs, no los archivos. Usa una CDN para la entrega de imágenes.

Atributos flexibles con JSONB

Cada sector tiene campos únicos para sus listados. Un directorio de restaurantes necesita tipo de cocina, rango de precios y horarios. Un directorio de dentistas necesita los seguros médicos aceptados, especialidades y certificaciones. En lugar de crear tablas separadas para cada vertical, usa una columna de atributos JSONB. Esto te permite añadir nuevos campos sin necesidad de migraciones de esquema, sin renunciar a consultas filtradas mediante los operadores JSONB de PostgreSQL.

Búsqueda y filtros que realmente rinden

La búsqueda es la interacción central en un directorio. Si los resultados tardan más de 200 ms en aparecer, los usuarios se van.

Búsqueda de texto completo

La búsqueda de texto completo de PostgreSQL cubre la mayoría de las necesidades de un directorio sin recurrir a servicios externos. Crea una columna tsvector que combine el nombre, la descripción y el texto de la categoría, construye un índice GIN para búsquedas rápidas, usa ts_rank para la puntuación por relevancia y habilita la coincidencia de frases y los operadores booleanos.

Para el autocompletado, crea una vista materializada search_terms aparte con indexación de trigramas (extensión pg_trgm). Esto permite sugerencias instantáneas mientras el usuario escribe, tolerando errores tipográficos.

Filtrado facetado

La clave está en los conteos de filtros precalculados. Cuando un usuario selecciona "Dentistas" en "Madrid", muéstrale cuántos resultados coinciden con cada subfiltro antes de que haga clic. Esto requiere ejecutar consultas de conteo en paralelo, algo que PostgreSQL gestiona de forma eficiente con los índices adecuados.

Integración de mapas y geolocalización

Elegir un proveedor de mapas

Mapbox GL JS — La mejor experiencia para desarrolladores, estilos visuales cuidados y una generosa capa gratuita (50.000 cargas de mapa al mes). Es nuestra recomendación.

Google Maps — Omnipresente, pero costoso a escala.

Leaflet + OpenStreetMap — Completamente gratuito y de código abierto.

Patrones de UX para mapas

  • Agrupa los marcadores cuando el zoom es bajo
  • Actualiza la lista cuando el mapa se desplaza — sincroniza los resultados con el área visible del mapa
  • Resalta al pasar el cursor — cuando el usuario pasa el cursor sobre un listado, destaca su marcador en el mapa
  • En móvil, prioriza la lista — muestra la lista por defecto en dispositivos móviles con un botón para alternar al mapa

Envío de fichas y reclamación de listados

Flujo de envío

Permite a los propietarios de negocios enviar sus fichas a través de un formulario multi-paso: información básica, detalles, medios, verificación y posterior aprobación por parte del administrador antes de la publicación.

Reclamación de listados existentes

Si has precargado el directorio con datos externos, los propietarios necesitarán un mecanismo para reclamar su ficha, con verificación mediante llamada telefónica, tarjeta postal o coincidencia del dominio del correo corporativo. Una vez reclamado, el propietario puede editar su ficha desde un panel de control.

SEO para sitios de directorio

Estructura de URLs

Diseña las URLs pensando tanto en los usuarios como en los motores de búsqueda:

  • /dentistas/ — Página de aterrizaje de categoría
  • /dentistas/madrid/ — Categoría + ciudad
  • /dentistas/madrid/estetica/ — Categoría + ciudad + subcategoría
  • /ficha/clinica-dental-sonrisa — Listado individual

SEO programático

Para un directorio de dentistas que cubre 50 ciudades con 10 especialidades cada una, el resultado son 500 páginas de aterrizaje únicas generadas a partir de plantillas — cada una orientada a una palabra clave de cola larga específica. Este es el verdadero poder del SEO para directorios en Next.js.

Modelos de monetización

Listados destacados — Entre 50 y 500 €/mes. Planes de suscripción — Básico gratuito, premium de pago entre 20 y 100 €/mes. Generación de leads — Entre 5 y 50 € por lead. Publicidad — Anuncios display en páginas de alto tráfico. Licencia de datos — Venta de datos anonimizados del directorio. Afiliación y referidos — Comisiones por reservas.

Rendimiento a escala

Estrategia de caché

Páginas estáticas servidas desde una CDN perimetral, resultados de búsqueda cacheados en Redis durante 60 segundos, teselas de mapa gestionadas por el proveedor e imágenes servidas a través de una CDN con caché agresiva.

Optimización del tiempo de build

Con más de 10.000 páginas de listados, usa ISR bajo demanda en lugar de compilar todas las páginas en cada despliegue, agrupa las páginas por frecuencia de actualización y usa generateStaticParams con paginación para paralelizar la generación.

Preguntas frecuentes

¿Cuántos listados necesito para lanzar un directorio? Empieza con al menos 200-500 listados de calidad en un área geográfica o nicho bien definido. Un directorio con 50 fichas dispersas transmite abandono y espanta a los usuarios.

¿Debería usar WordPress con un plugin de directorio? Los plugins de directorio para WordPress empiezan a flaquear en torno a los 5.000 listados. La experiencia de búsqueda es deficiente, las interacciones con el mapa van lentas y escalar requiere un alojamiento caro. Next.js es más rápido, más personalizable y más económico de alojar en cualquier escala.

¿Cuánto cuesta desarrollar un directorio web? Un directorio personalizado en Next.js puede costar entre 15.000 y 80.000 € dependiendo de la complejidad. Un MVP básico puede desarrollarse en 6-8 semanas.

¿Cómo gestiono los listados duplicados? Implementa la deduplicación en el momento del envío: busca coincidencias por nombre + dirección + número de teléfono. Usa coincidencia aproximada (fuzzy matching) para detectar casi-duplicados.

¿Puedo construir un marketplace de dos lados con este enfoque? Sí. Un directorio se convierte en un marketplace cuando añades la capacidad de reserva o compra. Integra Stripe Connect para gestionar los pagos entre compradores y proveedores.