Operaciones de reclutamiento

Cómo funciona realmente un feed XML de Indeed y JSON-LD de Google para Empleos

ClarityHire Team(Editorial)5 min read

Los dos canales de distribución principales

Cuando publicas un trabajo en Indeed o Google para Empleos, tienes dos opciones:

  1. Publicar directamente — inicia sesión en Indeed.com, rellena un formulario, haz clic publicar
  2. Sindicar vía feed — proporciona tu propio listado de trabajo en un formato legible por máquina (XML o JSON-LD); el tablero de trabajo extrae de tu feed e lo indexa

La publicación directa es fácil pero limitada. La sindicación es un poco más técnica pero te da control preciso: puedes actualizar el estado, salario, o requisitos de un trabajo en tu sistema, y se refleja en Indeed dentro de horas sin reingreso de datos.

La mayoría de equipos de contratación serios usan feeds.

El formato XML de Indeed

Indeed acepta un feed XML propietario. Aquí está la estructura:

<?xml version="1.0" encoding="UTF-8"?>
<source>
  <publisher>Nombre de Tu Empresa</publisher>
  <publisherurl>https://tuempresa.com</publisherurl>
  <lastBuildDate>2026-05-21T10:00:00Z</lastBuildDate>
  <job>
    <title>Ingeniero Backend Sénior</title>
    <date>2026-05-21T08:00:00Z</date>
    <repourl>https://tuempresa.com/jobs/senior-backend-engineer</repourl>
    <description><![CDATA[
      <p>Estamos contratando un ingeniero backend sénior...</p>
      <ul>
        <li>5+ años de experiencia en Python/Go</li>
      </ul>
    ]]></description>
    <salary>120000</salary>
    <hiringOrganization>Tu Empresa</hiringOrganization>
    <jobLocation>
      <countryName>US</countryName>
      <stateName>California</stateName>
      <cityName>San Francisco</cityName>
    </jobLocation>
    <employmentType>FULL_TIME</employmentType>
    <jobCategory>ENGINEER</jobCategory>
  </job>
</source>

Elementos clave:

  • <title>: Título del trabajo (requerido)
  • <description>: Descripción completa del trabajo. Envuelve en <![CDATA[...]]> si contiene HTML o caracteres especiales. No pongas HTML dentro del CDATA —mantenlo texto limpio o agrega el marcado HTML.
  • <salary>: Salario base en USD. Algunas regiones aceptan rangos de salario, pero Indeed indexa principalmente valores únicos.
  • <jobLocation>: Ciudad, estado, país. Si es remoto, omite o establece ciudad a "Remote."
  • <date>: Cuándo fue publicado el trabajo (formato ISO 8601). Indeed lo usa para priorizar publicaciones más nuevas.
  • <repourl>: Enlace de vuelta a tu página de carreras para ese trabajo específico. Cuando alguien hace clic "Solicitar," llegan aquí.
  • <employmentType>: FULL_TIME, PART_TIME, CONTRACT, TEMPORARY

Google para Empleos: JSON-LD

Google tiene un formato diferente llamado datos estructurados JobPosting en JSON-LD. Esto se incrusta en tu HTML como una etiqueta <script type="application/ld+json">.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "Ingeniero Backend Sénior",
  "description": "Estamos contratando un ingeniero backend sénior...",
  "identifier": {
    "@type": "PropertyValue",
    "name": "Tu Empresa",
    "value": "job_123"
  },
  "datePosted": "2026-05-21",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "Tu Empresa",
    "sameAs": "https://tuempresa.com",
    "logo": "https://tuempresa.com/logo.png"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "123 Main St",
      "addressLocality": "San Francisco",
      "addressRegion": "CA",
      "postalCode": "94105",
      "addressCountry": "US"
    }
  },
  "baseSalary": {
    "@type": "PriceSpecification",
    "currency": "USD",
    "minValue": 120000,
    "maxValue": 160000,
    "unitText": "YEAR"
  },
  "employmentType": "FULL_TIME",
  "validThrough": "2026-06-21"
}
</script>

Campos críticos para que Google indexe:

  • datePosted: Debe estar presente y ser reciente. Google desclasifica publicaciones antiguas.
  • hiringOrganization: Nombre de empresa y (opcionalmente) logo. Usado para el fragmento de marca de empleador.
  • baseSalary: Rango de salario (min/max). Opcional pero mejora CTR.
  • validThrough: Fecha de cierre de trabajo. Google remueve publicaciones después de esta fecha.
  • jobLocation: Dirección postal completa o remota.

Trampas CDATA y caracteres especiales

En XML, caracteres especiales como <, >, y & rompen el feed. Envuelve tu descripción en <![CDATA[...]]>:

<description><![CDATA[
Buscamos un desarrollador con 5+ años de experiencia.
Experiencia con: Java, Spring Boot, Docker.
]]></description>

Dentro de CDATA, puedes incluir HTML limpio:

<description><![CDATA[
<p>Buscamos un desarrollador con 5+ años de experiencia.</p>
<ul>
  <li>Java 8+</li>
  <li>Spring Boot</li>
  <li>Docker</li>
</ul>
]]></description>

Sin CDATA, las etiquetas <p> y <li> rompen el analizador XML. El validador de feed de Indeed rechazará todo el feed.

Codificación de salario

XML de Indeed: Solo valor de salario único. Si tienes un rango, usa el punto medio o el extremo bajo.

<salary>140000</salary>

Google para Empleos: Soporta rangos:

"baseSalary": {
  "@type": "PriceSpecification",
  "currency": "USD",
  "minValue": 120000,
  "maxValue": 160000,
  "unitText": "YEAR"
}

Si tu trabajo es por hora, usa:

"baseSalary": {
  "@type": "PriceSpecification",
  "currency": "USD",
  "minValue": 45,
  "maxValue": 65,
  "unitText": "HOUR"
}

Frecuencia de actualización y actualizaciones

Una vez que hayas configurado una URL de feed, Indeed la rastrea periódicamente (usualmente diariamente, a veces más frecuentemente si los trabajos cambian a menudo). Cuando un trabajo cierra, remuerelo del feed o establece una fecha de cierre. Indeed lo desindexará automáticamente.

Google para Empleos rastrea las páginas HTML donde incrusta marcado JSON-LD de JobPosting. Cada vez que una candidatura visita tu página de trabajo, el rastreador de Google la indexa. Si remueves el marcado JSON-LD, el trabajo desaparece de Google para Empleos dentro de días.

Validación y depuración

Para XML de Indeed:

  • Usa el Validador de Feed de Indeed para probar tu feed antes de conectarlo
  • Errores comunes: CDATA malformado, campos requeridos faltantes, formato de fecha inválido

Para Google para Empleos:

Cómo ClarityHire genera feeds

ClarityHire genera automáticamente tanto un feed XML de Indeed en /api/jobs/feed.xml como una plantilla JSON-LD de Google para Empleos que incrustas en tus páginas de trabajo en /careers/jobs/[job-id].

Cuando actualizas un trabajo (título, salario, descripción), los feeds se actualizan automáticamente. Los trabajos cerrados se removen de los feeds dentro de 2 horas. El sistema respeta el flag de visibility de tu trabajo: los trabajos en borrador no aparecen en feeds.

TL;DR

Indeed espera XML con descripciones envueltas en CDATA, salario, y ubicación. Google para Empleos espera marcado JSON-LD en tu HTML con datePosted, validThrough, y rangos de salario. Ambos usan formatos de fecha ISO (YYYY-MM-DD o timestamps ISO 8601). CDATA es tu amigo cuando envuelves descripciones HTML en XML. Valida antes de desplegar. Auto-remueve trabajos cerrados de feeds. Prueba con la Prueba de Resultados Ricos de Google y el validador de Indeed.

Una vez configurado, tus trabajos se distribuyen a Indeed y Google sin reingreso. La configuración toma un día; el apalancamiento en curso es inmenso.

integración de tablero de trabajofeed xmlgoogle para empleosjson-ldpublicación de trabajo

Artículos relacionados