Операции рекрутинга

XML-каналы Indeed и Google for Jobs JSON-LD, объяснённые

ClarityHire Team(Editorial)5 min read

Два основных канала распределения

Когда вы размещаете вакансию на Indeed или Google for Jobs, у вас есть два варианта:

  1. Разместить напрямую — войти на Indeed.com, заполнить форму, нажать опубликовать
  2. Синдицировать через канал — предоставить своё объявление о работе в формате, читаемом машиной (XML или JSON-LD); доска объявлений получает данные из вашего канала и индексирует их

Прямое размещение просто, но имеет ограничения. Синдикация немного более техничная, но даёт вам точный контроль: вы можете обновить статус вакансии, зарплату или требования в своей системе, и это отразится на Indeed в течение нескольких часов без повторного введения данных.

Большинство серьёзных команд по найму используют каналы.

Формат XML Indeed

Indeed принимает собственный XML-канал. Вот структура:

<?xml version="1.0" encoding="UTF-8"?>
<source>
  <publisher>Your Company Name</publisher>
  <publisherurl>https://yourcompany.com</publisherurl>
  <lastBuildDate>2026-05-21T10:00:00Z</lastBuildDate>
  <job>
    <title>Senior Backend Engineer</title>
    <date>2026-05-21T08:00:00Z</date>
    <repourl>https://yourcompany.com/jobs/senior-backend-engineer</repourl>
    <description><![CDATA[
      <p>We are hiring a senior backend engineer...</p>
      <ul>
        <li>5+ years Python/Go experience</li>
      </ul>
    ]]></description>
    <salary>120000</salary>
    <hiringOrganization>Your Company</hiringOrganization>
    <jobLocation>
      <countryName>US</countryName>
      <stateName>California</stateName>
      <cityName>San Francisco</cityName>
    </jobLocation>
    <employmentType>FULL_TIME</employmentType>
    <jobCategory>ENGINEER</jobCategory>
  </job>
</source>

Ключевые элементы:

  • <title>: Название вакансии (обязательно)
  • <description>: Полное описание вакансии. Оберните в <![CDATA[...]]> если оно содержит HTML или специальные символы. Не помещайте HTML внутри CDATA — оставьте чистый текст или добавьте разметку HTML.
  • <salary>: Базовая зарплата в USD. Некоторые регионы принимают диапазоны зарплат, но Indeed в основном индексирует отдельные значения.
  • <jobLocation>: Город, область, страна. Если удалённо, либо пропустите, либо установите город как "Remote."
  • <date>: Когда была размещена вакансия (формат ISO 8601). Indeed использует это для приоритизации более новых объявлений.
  • <repourl>: Ссылка обратно на вашу страницу вакансий для этой конкретной работы. Когда кто-то нажимает "Применить", он попадает сюда.
  • <employmentType>: FULL_TIME, PART_TIME, CONTRACT, TEMPORARY

Google for Jobs: JSON-LD

Google использует другой формат, называемый структурированными данными JobPosting в JSON-LD. Это встроено в ваш HTML как тег <script type="application/ld+json">.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "Senior Backend Engineer",
  "description": "We are hiring a senior backend engineer...",
  "identifier": {
    "@type": "PropertyValue",
    "name": "Your Company",
    "value": "job_123"
  },
  "datePosted": "2026-05-21",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "Your Company",
    "sameAs": "https://yourcompany.com",
    "logo": "https://yourcompany.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>

Критические поля для индексации Google:

  • datePosted: Должно быть в наличии и актуальным. Google понижает ранг старых объявлений.
  • hiringOrganization: Название компании и (опционально) логотип. Используется для сниппета бренда работодателя.
  • baseSalary: Диапазон зарплаты (минимум/максимум). Опционально, но улучшает CTR.
  • validThrough: Дата закрытия вакансии. Google удаляет объявления после этой даты.
  • jobLocation: Полный почтовый адрес или удалённо.

Подводные камни CDATA и специальные символы

В XML специальные символы, такие как <, > и &, ломают канал. Оберните описание в <![CDATA[...]]>:

<description><![CDATA[
We are looking for a developer with 5+ years experience.
Experience with: Java, Spring Boot, Docker.
]]></description>

Внутри CDATA вы можете включить обычный HTML:

<description><![CDATA[
<p>We are looking for a developer with 5+ years experience.</p>
<ul>
  <li>Java 8+</li>
  <li>Spring Boot</li>
  <li>Docker</li>
</ul>
]]></description>

Без CDATA теги <p> и <li> нарушат парсер XML. Валидатор канала Indeed отклонит весь канал.

Кодирование зарплаты

Indeed XML: Только одно значение зарплаты. Если у вас есть диапазон, используйте средний показатель или нижний предел.

<salary>140000</salary>

Google for Jobs: Поддерживает диапазоны:

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

Если ваша работа почасовая, используйте:

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

Частота обновления и обновления

После того как вы установили URL канала, Indeed проверяет его периодически (обычно ежедневно, иногда чаще, если вакансии часто меняются). Когда вакансия закрывается, удалите её из канала или установите дату закрытия. Indeed автоматически уберёт её из индекса.

Google for Jobs проверяет HTML страницы, на которых вы встраиваете разметку JobPosting JSON-LD. Каждый раз, когда кандидат посещает вашу страницу вакансии, краулер Google индексирует её. Если вы удалите разметку JSON-LD, вакансия исчезнет из Google for Jobs в течение нескольких дней.

Валидация и отладка

Для Indeed XML:

  • Используйте Валидатор канала Indeed для тестирования вашего канала перед подключением
  • Распространённые ошибки: неправильно сформированный CDATA, отсутствующие обязательные поля, неверный формат даты

Для Google for Jobs:

Как ClarityHire генерирует каналы

ClarityHire автоматически генерирует как XML-канал Indeed по адресу /api/jobs/feed.xml, так и шаблон Google for Jobs JSON-LD, который вы встраиваете на страницы вакансий по адресу /careers/jobs/[job-id].

Когда вы обновляете вакансию (название, зарплата, описание), каналы обновляются автоматически. Закрытые вакансии удаляются из каналов в течение 2 часов. Система соблюдает флаг visibility вашей вакансии: черновые вакансии не появляются в каналах.

TL;DR

Indeed ожидает XML с описаниями, завёрнутыми в CDATA, зарплату и местоположение. Google for Jobs ожидает разметку JSON-LD на вашем HTML с datePosted, validThrough и диапазонами зарплат. Оба используют форматы ISO дат (YYYY-MM-DD или ISO 8601 временные метки). CDATA - это ваш друг при оборачивании описаний HTML в XML. Валидируйте перед развёртыванием. Автоматически удаляйте закрытые вакансии из каналов. Тестируйте с помощью Google Rich Results Test и валидатора Indeed.

После настройки ваши вакансии распределяются на Indeed и Google без повторного ввода. Настройка занимает день; постоянное преимущество огромно.

интеграция с досками объявленийxml каналgoogle for jobsjson-ldобъявление о работе

Похожие статьи