Перейти к содержимому

Выгрузка SB Content Feed

SB Content Feed — файл, в котором сайт сам отдаёт свои документы: страницы, статьи, вопросы-ответы, врачей, услуги с ценами, филиалы, тарифы. Его выгружает модуль CMS, медицинская информационная система клиники или сборка документации. Мы скачиваем файл по расписанию и только когда он изменился.

Выгрузка не обязательна: сайт можно индексировать по sitemap. Она нужна, когда в HTML не хватает данных — цены и расписание из МИС, тип документа, дата публикации, портрет врача — или когда часть документов вообще не лежит на страницах.

  • JSON Lines: один документ — одна строка JSON. Пустые строки и строки, начинающиеся с #, пропускаются.
  • Кодировка UTF-8.
  • Файл .jsonl или сжатый gzip .jsonl.gz (так же, как товарные фиды). Zip не поддерживается.
  • До 512 МБ после скачивания. Документ (одна строка) — до 64 МБ.
  • Отдавайте файл по постоянной ссылке, например https://site.ru/_sb/export.jsonl.gz. Если сервер возвращает ETag или Last-Modified, мы скачиваем файл заново только после изменений.
export.jsonl
{"id":"page-142","url":"https://clinic.ru/services/mrt/","title":"МРТ головного мозга","content":{"format":"html","body":"<h2>Подготовка</h2><p>Специальная подготовка не нужна…</p><h2>Противопоказания</h2><p>…</p>"}}

Обязательны id, url, title и текст: content, sections или description.

Поле Тип Что делает
id строка Обязательно. Постоянный идентификатор документа в вашей системе. По нему документ обновляется и удаляется.
url строка Обязательно. Абсолютная ссылка на страницу, куда ведёт результат.
title строка Обязательно. Заголовок. Самое сильное поле поиска.
content объект Текст документа: {"format": "html" | "markdown" | "text", "body": "…"}. HTML и Markdown делятся на разделы по заголовкам — результат ведёт прямо к нужному разделу.
sections массив Уже разделённый текст: [{"heading": "Подготовка", "anchor": "prep", "level": 2, "text": "…"}]. anchor — id заголовка на странице для ссылки url#anchor. Если есть sections, content не нужен.
description строка Краткое описание: подпись в карточке результата, ищется вместе с текстом.
type строка Тип документа, см. ниже. По нему работают веса и карточки виджета. По умолчанию page.
category строка Раздел для людей: «Услуги», «Врачи», «Статьи». Показывается в выдаче, по нему группируются результаты, у него может быть свой вес. Ищется: запрос «ЛОР» находит документы раздела «ЛОР».
breadcrumbs массив строк Хлебные крошки: ["Услуги", "Диагностика"].
published_at дата Дата публикации: RFC 3339 (2026-10-24T10:00:00+03:00) или 2026-10-24. Показывается в выдаче, учитывается при буст по свежести.
updated_at дата Дата изменения; для свежести берётся, если нет published_at.
expires_at дата После этой даты документ не показывается: акции, вакансии, мероприятия.
image строка Картинка карточки: портрет врача, обложка продукта.
attributes объект строк Данные карточки и текста: цена, длительность, специальность, адрес. Зарезервированные ключи — ниже; любые свои ключи тоже ищутся и попадают в ответы ИИ.
boost число Множитель веса документа от 0.5 до 3: 1.5 поднимает документ, 0.7 опускает.
depth число Уровень вложенности для буста «ближе к главной». По умолчанию считается по URL (языковой сегмент /ru/ не считается).
tags массив строк Метки для правил в кабинете: «поднять документы с тегом акция».
lang строка Язык документа, например ru.
noindex true Документ не индексируется.
deleted true Документ удалён, см. удаление. Для удалённого достаточно id.

Поля parent_id, regions, audience, attachments принимаются и сохраняются, но пока не влияют на поиск.

type — машинное значение. Неизвестный тип принимается и считается обычной страницей.

Тип Для чего В виджете
page обычная страница строка результата
article, news статьи, новости дата публикации, буст по свежести (если включён)
faq вопрос-ответ строка результата
document документация, правила, договоры строка результата
service услуга цена и длительность в строке; с картинкой и без цены — карточка
doctor врач, специалист карточка с портретом, специальностью, стажем, рейтингом, ценой приёма и кнопкой записи
branch филиал, офис, отделение адрес, часы работы, телефон
product продукт, тариф с картинкой карточка с картинкой и ценой
tariff тариф строка результата, обычно поднимается правилом
case, vacancy, event кейсы, вакансии, мероприятия строка результата

Зарезервированные ключи attributes. Все значения — строки.

Ключ Для типа Пример Как используется
price service, doctor, product "2500" В карточке «2 500 ₽», в тексте для поиска «Цена: 2500 ₽»
price_from с price "true" «от 2 500 ₽»
currency с price "RUB" По умолчанию рубли
duration service "30 мин" В строке услуги
specialty doctor "Кардиолог" В карточке врача
experience doctor "12 лет" Стаж в карточке
rating doctor "4.9" Рейтинг в карточке
reviews doctor "128" Число отзывов
booking_url doctor "https://clinic.ru/booking/?doctor=17" Кнопка «Записаться»
address branch "ул. Ленина, 5" В строке филиала
hours branch "Пн–Пт 8:00–21:00" Часы работы
phone branch "+7 495 123-45-67" Телефон
metro branch "Охотный ряд" Ищется и попадает в ответы ИИ

currency, price_from и booking_url в текст для поиска не попадают: это служебные значения карточки.

export.jsonl
{"id":"doctor-17","url":"https://clinic.ru/doctors/ivanova/","title":"Иванова Мария Сергеевна","type":"doctor","category":"Врачи","image":"https://clinic.ru/img/ivanova.jpg","description":"Кардиолог, кандидат медицинских наук.","attributes":{"specialty":"Кардиолог","experience":"15 лет","rating":"4.9","reviews":"212","price":"3200","booking_url":"https://clinic.ru/booking/?doctor=17"},"sections":[{"heading":"Образование","text":"РНИМУ им. Пирогова, 2009…"}]}
{"id":"service-ekg","url":"https://clinic.ru/services/ekg/","title":"ЭКГ с расшифровкой","type":"service","category":"Кардиология","attributes":{"price":"1500","duration":"20 мин"},"content":{"format":"markdown","body":"## Подготовка\nЗа час до исследования не курить…"}}
{"id":"branch-lenina","url":"https://clinic.ru/contacts/lenina/","title":"Клиника на Ленина","type":"branch","category":"Филиалы","attributes":{"address":"ул. Ленина, 5","hours":"Пн–Вс 8:00–21:00","phone":"+7 495 123-45-67","metro":"Охотный ряд"},"description":"Взрослое и детское отделение, лаборатория."}
{"id":"news-1024","url":"https://clinic.ru/news/vaccine/","title":"Открыта запись на вакцинацию от гриппа","type":"news","category":"Новости","published_at":"2026-10-01","expires_at":"2026-12-31","description":"Вакцина «Ультрикс Квадри», приём без записи."}

В настройках можно указать и sitemap, и выгрузки — тогда документы объединяются:

  • Документ выгрузки с тем же id или тем же url, что страница из sitemap (без учёта регистра хоста, / в конце и #якоря), дополняет её. Текст страницы остаётся, а из выгрузки приходят заполненные поля: заголовок, тип, раздел, описание, даты, картинка, крошки, теги. Атрибуты объединяются. Если в документе выгрузки есть content или sections, они заменяют текст страницы.
  • Остальные документы выгрузки добавляются как отдельные.
  • Документ выгрузки с deleted или noindex скрывает и страницу из sitemap с тем же URL.
  • Если выгрузок несколько, для одного id побеждает более поздняя в списке.

Так клиника может индексировать сайт по sitemap, а из МИС отдавать только цены, расписание и портреты врачей по их URL.

  • Выгрузка — полный список документов источника: документы, которых больше нет ни в одном источнике, удаляются из поиска на следующем прогоне.
  • Чтобы удалить документ явно, оставьте строку {"id": "…", "deleted": true}.
  • Неизменённые документы не переиндексируются: изменилась строка — переиндексируется только этот документ.
  • Если файл не скачался (ошибка сервера, таймаут) или не разобрался, поиск продолжает работать на прошлой удачной версии этого источника, ничего не удаляя.
  • Индексация идёт по расписанию раз в несколько часов, срочный прогон запускается из кабинета.

Перед подключением проверьте файл в проверке выгрузки: она работает в браузере и показывает ошибки по каждому документу.