Практично кожна сучасна сторінка вакансій містить структуровані машиночитні дані з описом посади. Розуміння цього формату дає Вам надійний спосіб відстежувати вакансії без розбору сирого HTML і пояснює, чому Google Jobs працює швидше за LinkedIn.
Практично кожна вакансія, яку Ви коли-небудь переглядали, містила приховану версію себе поруч із видимим HTML - чистий, машиночитний опис посади зі структурованими полями для назви, місцезнаходження, дати публікації, діапазону зарплати та роботодавця. Це називається JSON-LD JobPosting, вбудовується як тег script на сторінці, і саме тому Google Jobs показує Вам картку з діапазоном зарплати та позначкою «5 годин тому», поки LinkedIn досі повідомляє, що вакансію було опубліковано «2 дні тому».
Розуміння цього формату дає дві корисні речі. По-перше, воно пояснює, чому одні канали структурно швидші за інші (Google Jobs використовує JSON-LD безпосередньо; LinkedIn - ні). По-друге, воно надає Вам надійний спосіб відстежувати сторінки вакансій компаній, не намагаючись розбирати HTML, який не призначений для розбору.
JSON-LD («JSON for Linked Data») - це спосіб вбудовування машиночитних даних у веб-сторінку. Схема JobPosting, описана на schema.org/JobPosting, - один із десятків типів, які Google використовує для отримання структурованої інформації з інтернету.
Чому кожна компанія генерує ці дані: цього вимагає Google. Якщо вакансія не містить валідного блоку JSON-LD JobPosting, вона не з'являється в Google Jobs, а Google Jobs дедалі частіше стає відправною точкою для пошуку роботи. Тому кожна сучасна ATS (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 (за наявності; вакансії у Великій Британії в рамках нещодавніх ініціатив щодо прозорості та каліфорнійських законів про розкриття зарплат дедалі частіше зобов'язані включати цю інформацію).
Три практичні причини.
Поле datePosted - це еталонна позначка часу. Коли агрегатор повідомляє, що вакансію було «опубліковано 3 дні тому», він показує дату, коли сам уперше її виявив, а не дату, коли компанія фактично її опублікувала. JSON-LD на власній сторінці компанії дає Вам реальну дату. Наше дослідження затримки між ATS та LinkedIn побудоване саме на цьому порівнянні.
Google Jobs отримує дані безпосередньо через JSON-LD. Щойно Googlebot обходить сторінку вакансій (що для більшості корпоративних сайтів відбувається протягом кількох годин), вакансія з'являється в результатах пошуку Google Jobs. LinkedIn та Indeed змушені виконувати власний обхід, розбір, дедуплікацію та класифікацію, що й призводить до їхньої затримки від 1 до 5 днів. Аналіз вартості затримки агрегаторів детально розбирає це питання.
Якщо Ви будуєте будь-яку систему моніторингу, JSON-LD значно зручніший за розбір сирого HTML. Дані вже структуровані. Вам не потрібні CSS-селектори, які ламаються при редизайні сторінки вакансій компанії. Достатньо знайти блоки <script type="application/ld+json"> та розпарсити їх як JSON.
У будь-якому браузері:
application/ld+json."@type": "JobPosting", містить дані про вакансію.Перевірити валідність можна за допомогою інструменту Google Rich Results Test, який одночасно підтверджує коректність JSON-LD та повідомляє, чи буде Google Jobs індексувати цю вакансію.
Наш повний довідник з 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
# Запускайте за розкладом; порівнюйте з попереднім запуском; надсилайте нові записи електронною поштою.
Повна реалізація (обробка сторінок, що рендеряться через JavaScript, дотримання лімітів запитів, дедуплікація між запусками, розбір зарплати у формат для запитів) нескладна, але потребує більше роботи. Наш повний посібник з моніторингу сторінок вакансій порівнює цей підхід з альтернативами.
Якщо Ви шукаєте роботу переважно через агрегатори, Ви за визначенням перебуваєте нижче по ланцюжку від структурованих даних, які компанія вже опублікувала. Той самий JSON-LD, який потрапив до Google Jobs у день публікації вакансії, лежить на сторінці компанії і чекає, щоб його прочитали, а Ви натомість дивитесь на урізану, класифіковану та запізнілу на день копію агрегатора.
Практичний висновок: Google Jobs структурно швидший за LinkedIn або Indeed завдяки устрою конвеєра. Для вакансій, де важливо подати заявку в день публікації, віддавайте перевагу Google Jobs, а не пошуку LinkedIn, якщо Ви не використовуєте прямий моніторинг ATS. Наше порівняння трьох підходів детально розбирає практичні компроміси.
JSON-LD JobPosting - це непомітний примітив, що лежить в основі більшої частини сучасної інфраструктури пошуку роботи. Ті самі дані, які потрапили до Google Jobs у мить публікації вакансії, знаходяться на сторінці компанії і чекають, щоб їх прочитали. Агрегатори додають власні шари отримання, розбору, дедуплікації та класифікації поверх цих даних - саме тому вони відстають від канонічного джерела на день-два.
Для більшості кандидатів практичний висновок простіший за технічну історію: якщо Ви обираєте між каналами пошуку роботи, Google Jobs структурно свіжіший за LinkedIn, бо читає JSON-LD безпосередньо. Якщо Ви будуєте власний моніторинг, JSON-LD - це те, що треба читати, а не відрендерений HTML і тим паче не індексована копія агрегаторів.