Операции найма

Как работают Indeed XML Feed и Google for Jobs JSON-LD

ClarityHire Team(Editorial)5 min read

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

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

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

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

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

Формат Indeed XML

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>: Ссылка обратно на вашу страницу карьеры для этой конкретной вакансии. Когда кто-то нажимает «Apply», они приземляются здесь.
  • <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 в течение дней.

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

For Indeed XML:

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

For Google for Jobs:

  • Используйте Google Structured Data Testing Tool или более новый Rich Results Test
  • Проверьте отсутствующий datePosted, неправильные форматы дат или проблемы кодирования строк, подобные CDATA

Как ClarityHire генерирует потоки

ClarityHire автоматически генерирует как Indeed XML-поток на /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объявление вакансии

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

Операции найма

Массовая почта, которая не выглядит как рассылка: шаблоны найма с тегами слияния

Когда отправлять массовые письма для найма, как сделать их личными, паттерны тегов слияния и почему запланированные отправки важнее, чем вы думаете.

ClarityHire Team2026-05-214 min read
Операции найма

Аналитика страницы карьеры: воронка преобразования, которую рекрутеры должны действительно смотреть

Большинство нанимающих команд игнорируют метрики верхней части воронки. Вот воронка, которую вы должны отслеживать: посещения → просмотры вакансий → нажимает применить → отправки → первый ответ.

ClarityHire Team2026-05-216 min read
Операции найма

Уведомления Slack для найма: что отправлять и что отключать

Ловушка перепроизводства уведомлений, какие события пайплайна заслуживают постинга в канал, и как настроить вебхуки, чтобы ваша команда была в курсе без затопления пингами.

ClarityHire Team2026-05-215 min read