Como crear un portal de empleo y gestion de candidaturas con Drupal
El reclutamiento ya no vive en los anuncios de prensa. Vive en URLs, formularios y dashboards. Los datos de InfoJobs lo confirman: el 92% de las ofertas de empleo en España se publican exclusivamente en canales digitales. Y hay un segundo número que pesa más en el comité de dirección: las empresas que operan su propio portal recortan hasta un 35% el coste por contratación frente a quienes dependen solo de plataformas externas. Drupal 10 entrega la flexibilidad para montar ese portal con gestión de candidaturas integrada, automatización del flujo y una experiencia de uso que mira de frente a cualquier SaaS especializado.
Vamos al grano. En esta guía detallamos la arquitectura técnica, los módulos imprescindibles y las configuraciones concretas para levantar un job board profesional sobre Drupal.
Arquitectura de contenido: tipos de contenido y taxonomias
Antes del primer módulo, el modelo de datos. Una mala estructura ahora se paga cara dos años después, cuando hay 4.000 ofertas cerradas y nadie sabe filtrarlas. En Drupal 10, esa estructura se traduce en content types y vocabularios de taxonomía bien definidos.
Tipo de contenido: Oferta de empleo
Crea un content type llamado job_posting con los siguientes campos:
- Titulo del puesto (field_job_title): campo de texto plano, obligatorio.
- Descripcion del puesto (body): campo de texto con formato largo, con CKEditor 5 configurado para listas y encabezados.
- Ubicacion (field_location): referencia a taxonomia
locationscon terminos jerarquicos (Comunidad Autonoma > Provincia > Ciudad). - Tipo de contrato (field_contract_type): lista de opciones (Indefinido, Temporal, Practicas, Freelance, Media jornada).
- Rango salarial (field_salary_range): dos campos numericos (minimo y maximo) en euros brutos anuales.
- Departamento (field_department): referencia a taxonomia
departments. - Fecha de publicacion y Fecha de cierre (field_publish_date, field_closing_date): campos de tipo fecha.
- Estado de la oferta (field_job_status): lista (Abierta, En proceso, Cerrada, Cubierta).
- Empresa (field_company): referencia a entidad si el portal es multi-empresa, o campo oculto si es corporativo.
Tipo de contenido: Perfil de candidato
Si los candidatos pueden mantener un perfil persistente, suma un content type candidate_profile vinculado al usuario. Dos rutas: el módulo Profile, o un campo entity reference al user. Elige según convenga al equipo de mantenimiento.
- Nombre completo, Email de contacto, Telefono.
- CV adjunto (field_cv): campo de archivo que acepte PDF y DOCX, con limite de 5 MB.
- Experiencia y Formacion: campos de texto largo o, mejor aun, paragraphs con el modulo Paragraphs para estructurar multiples entradas.
- Habilidades (field_skills): referencia a taxonomia
skills, con widget de autocompletado y seleccion multiple.
Formularios de candidatura con Webform
Webform (drupal.org/project/webform) es la pieza central de la gestión de candidaturas. La tentación inicial es crear un content type para cada solicitud. Mal camino. Webform permite diseñar formularios flexibles sin escribir código y persistir cada envío como una entidad consultable, exportable y conectable.
Configuracion del formulario de candidatura
Instala Webform y sus submodulos:
drush en webform webform_ui webform_node webform_attachment -y.Crea un webform llamado
job_applicationcon estos elementos:- Nombre completo (textfield, obligatorio).
- Email (email, obligatorio, con validacion).
- Telefono (tel).
- Puesto al que aplica (hidden): se prerrellena automaticamente con el titulo de la oferta mediante token
[current-page:title]o un campo computed. - Carta de presentacion (textarea, maximo 2000 caracteres).
- CV adjunto (managed_file, extensiones permitidas: pdf docx, tamaño maximo: 5 MB).
- Aceptacion RGPD (checkbox, obligatorio, con enlace a la politica de privacidad).
Configura los handlers de Webform:
- Email handler: envia un correo de confirmacion al candidato y otro de notificacion al reclutador con los datos del envio y el CV adjunto.
- Remote post handler: si necesitas enviar los datos a un ATS externo via API REST.
Vincular el formulario a cada oferta
Dos opciones limpias. La primera: el módulo Webform Node Element, que inyecta el formulario en la plantilla del content type job_posting. La segunda: el webform como bloque en la región adecuada. En ambos casos, el campo hidden y los tokens de Drupal asocian el envío a la oferta sin intervención humana. ¿Quieres trazabilidad nativa? Añade un entity_reference en el webform para vincular cada submission directamente al nodo de la oferta.
Vistas y listados con Views
Views vive en el core de Drupal 10 y resuelve los listados con filtros avanzados sin una línea de código.
Vista principal del portal de empleo
Crea una vista de tipo Content, filtrada por content type job_posting y estado Abierta. Configura:
- Filtros expuestos: ubicacion (select jerarquico con Better Exposed Filters), tipo de contrato (checkboxes), departamento (select), rango salarial (slider con el modulo Views Exposed Form Widgets).
- Ordenacion: por fecha de publicacion descendente como predeterminado, con opcion de ordenar por relevancia si integras Search API.
- Formato de resultado: tarjetas (cards) con titulo, ubicacion, tipo de contrato y fecha, usando Views Bootstrap o un template Twig personalizado.
- Paginador: Ajax pager para navegacion sin recarga completa.
Panel del reclutador: candidaturas recibidas
Crea una vista de tipo Webform Submissions filtrada por el formulario job_application. Columnas: nombre del candidato, email, fecha de envío, puesto al que aplica y un enlace directo para descargar el CV. Suma filtros expuestos por puesto y por fecha. Ese panel se vuelve la cabina del reclutador.
Con el módulo Webform Views integras las submissions dentro de Views y aplicas todo el arsenal: filtrado, ordenación y exportación a CSV o Excel con Views Data Export. Operativa diaria resuelta.
Roles de usuario y permisos
Drupal 10 permite definir roles granulares que se adaptan perfectamente a un portal de empleo:
- Candidato (candidate): puede registrarse, crear y editar su perfil, enviar candidaturas, ver el estado de sus envios.
- Reclutador (recruiter): puede crear, editar y cerrar ofertas de empleo, ver y gestionar las candidaturas recibidas para sus ofertas, descargar CVs, cambiar el estado de las candidaturas.
- Administrador de RRHH (hr_admin): acceso completo a todas las ofertas y candidaturas, puede gestionar usuarios reclutadores, exportar datos, acceder a informes.
Configura los permisos en /admin/people/permissions. Si necesitas separar ofertas por departamento o filial, monta el módulo Group para que cada reclutador solo vea las candidaturas de su área. Aislamiento limpio, sin scripts custom.
Flujos de trabajo automatizados con ECA y Rules
ECA (Event-Condition-Action) es el sucesor de Rules en Drupal 10. Automatiza procesos sin código y sustituye horas de operativa manual:
- Cierre automatico de ofertas: cuando
field_closing_datellega a la fecha actual, ECA cambiafield_job_statusa "Cerrada" y despublica el nodo. - Notificacion al candidato: cuando el reclutador cambia el estado de una candidatura (por ejemplo, de "Recibida" a "En proceso" o "Descartada"), ECA envia un email personalizado al candidato.
- Alerta de nueva candidatura: cada vez que se recibe un webform submission del formulario
job_application, ECA notifica al reclutador asignado. - Recordatorio de ofertas sin actividad: si una oferta lleva 15 dias sin recibir candidaturas, ECA envia un aviso al reclutador para que revise la descripcion o amplie la difusion.
Instala ECA con drush en eca eca_base eca_content eca_user -y y modela los procesos desde la interfaz gráfica en /admin/config/workflow/eca. Sin tocar PHP.
Integracion con sistemas ATS externos
La mayoría de organizaciones ya tienen un Applicant Tracking System operativo: Greenhouse, Lever, Teamtailor, Factorial. Drupal convive con ellos en tres modos:
- Webform Remote Post: envia los datos de cada candidatura como JSON a la API del ATS. Configura el handler con la URL del endpoint, las cabeceras de autenticacion (API key o Bearer token) y el mapeo de campos.
- Migrate API: para importar ofertas desde el ATS al portal Drupal, usa el modulo Migrate Plus con un source plugin JSON o XML que lea la API del ATS y cree nodos
job_postingautomaticamente. - Modulo Feeds: alternativa mas visual a Migrate para importaciones periodicas desde feeds RSS o JSON.
Patrón habitual: las ofertas nacen en el ATS, viajan a Drupal para la web pública, y las candidaturas recibidas en Drupal regresan al ATS para que RRHH gestione todo desde una única herramienta. Una sola fuente de verdad, dos canales.
SEO para ofertas de empleo: Schema.org JobPosting
Google for Jobs solo indexa ofertas con datos estructurados JobPosting. Es la diferencia entre aparecer en el carrusel destacado de Google o no existir. El impacto es medible: hasta multiplicar por 3 la visibilidad de tus ofertas en resultados de búsqueda.
Usa el modulo Schema.org Metatag o el modulo Schema.org Blueprints para añadir automaticamente el markup JSON-LD a cada nodo job_posting. Los campos obligatorios del schema son:
title: titulo del puesto.description: descripcion completa.datePosted: fecha de publicacion.validThrough: fecha de cierre.hiringOrganization: nombre y logo de la empresa.jobLocation: direccion conaddressLocality,addressRegion,addressCountry.employmentType: FULL_TIME, PART_TIME, CONTRACTOR, etc.baseSalary(recomendado): rango salarial con moneda.
Cierra el bloque SEO configurando Pathauto para generar URLs limpias del tipo /empleo/[field_location]/[field_job_title] y activa el módulo XML Sitemap para incluir todas las ofertas abiertas en el sitemap. Pequeños ajustes, ganancia grande en rastreo.
Busqueda avanzada con Search API y Solr
Si tu portal supera las 500 ofertas activas, la búsqueda nativa de Drupal se queda corta. Lentitud, relevancia pobre, sin facetas reales. Search API con backend Solr o Elasticsearch resuelve el problema:
- Busqueda full-text con relevancia ponderada: el titulo del puesto pesa mas que la descripcion.
- Facetas (Facets module): filtros dinamicos por ubicacion, tipo de contrato, rango salarial, departamento, con contadores en tiempo real.
- Autocompletado (Search API Autocomplete): sugerencias mientras el usuario escribe.
- Busqueda por sinonimos: "programador" encuentra tambien "desarrollador" y "developer".
Search API + Facets + Solr eleva el portal a una experiencia de búsqueda equiparable a LinkedIn o InfoJobs. Mismo estándar, sin dependencia de terceros.
Lo que un portal de empleo en Drupal aporta frente a soluciones SaaS
Construir el portal en Drupal en lugar de alquilar Teamtailor o Lever cambia la ecuación en cuatro frentes: propiedad total de los datos de candidatos (crítico para cumplimiento RGPD), personalización ilimitada de los flujos de trabajo, integración nativa con la web corporativa para coherencia de marca, y la eliminación de cuotas mensuales por volumen de ofertas o candidaturas que en plataformas SaaS pueden superar los 300 euros al mes para empresas medianas. Multiplica esa cifra por 36 meses y el caso de negocio se construye solo.
Si necesitas diseñar un portal de empleo adaptado a las necesidades de tu organizacion, contacta con nuestro equipo de Drupal para definir la arquitectura, los modulos y la integracion con tus herramientas de RRHH actuales.
Artículos relacionados
Preguntas frecuentes
Las dudas más comunes. Si la tuya no está, pregúntanos
En Tangram no queremos que la información pase por una cadena interminable de intermediarios donde se pierden los detalles importantes.
Contarás con un interlocutor que coordinará la comunicación y trasladará las decisiones al equipo responsable de tu proyecto.
Cuando sea necesario profundizar en cuestiones de estrategia, diseño o tecnología, podremos involucrar a los especialistas correspondientes.
Así tendrás una comunicación organizada, sin necesidad de gestionar personalmente a todos los profesionales que intervienen.
Queremos que tengas acceso al conocimiento de un equipo especializado, sin sufrir la complejidad de coordinarlo.
No tendrás que averiguar a quién escribir cada vez que tengas una duda.
En Tangram contemplamos la figura del Account Manager como interlocutor principal, encargado de acompañarte durante el proyecto, coordinar la comunicación y facilitar el seguimiento de las decisiones.
Nuestra metodología incluye reuniones de revisión, canales de comunicación y herramientas para que puedas participar en el trabajo.
La organización concreta, la frecuencia de las reuniones y los canales disponibles se establecerán según el proyecto contratado.
Lo importante es que sepas con quién hablar, en qué punto está tu proyecto y qué decisiones necesitan tu participación.
Sí, podemos valorar una colaboración con los profesionales que ya trabajan en tu empresa.
No siempre tiene sentido sustituir un equipo que conoce bien tu negocio. En muchas situaciones, lo más útil es complementar sus conocimientos con especialistas en determinadas áreas.
Podemos estudiar qué responsabilidades asumiría Tangram, cuáles mantendría tu equipo y cómo coordinar las decisiones para evitar duplicidades.
La forma concreta de colaboración dependerá de la organización, las herramientas y las necesidades del proyecto.
No se trata de reemplazar lo que ya funciona, sino de aportar el conocimiento que necesitas para llegar más lejos.
No tienes por qué cambiar de proveedor para explorar una colaboración con Tangram.
Durante nuestra trayectoria hemos trabajado con agencias y consultoras, participando en proyectos en los que cada empresa asumía una parte diferente del trabajo.
Esa experiencia nos permite comprender la importancia de definir responsabilidades y coordinar a los profesionales implicados.
Podemos valorar una colaboración para cubrir necesidades concretas que tu proveedor actual no ofrece o para reforzar determinadas áreas.
Si tienes una relación profesional que funciona, no queremos que la rompas sin motivo. Queremos encontrar dónde podemos aportar valor.
La confidencialidad es especialmente importante cuando hablamos de nuevas ideas de negocio, información económica, estrategias comerciales o desarrollos tecnológicos.
En Tangram tenemos experiencia trabajando en proyectos sujetos a acuerdos de confidencialidad, motivo por el que no podemos mostrar públicamente muchos de los trabajos en los que hemos participado.
Si tu proyecto requiere un acuerdo de confidencialidad (NDA) antes de compartir información sensible, podemos revisar sus condiciones y acordar cómo proteger esa información antes de entrar en los detalles.
Entendemos que la confianza empieza por respetar lo que todavía no quieres hacer público.