Практически каждая современная страница вакансий содержит структурированные машиночитаемые данные с описанием должности. Понимание этого формата даёт Вам надёжный способ отслеживать вакансии без разбора сырого 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
# Запускайте по расписанию; сравнивайте с предыдущим запуском; отправляйте новые записи по e-mail.
Полная реализация (обработка страниц, рендерящихся через 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 и тем более не индексированная копия агрегаторов.