Что и когда мы меняли в парсере, классификации, дизайне и инфраструктуре каталога. Свежие записи — сверху.
📡 Запущена сеть из 12 городских Telegram-каналов
Запустили 12 городских Telegram-каналов — Москва, Питер, Дубай, Тбилиси, Алматы, Ереван, Минск, Лимассол, Белград, Стамбул, Ташкент и Берлин. Теперь каждая новая вакансия автоматически уходит в тот канал, к которому подходит по географии (Observer + Event + Listener). У каждого поста — inline-кнопка «📝 Откликнуться на вакансию» с UTM-метками utm_source=tg&utm_medium=channel, в аналитике видно, какой канал реально приводит клики.
🌐 Подключили 11 новых парсеров источников вакансий
Каталог теперь подсасывает вакансии из ещё одиннадцати источников: Habr Career, RemoteOK, We Work Remotely, Jobicy, Himalayas, Remotive, плюс четыре крупные ATS-платформы (Greenhouse, Lever, Ashby, Workable) и отдельный парсер крупных российских корпоративных карьерных сайтов (Ru-Corporate). Сверху прикрутили парсер 30 русскоязычных job-каналов в Telegram (gjobs, hrcpa, partnerkin_jobs и другие) — встроенный AI-классификатор смотрит каждое сообщение и решает, вакансия это или нет.
🎯 Фильтр affiliate-ниши: удалено 8075 не наших вакансий
Новый фильтр affiliate-ниши прошёлся по ATS-парсерам и удалил 8075 вакансий, не имеющих отношения к нашей аудитории — инженеров Anthropic, юристов Stripe и подобных. Из 8400+ вакансий в каталоге остались 1662, реально интересные арбитражникам. Заодно расширили русскоязычный whitelist на 40+ паттернов (таргетолог, СММ-щик, сеошник, директолог, веб-мастер, лидгенщик и т.д.). Для Telegram-источника фильтр мягче — только blacklist, чтобы не резать профильные каналы.
🤖 LLM-нормализация и RU↔EN перевод в один проход
Описания вакансий теперь разбираются на структуру — задачи, стек, требования, условия, процесс отклика — и одновременно переводятся на второй язык. Всё за один вызов openai/gpt-5.4-mini. В карточке вакансии структурированная версия рендерится с иконками (📋 задачи, 🛠 стек, ✅ требования, 🎁 условия, 📞 процесс) и переключается по локали. Свежие вакансии обрабатываются автоматически сразу после публикации в Telegram (задержка 10 секунд), а раз в 15 минут крон добивает остальное.
🖼 Индивидуальные OG-картинки для каждой вакансии
Каждая страница вакансии теперь генерирует собственное OG-превью 1200×630 — шрифт Inter Display Black, акцентный цвет города, заголовок и компания. Когда вакансию шарят в Telegram, Twitter или WhatsApp, превью у каждой своё, а не общая шапка сайта. То же самое доехало до таксономий (/jobs/role/*, /jobs/vertical/*, /jobs/format/*) — раньше они шарились вообще без OG-тегов.
🏢 NDA-работодатели: 559 вакансий получили честный fallback
Большая доля вакансий приходит от рекрутёров, которые держат работодателя под NDA — у 559 из 1193 не было company_norm. Теперь они не выглядят сломанными: в карточке стоит «🏢 NDA-работодатель» и бейдж «🔍 Через рекрутёра», а в JSON-LD прописано hiringOrganization = EmploymentAgency. Google for Jobs принимает без замечаний.
🔗 Кнопка «Поделиться» + умный label на отклике
На карточке вакансии появилась кнопка «Поделиться» — три варианта: Telegram, WhatsApp или просто скопировать ссылку. Кнопка отклика больше не говорит сухое «Откликнуться» — она смотрит, куда ведёт ссылка, и подставляет контекстный label: «Написать в Telegram», «Откликнуться на hh.ru», «Перейти на Habr Career», «Открыть на partnerkin», «Отправить письмо». Из мелочей — у 549 вакансий срезали служебные префиксы «Зарплата »/«Место работы ».
🛠 Новая админка для Telegram-сети вакансий
В админке появился новый раздел — /admin/careers/tg-network — с четырьмя экранами: дашборд, список каналов, очередь публикаций и журнал опубликованных постов. У каждого из 12 каналов своя страница редактирования. В боковой навигации пункт «💼 Job-сеть» подсвечивается, когда находишься внутри него.
🧹 Мелкие правки: дубли в описаниях, счётчик источников, футер
У шестнадцати вакансий описание дублировалось дважды в description_clean — починили. Счётчик «источников» в карточке всегда показывал 0 для не-телеграмных записей, потому что не читал колонку source_count — теперь читает. Прогнали гео- и проф-теггеры по 1193 вакансиям и закрыли пропуски gtag / ptag. Из футера убрали блок «🌐 Экосистема» — больше не связываем пять доменов между собой.
🔌 Партнёркин: ещё один источник вакансий
Подключили парсинг partnerkin.com — это даёт примерно 10–50 новых вакансий в день из девяти категорий (арбитраж, менеджмент, фарм, SEO, продажи, дизайн и других). Будут собираться автоматически каждые шесть часов и попадать в наш общий каталог.
🌙 Мониторинг работает тише ночью
Раньше система могла прислать ложный сигнал «парсер не работает» в четыре утра, когда в каналах просто никто не публикует. Теперь алерты не приходят ночью по Москве (с 23:00 до 8:00), а порог чувствительности повышен — будит только при реальной поломке.
🔬 Microsoft Clarity: тепловые карты и записи сессий
Подключили Microsoft Clarity для анализа поведения. Теперь видно, как пользователи кликают, прокручивают и где «застревают» на страницах. Это поможет улучшать навигацию и тексты по живым данным, а не по догадкам.
💰 Зарплаты: подняли качество
Прогнали все вакансии через AI-нормализацию зарплат. Раньше встречался мусор — например «10 USD/месяц», потому что в тексте было «выплата 10 числа». Теперь такие случаи распознаются как «зарплата не указана», а реальные диапазоны (вроде $1500–3000) прописываются аккуратно. Google for Jobs снова видит фильтр зарплат.
🧹 Дубликаты вакансий: схлопнули 89 групп
Раньше одна и та же вакансия могла появляться 2–9 раз — её перепостили в разных каналах с разными HR-контактами. Починили склейку: теперь сравниваем по самому содержанию, а не по контактам. Из базы ушли 89 групп дублей (174 строки слились в 85 основных записей).
⚡ Bing и IndexNow: ускорили попадание в поиск
Подключили Bing Webmaster Tools и IndexNow API. Теперь каждая новая вакансия автоматически пингуется в Bing, Yandex, Naver и Seznam — попадание в индекс ускорилось с дней до часов.
📈 Большая SEO-кампания: 9 направлений сразу
Глоссарий расширили с 31 до 63 терминов индустрии.
Страницы /about и /methodology переписали человеческим языком, добавили живые кейсы.
На сравнительных страницах теперь полноценные таблицы с числами из нашей базы.
Каждая роль и вертикаль получила 200–400 слов описания и блок FAQ.
У каждой вакансии появилась markdown-версия по адресу /job/{slug}.md — для AI-ассистентов.
🛠 JSON-LD: критическое исправление
Нашли и устранили ошибку в структурированных данных по всему сайту — Google месяц не видел наши вакансии в Google for Jobs из-за технического конфликта в шаблонах. После починки все 600+ вакансий снова с корректной разметкой.
🆕 Новые источники вакансий
Запустили парсеры cpa.live (пока в разработке — нужен прокси) и partnerkin.com (тестовый прогон успешен, активирован 12 мая).
🔒 Изоляция домена и UX-апгрейды
Починили /reports и /companies — раньше middleware 301-редиректил их на головной домен, что палило связь между сайтами и убивало SEO. Добавили carve-out для каталога — теперь у нас свои Report/CompanyController.
Expired-вакансии теперь открываются с красным баннером «Вакансия закрыта», meta robots noindex,follow и ссылкой на похожие активные. Раньше показывали 404 — терялись бэклинки и sitemap-сигналы.
Добавили Vary: Accept-Encoding, Host в Cache-Control, чтобы CDN не отдавал HTML головного домена на запрос каталога и наоборот.
Mega-menu: убрали 6px gap между триггером и панелью — раньше курсор «терялся» при движении вниз. Теперь невидимый padding-top bridge ловит ховер.
Главная: топ-вакансии перевели из карточек в таблицу (Vacancy / Company / Salary / Format / Tags / Date) — компактнее, больше вакансий в одном экране.
Главная: «Вертикали / Роли / Работодатели» — было 3 блока в ряд, стало одна секция с табами. Экономия высоты страницы ~2/3.
Логотип 💼 в шапке с amber drop-shadow.
OG-картинка 1200×630 (PNG 107 KB) для соц-сетей.
🚀 Производительность — 100 / 100 mobile
Mobile Performance в Lighthouse: было 83–97, стало 99–100 / 100 на всех ключевых страницах.
LCP (показатель скорости отрисовки основного контента): было 4.3 секунды на /jobs и /market-pulse, стало 1.5–1.7 секунды.
Lazy-load для счётчиков аналитики: 236 KB JS Google Analytics и Yandex.Metrika не блокируют первую загрузку, грузятся на первое взаимодействие пользователя (или через 6.5 секунды как fallback для поисковых ботов).
SEO 100 / 100 на всех страницах. CLS (сдвиг макета) = 0. TBT (блокировка главного потока) = 0 мс.
📚 Глоссарий и словарь жаргона
Новая страница /jobs/glossary — 31 термин арбитражного жаргона: CPA, CPL, RevShare, FTD, ROI, фармер, баер, акки, ZRD, BM, связка, капы, GEO, вертикаль и другие.
DefinedTermSet schema для Google Rich Results — глоссарий теперь виден в расширенной выдаче.
Роль Фармер — отдельный кластер вакансий (65 позиций). Backfill через регулярки (фарм / прогрев / ZRD / мульти-аккаунт / account farming / warming up).
AI-обзор через Claude Sonnet: 96% активных вакансий получили теги вертикали, роли и уровня (junior / middle / senior).
🚀 Перезапуск на новой инфраструктуре
Мигрировали backend на Laravel 11 (с custom-PHP). Единый технологический стек со всей экосистемой.
3 355 вакансий перенесены без потери истории и связей с источниками.
Смена дизайна — янтарный акцент (#f59e0b), общая дизайн-система экосистемы.
Telegram-парсер переехал на наш пул из 15 аккаунтов (библиотека Telethon, Python).
AI-модерация переведена на Claude Sonnet вместо OpenAI gpt-4o-mini — выше качество классификации, контролируемая стоимость.
📊 AI-модерация и аналитика
Авто-публикация надёжных кейсов и авто-отклонение мошеннических вакансий через LLM.
Daily-rollup аналитика: вакансии с зарплатой, формат, вертикаль, топ-роли.
Quality score для каждой вакансии (полнота описания, наличие компании, контактов, локации).
🔍 Структурированные данные и SEO
JSON-LD JobPosting для всех вакансий — каталог готов для Google Jobs.
Yandex Vacancy Feed (XML) для Яндекс.Работы.
Sitemap с 887 активными вакансиями и 500 карточками компаний.