
29 карточек из 270 собраны больше чем из одного объявления
На 27 сентября в ленте 270 вакансий, и 29 карточек из них склеены из нескольких найденных объявлений: одна и та же работа висела в двух, трёх, а в одном случае в четырёх…
Как устроен сайт
8 октября 2026 · 3 мин чтения

Вакансию находят не только в ленте. Её пересылают в рабочем чате, кидают знакомому в личку, сохраняют в закладки — и открывают через месяц. Вакансии за этот месяц часто уже нет: работодатель закрыл набор, источник перестал её подтверждать, или мы сами убрали запись. Бывает и так, что под заголовком «3D-дизайнер» скрывался рентген-лаборант — такой записи в ленте дизайнера делать нечего.
Ещё вчера по такому адресу открывалась обычная «страница не найдена». Человек, который пришёл по пересланной ссылке, видел тупик и уходил. При этом открытые вакансии той же роли у нас были — просто с этой страницы к ним не вело ни одной ссылки.
Теперь адрес вакансии, которой нет, разбирается на три случая.
Адрес переехал. В конце адреса вакансии стоит хвост из семи символов. Он считается от записи в источнике, а не от того, как мы эту запись классифицировали. Поэтому, когда у вакансии уточняется роль или уровень, адрес пересобирается целиком, а хвост остаётся прежним. По хвосту мы находим вакансию и отвечаем постоянным перенаправлением на её новый адрес — ссылка из чата продолжает работать, хотя сам адрес давно другой.
Вакансии больше нет. Хвост на месте, но вакансии с таким хвостом в данных не осталось. Тогда открывается страница «Вакансия снята с витрины»: прямо сказано, что запись больше не показывается, а ниже — до шести самых свежих открытых вакансий той же роли. Роль мы достаём из самого адреса: в нём она записана словами, и по «graficheskii-dizainer-…» видно, что человек шёл за графическим дизайном, даже если про саму вакансию мы уже ничего не знаем. Дальше — ссылка на все вакансии этой роли, например на вакансии UX/UI.
Адрес вообще не похож на вакансию. Опечатка, старый раздел, чей-то робот — это по-прежнему 404, и так правильно: придумывать содержимое для случайного адреса мы не станем.
Страница снятой вакансии закрыта от поисковых роботов, но ссылки с неё для них открыты: в поиске такой заглушке делать нечего, а провести человека дальше — нужно.
Список похожих собирается строже, чем лента. В ленту запись попадает, пока её подтверждали хотя бы раз за последний месяц; после тридцати дней молчания она уходит в архив — там на 8 октября 76 записей. А в список похожих мы берём только то, что подтверждали не позже трёх недель назад.
Разница тут не формальная. Посоветовать человеку, который уже уткнулся в снятую вакансию, ещё одну такую же — хуже, чем не советовать ничего.
И ещё одна оговорка, которую мы держим во всём продукте: мы нигде не пишем, что вакансия закрыта. Мы знаем только, когда источник последний раз её подтверждал. Из 261 вакансии на витрине на 7 октября за последние три дня подтверждены 95 — про остальные на карточке прямо написано, что с тех пор источник их не видел. Как это считается, разбирали отдельно: как мы понимаем, что вакансия ещё жива.

На 27 сентября в ленте 270 вакансий, и 29 карточек из них склеены из нескольких найденных объявлений: одна и та же работа висела в двух, трёх, а в одном случае в четырёх…

Мы не знаем, закрыта ли вакансия, и не притворяемся. Вместо этого считаем уверенность от 0 до 1 и показываем причины словами. Разбираем формулу — и почему на текущем…

Оценка качества описания есть в коде, но на текущих данных почти не показывается. Объясняем, чего не хватает, и почему мы не ставим цифру «на глаз».