Выгрузка 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, мы скачиваем файл заново только после изменений.
Минимальный документ
Заголовок раздела «Минимальный документ»{"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 в текст для поиска не попадают: это служебные значения карточки.
Примеры
Заголовок раздела «Примеры»{"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":"Вакцина «Ультрикс Квадри», приём без записи."}{"id":"mortgage-family","url":"https://bank.ru/ipoteka/family/","title":"Семейная ипотека","type":"product","category":"Ипотека","image":"https://bank.ru/img/family.png","attributes":{"price":"6","price_from":"true","currency":"%"},"content":{"format":"html","body":"<h2>Условия</h2><p>Ставка от 6% годовых…</p><h2>Документы</h2><ul><li>Паспорт</li>…</ul>"},"boost":1.3}{"id":"faq-card-block","url":"https://bank.ru/help/card-block/","title":"Как заблокировать карту","type":"faq","category":"Помощь","content":{"format":"text","body":"Позвоните по номеру 900 или заблокируйте карту в приложении…"}}{"id":"tariffs-2026","url":"https://bank.ru/docs/tariffs.pdf","title":"Тарифы по картам с 1 ноября 2026","type":"document","category":"Документы","published_at":"2026-10-20","description":"Стоимость обслуживания, снятие наличных, переводы."}{"id":"docs/catalog/feed","url":"https://docs.site.ru/catalog/feed/","title":"Товарный фид","type":"document","category":"Каталог","breadcrumbs":["Документация","Каталог"],"updated_at":"2026-10-17T12:00:00+03:00","sections":[{"heading":"Категории","anchor":"категории","level":2,"text":"…"},{"heading":"Офферы","anchor":"офферы","level":2,"text":"…"}]}Сборка документации может выгружать файл сама: так сделано для docs.searchbooster.io — скрипт после сборки кладёт /_sb/export.jsonl.gz.
Выгрузка и sitemap вместе
Заголовок раздела «Выгрузка и sitemap вместе»В настройках можно указать и sitemap, и выгрузки — тогда документы объединяются:
- Документ выгрузки с тем же
idили тем жеurl, что страница из sitemap (без учёта регистра хоста,/в конце и#якоря), дополняет её. Текст страницы остаётся, а из выгрузки приходят заполненные поля: заголовок, тип, раздел, описание, даты, картинка, крошки, теги. Атрибуты объединяются. Если в документе выгрузки естьcontentилиsections, они заменяют текст страницы. - Остальные документы выгрузки добавляются как отдельные.
- Документ выгрузки с
deletedилиnoindexскрывает и страницу из sitemap с тем же URL. - Если выгрузок несколько, для одного
idпобеждает более поздняя в списке.
Так клиника может индексировать сайт по sitemap, а из МИС отдавать только цены, расписание и портреты врачей по их URL.
Обновление и удаление
Заголовок раздела «Обновление и удаление»- Выгрузка — полный список документов источника: документы, которых больше нет ни в одном источнике, удаляются из поиска на следующем прогоне.
- Чтобы удалить документ явно, оставьте строку
{"id": "…", "deleted": true}. - Неизменённые документы не переиндексируются: изменилась строка — переиндексируется только этот документ.
- Если файл не скачался (ошибка сервера, таймаут) или не разобрался, поиск продолжает работать на прошлой удачной версии этого источника, ничего не удаляя.
- Индексация идёт по расписанию раз в несколько часов, срочный прогон запускается из кабинета.
Проверка
Заголовок раздела «Проверка»Перед подключением проверьте файл в проверке выгрузки: она работает в браузере и показывает ошибки по каждому документу.