JSON-LD JobPosting: як знаходити вакансії раніше за агрегатори
Чимало кар'єрних сторінок додають машинозчитуваний опис вакансії у форматі JSON-LD. Він допомагає зрозуміти дані в джерелі й стежити за змінами, але не гарантує, що пошуковик або агрегатор відразу проіндексує роль.
На багатьох сторінках вакансій поруч із видимим HTML є машинозчитуваний опис: назва ролі, місце роботи, дата публікації, зарплата та роботодавець. Зазвичай це JSON-LD JobPosting, вбудований у тег script. Він є не всюди й заповнюється з різною повнотою, тому сприймайте його як корисне джерело для перевірки, а не як обов'язкову частину кожної кар'єрної сторінки.
Розуміння цього формату корисне з двох причин. По-перше, стає зрозуміло, як пошуковик зчитує структуровані відомості зі сторінки компанії. По-друге, технічним фахівцям він дає чистіший шлях для моніторингу, коли дані доступні. Та все одно доведеться обробляти відсутні, некоректні або завантажені через JavaScript дані.
Що це насправді
JSON-LD (JSON for Linked Data) дає змогу вбудовувати машинозчитувані дані у вебсторінку. Схема JobPosting, описана на schema.org/JobPosting, належить до типів, які Google використовує для отримання структурованої інформації з інтернету.
Google вказує структуровані дані JobPosting як один зі способів отримати право на показ у сервісі пошуку вакансій, але відповідність вимогам не гарантує показу. Багато сучасних систем відстеження кандидатів, зокрема Workday, Greenhouse, Lever, Ashby, Phenom та iCIMS, публікують структуровані дані принаймні на частині відкритих сторінок вакансій. Реалізація все одно залежить від платформи й налаштувань роботодавця.
Як це виглядає
Якщо відкрити вихідний код типової вакансії на Greenhouse і знайти application/ld+json, можна побачити приблизно такий блок:
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Senior Backend Engineer",
"description": "We're looking for...",
"datePosted": "2026-05-12",
"validThrough": "2026-08-12",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "Acme",
"sameAs": "https://acme.example"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "London",
"addressCountry": "GB"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "GBP",
"value": {
"@type": "QuantitativeValue",
"minValue": 90000,
"maxValue": 130000,
"unitText": "YEAR"
}
}
}
Два корисні поля: datePosted, де записано вказану в структурованих даних дату публікації, та baseSalary, якщо роботодавець додав зарплату. Будь-яке з них може бути відсутнім, застарілим або погано відформатованим, тому звіряйтеся з видимим текстом оголошення.
Чому це важливо під час пошуку роботи
Є три практичні причини.
1. Ви бачите дату публікації, указану роботодавцем
Поле datePosted показує, яку дату оголошує сторінка роботодавця. Часто це корисніше за відносну позначку платформи на кшталт «опубліковано 3 дні тому». Але поле не безпомилкове: роботодавець може оновити, пропустити або повторно використати дату, а агрегатори отримують оголошення різними шляхами. У нашому порівнянні джерела й агрегатора це поле вважається свідченням, яке треба перевірити, а не безумовно точним годинником.
2. Ви розумієте, як пошуковик може прочитати сторінку вакансії
Структуровані дані дають пошуковику прямий опис ролі, коли він обходить сторінку. Час обходу, індексація та показ не гарантовані, а інші платформи можуть отримувати або обробляти вакансії інакше. У нашому розборі затримки агрегаторів пояснено, що на практиці означає побачити роль пізніше, ніж вона з'явилася в першоджерелі.
3. Ви отримуєте чистий спосіб самостійно стежити за компаніями
Якщо ви створюєте власний моніторинг, коректний JSON-LD зручний як перше джерело: поля вже структуровані. Але запасні варіанти все одно потрібні. Блок може бути відсутнім, некоректним, несподівано вкладеним або завантажуватися після початкового HTML. Шукайте <script type="application/ld+json">, перевіряйте знайдене й передбачте роботу сторінки без нього.
Як перевірити дані самостійно
У будь-якому браузері:
- Відкрийте сторінку вакансії, наприклад на Greenhouse або Lever.
- Клацніть правою кнопкою миші й виберіть «Переглянути вихідний код сторінки» або натисніть Ctrl+U / Cmd+U.
- Знайдіть
application/ld+json. - Ви побачите один або кілька JSON-блоків. Дані ролі містяться в блоці з
"@type": "JobPosting".
Google Rich Results Test допомагає знайти помилки у структурованих даних і проблеми з відповідністю вимогам. Успішна перевірка не гарантує, що Google проіндексує або покаже вакансію.
Чому самої назви ATS недостатньо
- Сторінки, розміщені в ATS: Greenhouse, Lever, Ashby, Workday, Phenom, iCIMS і SmartRecruiters можуть публікувати дані JobPosting, але підтримка залежить від шаблону й налаштувань роботодавця.
- Сторінки, відтворені JavaScript: структуровані дані можуть з'явитися лише після виконання коду сторінки й бути відсутніми у вихідній відповіді.
- Власні кар'єрні сайти: реалізація залежить від роботодавця. Розмір компанії чи впізнаваність бренду нічого не доводять.
- Будь-яка платформа: перевіряйте саме те оголошення, за яким плануєте стежити. Очікування на рівні платформи не підтверджує, що конкретна сторінка містить коректні дані.
Наш повний довідник з ATS пояснює, як визначити систему, якою користується компанія.
Мінімальний приклад власного моніторингу
Для технічних читачів нижче показано загальну форму Python-скрипту, який стежить за однією кар'єрною сторінкою й шукає нові записи JSON-LD JobPosting:
import json, re, requests, hashlib
from bs4 import BeautifulSoup
def fetch_postings(url):
html = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}).text
soup = BeautifulSoup(html, "html.parser")
out = []
for tag in soup.find_all("script", type="application/ld+json"):
try:
data = json.loads(tag.string)
except (json.JSONDecodeError, TypeError):
continue
items = data if isinstance(data, list) else [data]
for item in items:
if item.get("@type") == "JobPosting":
out.append(item)
return out
# Run on a schedule; diff against previous run; email new entries.
Робочий моніторинг також має давати раду сторінкам, відтвореним JavaScript, збоям запитів, обмеженням частоти, дублікатам і змінам схем. Це помітно складніше за приклад вище. Наш посібник з моніторингу кар'єрних сторінок порівнює цей підхід з альтернативами.
Що це означає для вашого пошуку
Якщо роботодавець публікує коректні структуровані дані, вони доступні на вихідній сторінці до або одночасно з копіями, які пізніше з'являються деінде. Це не доводить, коли інша платформа отримала вакансію. Натомість це привід звіритися зі сторінкою роботодавця, а не вважати часову позначку агрегатора початковим годинником оголошення.
Практичний висновок: не покладайтеся на один канал пошуку. Перед відгуком перевіряйте канонічну сторінку роботодавця, а для власного моніторингу використовуйте структуровані дані. Наше порівняння способів отримувати сповіщення розбирає їхні компроміси.
Що робити з цією інформацією
JSON-LD JobPosting — один із корисних шарів сучасного пошуку вакансій. Якщо компанія публікує його коректно, пошуковики й інструменти моніторингу можуть читати однакові заявлені поля. Але сама наявність даних не показує, коли інша платформа отримала або відобразила роль.
Для кандидата технічні деталі менш важливі за першоджерело: перевіряйте роль на сторінці роботодавця й відгукуйтеся, поки відповідна вакансія свіжа. Якщо знайти її до того, як сформується черга кандидатів або короткий список, ви отримуєте реальну перевагу в часі та видимості. Під час самостійного моніторингу спершу шукайте коректний JSON-LD, а якщо його немає або він неповний, обережно переходьте до запасного способу.