SearchPlus

Подключение через фид и скрипт

Для магазинов на любой CMS и для 1С-Битрикс без модуля. Каталог SearchPlus берёт из фида товаров, а поиск, подсказки, помощник и чат появляются на сайте от одной строки скрипта. Модуль 1С-Битрикс по-прежнему даёт больше всего: оплаты, цены по группам покупателей, выдачу на странице поиска.

Как подключить

  1. В панели SearchPlus: «Добавить сайт» → «Фид товаров и скрипт».
  2. Укажите ссылку на фид — сразу или потом в «Подключении». Первая загрузка начинается сразу.
  3. Вставьте строку скрипта на все страницы сайта.
  4. Для конверсий: передавайте события электронной торговли Метрики или GA4 — скрипт прочитает их сам.

Строка скрипта, фиды, регионы, карта полей и ключ для заказов — в панели SearchPlus: сайт → «Настройки» → «Подключение».

Ссылка на фид

Форматы

Формат определяется по содержимому, не по расширению: корень yml_catalog — YML, rss или feed с полями g: — Google Merchant, остальное — свой XML с картой полей. Формат запоминается при первой загрузке: если вы сменили формат фида, укажите ссылку заново. Обязательные поля товара: id, название, ссылка, цена.

YML (Яндекс Маркет)

ПолеЧто даёт
offer@idid товара
offer@group_idварианты одного товара — одна карточка с ценой «от»
name или typePrefix + vendor + modelназвание
urlссылка на товар
price, oldpriceцена; старая цена больше текущей — скидка в процентах и «распродажа»
currencyId, currenciesцены переводятся в основную валюту фида (rate="1") по числовым курсам
picture (первая)картинка
vendor, vendorCode, barcodeбренд, артикул, штрихкоды — по ним тоже ищут
descriptionописание, HTML убирается
param (с unit), country_of_origin, weight, dimensionsсвойства для поиска и фильтров
available="false" или count = 0«нет в наличии»
categoriesпуть раздела; раздел с атрибутом url на домене сайта ищется как раздел
<yml_catalog date="2026-10-15 10:00"><shop>
  <currencies><currency id="RUB" rate="1"/></currencies>
  <categories>
    <category id="1" url="https://shop.ru/kitchen/">Кухня</category>
    <category id="2" parentId="1">Чайники</category>
  </categories>
  <offers>
    <offer id="A-17" available="true">
      <url>https://shop.ru/p/a-17</url>
      <price>3790</price><oldprice>4500</oldprice><currencyId>RUB</currencyId>
      <categoryId>2</categoryId>
      <picture>https://shop.ru/i/a-17.jpg</picture>
      <name>Чайник Bosch TWK 7801</name><vendor>Bosch</vendor><vendorCode>TWK7801</vendorCode>
      <param name="Мощность" unit="Вт">2200</param>
    </offer>
    <offer id="T-1-L" group_id="T-1" available="false">
      <url>https://shop.ru/p/t-1</url><price>1090</price><currencyId>RUB</currencyId>
      <name>Футболка базовая</name><param name="Размер">L</param><param name="Хит">да</param>
    </offer>
  </offers>
</shop></yml_catalog>

Google Merchant

RSS 2.0 или Atom с полями g:: g:id, title, description, link, g:image_link, g:price и g:sale_price в виде «1999.00 RUB», g:availability, g:brand, g:gtin, g:mpn, g:item_group_id (варианты), g:product_type (путь раздела через «>»), g:color, g:size, g:material, g:pattern, g:gender, g:age_group, g:product_detail и g:custom_label_0…4. g:sale_price ниже цены становится ценой со скидкой. В наличии — in stock; preorder и backorder считаются «нет в наличии».

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <title>shop.ru</title>
    <item>
      <g:id>T-1-L</g:id>
      <g:item_group_id>T-1</g:item_group_id>
      <title>Футболка базовая, L</title>
      <link>https://shop.ru/p/t-1?size=L</link>
      <g:image_link>https://shop.ru/i/t-1.jpg</g:image_link>
      <g:price>1290.00 RUB</g:price>
      <g:sale_price>1090.00 RUB</g:sale_price>
      <g:availability>in stock</g:availability>
      <g:brand>Basic</g:brand>
      <g:size>L</g:size>
      <g:color>белый</g:color>
      <g:product_type>Одежда &gt; Футболки</g:product_type>
      <g:custom_label_0>Хит</g:custom_label_0>
    </item>
  </channel>
</rss>
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
  <title>shop.ru</title>
  <entry>
    <g:id>A-17</g:id>
    <title>Чайник Bosch TWK 7801</title>
    <link href="https://shop.ru/p/a-17"/>
    <g:price>3790.00 RUB</g:price>
    <g:availability>in stock</g:availability>
    <g:brand>Bosch</g:brand>
    <g:mpn>TWK7801</g:mpn>
    <g:product_type>Кухня &gt; Чайники</g:product_type>
  </entry>
</feed>

Свой XML

После первой загрузки панель предложит карту полей: какой элемент — товар и откуда брать каждое поле. Проверьте её и сохраните в «Подключении» — фид сразу загрузится заново. Пока карта не сохранена, товары не принимаются. Поле указывается так:

Наличие: «1», «true», «yes», «да», «есть», «в наличии», «in stock», число больше нуля или пустое значение — в наличии, остальное — нет.

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <item sku="A-17">
    <title>Чайник Bosch TWK 7801</title>
    <link>https://shop.ru/p/a-17</link>
    <prices><current>3790</current><old>4500</old></prices>
    <stock>в наличии</stock>
    <section>Кухня/Чайники</section>
    <attrs>
      <attr name="Мощность">2200 Вт</attr>
      <attr name="Объём">1,7 л</attr>
    </attrs>
  </item>
</catalog>
Элемент товара  item
id              @sku
Название        title
Ссылка          link
Цена            prices/current
Старая цена     prices/old
Наличие         stock
Раздел          section
Свойства        attrs/attr

Варианты товара

Варианты одного товара (цвет, размер) показываются одной карточкой: название — общая часть названий, цена — самая низкая с «от», в наличии — если в наличии хоть один вариант, а запрос «футболка L» находит товар по размеру. Варианты объединяются по group_id (g:item_group_id, «Группа вариантов» в карте), а без него — по одинаковой ссылке без #: штатная выгрузка 1С-Битрикс в YML так и делает. Группа — от двух вариантов.

Роли параметров

Параметры с этими именами работают сами, без настройки:

РольИмена параметра
хит«Хит», «Хит продаж», «Лидер продаж», hit, bestseller
новинка«Новинка», new
слова для поиска«Ключевые слова», «Поисковые слова», keywords
порядок«Сортировка», «Порядок», sort — число

Хит и новинка — значения «да», «д», «есть», «yes», «y», «true», «1». Своё имя для роли задаётся в «Подключении» → «Настройки скрипта» и заменяет имена по умолчанию; для Google Merchant — custom_label_N.

Отклонённые товары и лимит

Товар не попадает в поиск, если у него нет обязательного поля, цена отрицательная или не число, id длиннее 100 символов или повторяется либо ссылка ведёт не на домен сайта, его www или поддомен. По каждой причине в «Подключении» видно число и примеры id.

Лимит тарифа считает элементы: товары, каждый вариант и разделы со своей страницей на сайте. Товары, уже попавшие в поиск, сохраняют место; из новых сначала берутся товары в наличии, затем остальные — по порядку в фиде. Не вошедшие видны в «Подключении» с причиной «Не вошли в лимит тарифа».

Сжатие и размер

Без сжатия, .gz, .zip или .tar.gz — в архиве берётся первый файл .xml или .yml. Сжатие определяется по содержимому. Скачанный файл — до 500 МБ, загрузка — до 5 минут, распакованный фид — до 5 ГБ.

Как часто забираем

ТарифПроверка фида
Базовыйраз в сутки
Стартраз в час
Прораз в 5 мин

Каждая проверка идёт от дешёвого к дорогому: сначала заголовки ETag и Last-Modified — отдавайте их, и неизменившийся фид даже не скачивается; затем хеш файла; затем хеш каждого товара. Переиндексируются только изменённые товары, пропавшие из фида — удаляются. «Забрать сейчас» в «Подключении» — не чаще раза в 5 минут.

Защита от сломанной выгрузки

Если фид не скачался, не разобрался, пустой или в нём меньше половины товаров прошлой загрузки, индекс не меняется. Ошибка видна в «Подключении», владелец получает письмо — при первой ошибке, потом не чаще раза в сутки. Если каталог действительно сократился, нажмите «Применить фид всё равно».

Регионы и языки

Если цены или ассортимент зависят от региона, добавьте регионы в «Подключении»: у каждого свой фид и, по желанию, свой поддомен. Посетитель видит товары своего региона: по поддомену страницы или по значению на странице до строки скрипта:

<script>window.searchplusRegion = 's2';</script>

Лимит тарифа один на все регионы: товар с одним id считается один раз. Языковая версия — отдельный сайт в панели на своём домене или поддомене, со своим тарифом. Версии на пути (shop.ru/en/) пока не поддерживаются.

Строка скрипта

Строка показана в «Подключении». Вставьте её на все страницы — в шапку или перед </body>:

<script src="https://api.searchplus.ru/embed/ID_САЙТА.js" async></script>

Скрипт работает только на домене сайта, его www и поддоменах. Он загружается асинхронно и не мешает странице; если наш сервер недоступен, строка поиска сайта работает как раньше. Настройки из панели доходят до страниц в течение 5 минут — столько браузер хранит скрипт.

Для проверки на копии сайта у разработчика скрипт работает и на localhost, адресах *.test, *.local, *.localhost, *.internal и частных IP вроде 192.168.… — без настроек. Поиски, клики и заказы с таких адресов не попадают в статистику, лимиты тарифа действуют как обычно.

Строка поиска

Скрипт сам находит строку поиска: поле с атрибутом data-searchplus, стандартную строку поиска 1С-Битрикс, поле q, s или search в форме поиска, input[type=search] в шапке. Пока окно поиска загружается, подсказки самого сайта в этом поле не показываются.

Своё поле или кнопку отметьте атрибутом data-searchplus; другие поля и кнопки задаются в «Дизайне поиска» — «Другие поля и кнопки, от которых открывать окно», там же можно отключить поиск строки сайта. Открыть поиск из своего кода:

<button type="button" data-searchplus>Поиск</button>
<script>
  document.querySelector('.catalog-search-link').addEventListener('click', function () { SearchPlus.open('чайник'); });
</script>

Выдача на странице сайта

По умолчанию Enter открывает выдачу в окне поиска. Чтобы выдача была на странице сайта, выберите в «Подключении» → «Настройки скрипта» → «Enter в строке поиска» вариант «Выдача на странице сайта», укажите адрес страницы и параметр запроса (по умолчанию q) и поставьте на эту страницу блок — он заполнится, когда в адресе есть запрос:

<!-- https://shop.ru/search/?q=чайник -->
<div data-searchplus-results></div>

Кнопка «В корзину»

Без настройки кнопок покупки в выдаче нет — карточка ведёт на страницу товара. Чтобы появилась «Купить», объявите обработчик на странице — до строки скрипта или сразу после неё, потому что скрипт читает его при первой загрузке окна:

// До строки скрипта или сразу после неё — не позже загрузки страницы
window.SearchPlus = window.SearchPlus || {};
SearchPlus.cartUrl = '/cart/';
SearchPlus.onAddToCart = function (item) {
  // item = { id: 'A-17', quantity: 1, price: 3790 } — id из фида
  return fetch('/cart/add', { method: 'POST', body: new URLSearchParams({ id: item.id, qty: item.quantity }) })
    .then(function (r) {
      if (!r.ok) throw new Error('товара нет на складе');   // покупатель увидит: Не удалось добавить «…»: товара нет на складе
    });
};

Обработчик может вернуть Promise. Успех — кнопка становится «В корзину» со ссылкой на cartUrl, а в «Конверсию» уходит событие корзины. Ошибка — покупатель видит «Не удалось добавить «…»: » и её текст; false — «Не удалось добавить «…». Попробуйте ещё раз». У товара с вариантами вместо «Купить» — «Выбрать»: размер и цвет выбирают на странице товара.

Чат

Чат с менеджером включается в панели. Свою кнопку чата отметьте атрибутом data-searchplus-chat или вызовите SearchPlus.chat(). Ссылка с ?rag_chat=1 открывает чат — так приходят посетители из писем-ответов. Контакты посетителей хранит SearchPlus по поручению магазина.

<a href="#" data-searchplus-chat>Написать менеджеру</a>

Content-Security-Policy

Если на сайте есть CSP, разрешите наш домен; blob: нужен для превью файлов в чате:

script-src https://api.searchplus.ru;
connect-src https://api.searchplus.ru;
img-src https: blob:;

Если в разделе «Настройки» → «Капча» для чата выбрана капча Яндекса или Google, добавьте и их адреса. Встроенной капче ничего не нужно.

# Яндекс SmartCaptcha
script-src https://smartcaptcha.cloud.yandex.ru;
frame-src https://smartcaptcha.cloud.yandex.ru;

# Google reCAPTCHA
script-src https://www.recaptcha.net https://www.gstatic.com;
frame-src https://www.recaptcha.net;

Старым браузерам без adoptedStyleSheets для стилей окна нужен style-src 'unsafe-inline'; современным — нет.

Для разработчика сайта

Заказы и конверсии

Скрипт запоминает в cookie на домене сайта, из какого поиска покупатель открыл товар (7 дней), и связывает с поиском добавление в корзину и заказ. На сервер уходят только id и артикулы товаров, количество, суммы, валюта и номер заказа — имя, почта, телефон и адрес покупателя не передаются, даже если они есть в событии.

Метрика и GA4

Если сайт уже передаёт электронную торговлю в dataLayer, ничего делать не нужно: скрипт читает события до своей загрузки и после неё. Понимаются Яндекс Метрика (ecommerce.add, ecommerce.purchase) и GA4 (add_to_cart, purchase) через GTM и через gtag. Другое имя контейнера задаётся в «Настройках скрипта». Если электронной торговли нет, передайте события сами через SearchPlus.track.

// Электронная коммерция Яндекс Метрики — скрипт читает её сам
window.dataLayer = window.dataLayer || [];
dataLayer.push({ ecommerce: { currencyCode: 'RUB', purchase: {
  actionField: { id: '5021', revenue: 3790 },
  products: [{ id: 'A-17', price: 3790, quantity: 1 }]
} } });
gtag('event', 'purchase', {
  transaction_id: '5021',
  value: 3790,
  currency: 'RUB',
  items: [{ item_id: 'A-17', price: 3790, quantity: 1 }]
});
window.dataLayer = window.dataLayer || [];
dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: '5021',
    value: 3790,
    currency: 'RUB',
    items: [{ item_id: 'A-17', price: 3790, quantity: 1 }]
  }
});
// Если электронной торговли нет: корзина и заказ вручную
SearchPlus.track('cart', { id: 'A-17', quantity: 1, price: 3790 });
SearchPlus.track('order', { id: '5021', total: 3790, currency: 'RUB', items: [{ id: 'A-17', quantity: 1, price: 3790 }] });

id товара в событии должен совпадать с id в фиде. Если в заказе id другой, передайте sku — артикул из фида: заказ найдёт товар по нему; корзина сопоставляется только по id. Повтор одного заказа учитывается один раз. Пока событий нет, «Конверсия» в панели неактивна, клики в «Статистике» видны как обычно.

Заказы и поиск через API

На тарифах Старт и Про сервер сайта может передавать заказы, оплаты и отмены через API — тогда в воронке появится шаг «Оплата». Через API доступны и поиск, подсказки и помощник — для своей страницы результатов или приложения. Каталог при этом по-прежнему берётся из фида.

Фид в популярных CMS

Подходит выгрузка для Яндекс Маркета (YML) или Google Merchant, которая есть почти в любой CMS — штатно или модулем.