Сайт рейтингов компаний Best in Russia: 99 рейтингов на фактах за 5 дней
Best in Russia — сайт рейтингов компаний России: стоматологии, застройщики, отели, рестораны, хостинги, туроператоры. Мы спроектировали и собрали его с нуля: отобрали темы под реальный спрос, написали конвейер, который сам проверяет компании по выдаче, ЕГРЮЛ, отчётности ФНС и Яндекс Картам, и сделали шаблон статьи, где у каждой оценки виден источник. От ТЗ до открытия сайта для поиска прошло 5 дней.

О проекте
Запросы «рейтинг стоматологий Москвы», «лучшие застройщики», «топ хостингов» каждый месяц набирают сотни тысяч показов. В выдаче по ним в основном подборки, где места куплены, или списки, переписанные друг у друга. Посетитель не видит, почему компания стоит третьей, а не десятой.
Best in Russia — сайт рейтингов, где место компании объясняется данными: сколько лет юрлицу, какая выручка по отчётности ФНС, как компанию оценивают на Яндекс Картах, что она сама пишет о себе на сайте. Каждая цифра в статье ведёт на источник. Мы сделали проект под ключ: структуру, дизайн, сбор данных, шаблон статьи, техническое SEO и выкладку.
Задача
- Масштаб. Не три статьи, а сотня рейтингов под реальный поисковый спрос — и возможность добавлять новые без ручной сборки.
- Достоверность. Список компаний собирается из выдачи и проверяется по открытым источникам, а не копируется из чужих топов. Факт без источника на страницу не попадает.
- Одинаковое качество. Сотая статья должна быть не хуже первой: та же структура, тот же объём разборов, скриншоты и логотипы у всех компаний.
- SEO с первого дня. Статический быстрый сайт, микроразметка, sitemap, IndexNow, чистые URL — до открытия индексации.
- Сжатые сроки. Запуск за неделю, хостинг только в России.
Отбор 100 тем под спрос
Начали с семантики. Собрали около 550 категорий бизнеса и сняли по ним частотность Wordstat. Затем для 408 ниш выгрузили расширения по 816 фразам вида «рейтинг X» и «лучшие X» — так стало видно, в каких городах и под-нишах есть спрос: «детские стоматологии», «автосалоны с пробегом», «санатории Кисловодска».
Приоритет темы считали как спрос, умноженный на денежность ниши: застройщики, автосалоны, стоматологии, ЭКО и пластическая хирургия получили высший балл, еда и бытовые услуги — низкий. Из выдачи вычистили шум: названия ЖК вроде «ЖК Лучший», сериалы, товары. Не брали госучреждения, частных лиц и рынки, где меньше 15 игроков, — честный топ там не собрать.
Конвейер данных: восемь этапов на каждый рейтинг
Сердце проекта — конвейер сбора. Новая ниша описывается одним конфигом: поисковые запросы, коды ОКВЭД, признаки профиля на сайте, исключения, три критерия и их веса. Дальше конвейер сам проходит восемь этапов и складывает результат в JSON, из которого собирается статья.
| Этап | Что делает | Источник |
|---|---|---|
| 1. Выдача | Собирает домены компаний по запросам ниши, отсеивает агрегаторы и доски объявлений | Яндекс через XMLRiver, Google как резерв |
| 2. Сайты | Читает сайты: ИНН и ОГРН, название, профиль деятельности, кандидаты в логотип. При антиботе включается браузер | Сайты компаний, Playwright |
| 3. ЕГРЮЛ | Находит действующее юрлицо или ИП, дату регистрации, ОКВЭД | DaData, открытые данные ФНС |
| 4. Выручка | Подтягивает выручку из бухгалтерской отчётности | ГИР БО ФНС |
| 5. Отзывы | Берёт оценку и число оценок только из той карточки, где указан сайт компании | Яндекс Карты |
| 6. Факты | Достаёт с «своих» страниц сайта цены, лицензии, число врачей, гарантии, договор — с адресом страницы-источника | Сайты компаний |
| 7. Расчёт | Склеивает дубли, фильтрует по городу и профилю, считает три критерия, итоговую оценку и квадрант | Данные этапов 1–6 |
| 8. Визуал | Вырезает логотипы из шапки сайта, снимает скриншоты главной без cookie-плашек и модалок | Playwright |
Каждый этап кэширует результат и умеет продолжить с места падения: если Яндекс Карты начали отвечать капчей, конвейер возобновляется с пятого этапа, а не с нуля. Причины, по которым компания не попала в рейтинг, сохраняются отдельным файлом — их можно проверить и оспорить.
- Регулярные выражения в JavaScript по умолчанию не считают кириллицу буквами в классах \w и \b — ниша молча собиралась пустой. Перешли на явные классы символов и проверку шаблонов на живых строках.
- Цифры с сайтов обманчивы: время «22:36» распознавалось как 36 врачей, модель аппарата «Sonic Surgeon 300» — как 300. Теперь врачей считаем по ФИО на странице команды.
- ИНН Яндекса из виджета карт в подвале сайта подставлялся вместо ИНН клиники — завели список платформенных реквизитов.
- Юрлицо, найденное только по названию, без профильного ОКВЭД оказывалось однофамильцем — такие совпадения отбрасываются.
- Поддомены других городов (perm.*, spb.*) попадали в московские рейтинги — добавили фильтр по географии.
Формула оценки
Компанию оценивают по трём критериям по шкале от 1 до 5. Набор критериев зависит от типа ниши: для медицины важны врачи и отзывы пациентов, для B2B-услуг — экспертиза и прозрачность цен, для локального бизнеса — отзывы и цена. Веса публикуются в каждой статье.
| Тип ниши | Критерии | Рейтингов |
|---|---|---|
| Медицина | Надёжность · Врачи · Отзывы пациентов | 31 |
| B2B-услуги | Надёжность · Экспертиза и результаты · Цена и прозрачность | 22 |
| Локальный бизнес и HoReCa | Надёжность · Отзывы · Цена и прозрачность | 47 |
«Надёжность» везде складывается из возраста юрлица, выручки по ФНС и реквизитов на сайте, для медицины — ещё и лицензии. Отзывы сглаживаются к среднему по нише: 5,0 при двухстах оценках весит меньше, чем 4,9 при двух тысячах. Если данных нет, компания получает среднее по нише с пометкой и не может подняться в верхние секторы за счёт пробела.

Шаблон статьи-рейтинга
Статья собирается из JSON-файла рейтинга: таблицы, оценки, места, графики и изображения выводит код, редакция пишет только тексты. Структура одинакова для всех 99 рейтингов.
- Коротко: топ-3 — три карточки с итоговой оценкой, полосками критериев и ответом «кому подходит».
- Методология и таблица «критерий — вес — что смотрели».
- Сводная таблица всех мест с сортировкой по любому столбцу; на телефоне превращается в карточки.
- Квадрант рынка — SVG-график на логотипах компаний: надёжность по горизонтали, второй критерий по вертикали, размер — третий критерий. Секторы делятся по медианам рейтинга.
- Разбор каждой компании под своим H2: шапка с оценкой, текст, скриншот главной, плюсы и минусы, все факты со ссылками на источники.
- Как выбрать, чек-лист вопросов перед договором, FAQ и связанные рейтинги.



Квадрант — самый заметный элемент статьи и главный её отличительный признак: в нишевых подборках такого нет. Он рисуется на этапе сборки как SVG, поэтому не требует JS-библиотек и индексируется вместе со страницей. Логотипы не обрезаются у краёв, подписи секторов не перекрываются точками — это часть стандарта качества.

Контроль качества: эталон и автоматическая проверка
На второй день утвердили три эталонные статьи и описали стандарт качества: от минимального числа компаний до объёма текста в каждом блоке. Стандарт превратили в скрипт QA, который запускается перед публикацией.
- В рейтинге минимум 15 компаний, у каждой — ИНН и логотип.
- Скриншоты у всей первой десятки и минимум у 90% остальных; капча или чужая страница на скриншоте не сохраняется.
- У каждого факта есть источник, квадрант построен, все текстовые блоки на месте и укладываются в объём.
- Ошибка QA блокирует публикацию, предупреждение — повод доработать.
Отдельно — обзорный лист визуала: все логотипы и скриншоты рейтинга на одной странице. Так за минуту видно, где вместо логотипа вырезался кусок баннера, а на скриншот попала всплывашка. И финальная проверка глазами посетителя: прочитать топ-15 и хвост и по каждой строке спросить «почему она здесь». Так ловятся дубли одного бренда и подборки, пробравшиеся в топ.
Техническая часть и SEO
- Astro в режиме статической генерации + Tailwind CSS 4. На клиент не уходит ни одного JS-бандла: сортировка таблицы, оглавление и FAQ работают на инлайновом ванильном JS.
- Лёгкие страницы. Рейтинг на 30 компаний с разборами каждой — 69 КБ HTML в gzip. Скриншоты в WebP с ленивой загрузкой, шрифты Onest и Lora — локально.
- Микроразметка: Article, ItemList со всеми компаниями рейтинга, Organization, FAQPage, BreadcrumbList.
- Индексация: sitemap и robots.txt генерируются кодом, в robots — Clean-param для UTM-меток, после выкладки адреса отправляются через IndexNow.
- Структура URL: группа → категория → город (/medicina/ → /stomatologii/ → /stomatologii/moskva/), хлебные крошки на каждой странице, перелинковка между рейтингами одной группы и одного города.
- Технический SEO-аудит сборки (title, description, canonical, дубли, битые ссылки) — 0 ошибок перед открытием индексации.
- Выкладка без простоя: сайт собирается локально, на сервер уходит архив, релиз переключается симлинком, три последних релиза хранятся для отката. Хостинг — VPS в России.
- Публикация одной командой: QA → добавление в список опубликованных → сборка → SEO-аудит → выкладка → IndexNow → обновление статуса.

Рейтинги чаще читают с телефона, поэтому мобильную версию проектировали отдельно: широкая таблица превращается в карточки с тремя оценками, панель фактов уходит под текст разбора, оглавление сворачивается в выпадающий список.

Хронология
| Дата | Что сделано |
|---|---|
| 13 октября | ТЗ, семантика по 550 категориям, первый прототип из трёх рейтингов, подключён домен — сайт закрыт от индексации |
| 14 октября | Финальная структура статьи: разбор каждой компании под своим H2, квадрант рынка. Три статьи утверждены как эталон качества, отобраны 100 тем |
| 15 октября | SEO-обвязка: robots, sitemap, микроразметка, IndexNow, WebP; конвейер публикации и технический аудит |
| 16–17 октября | Массовый сбор и выпуск рейтингов, Яндекс Метрика, сайт открыт для поиска |
Результат
- 99 рейтингов на сайте — 10 по России и 89 по городам, 100-й в работе.
- 14 025 сайтов компаний прочитаны и проверены конвейером, 2 546 компаний вошли в топы.
- 138 страниц в sitemap: рейтинги, 15 групп, 19 хабов категорий, методология.
- 5 дней от ТЗ до открытой индексации.
- Новый рейтинг — один конфиг и одна команда: сбор данных около 17 минут, дальше тексты, QA и публикация.
- 0 ошибок технического SEO-аудита на момент открытия сайта для поиска.
Главный результат — не число статей, а система, которая их производит. Добавить город или нишу — значит описать её в конфиге и запустить конвейер. Обновить рейтинг через полгода — перезапустить сбор: выручка, отзывы и факты подтянутся заново, места пересчитаются.
Что дальше
- Регистрация в Яндекс Вебмастере и Google Search Console, наблюдение за индексацией и первыми позициями.
- Комментарии настоящих экспертов в каждой группе рейтингов.
- Расширение на новые города и ниши по тому же конвейеру.
- Регулярное обновление данных и пересчёт мест.
Кейс показывает наш подход к сложным сайтам: сначала данные и процесс, потом страницы. Если проекту нужны сотни однотипных, но качественных страниц — каталог, агрегатор, рейтинг, гео-лендинги, — мы строим конвейер, который их собирает и проверяет, а не верстаем каждую вручную.
Нужен сложный сайт или проект на данных?
Расскажите о задаче — предложим архитектуру, сроки и покажем, что можно автоматизировать.
