Подключение через фид и скрипт
Для магазинов на любой CMS и для 1С-Битрикс без модуля. Каталог SearchPlus берёт из фида товаров, а поиск, подсказки, помощник и чат появляются на сайте от одной строки скрипта. Модуль 1С-Битрикс по-прежнему даёт больше всего: оплаты, цены по группам покупателей, выдачу на странице поиска.
Как подключить
- В панели SearchPlus: «Добавить сайт» → «Фид товаров и скрипт».
- Укажите ссылку на фид — сразу или потом в «Подключении». Первая загрузка начинается сразу.
- Вставьте строку скрипта на все страницы сайта.
- Для конверсий: передавайте события электронной торговли Метрики или GA4 — скрипт прочитает их сам.
Строка скрипта, фиды, регионы, карта полей и ключ для заказов — в панели SearchPlus: сайт → «Настройки» → «Подключение».
Ссылка на фид
- Адрес
httpилиhttps, на любом хосте — не обязательно на домене сайта. - Закрытый фид защищайте токеном в самой ссылке:
https://shop.ru/feed.xml?token=…. Вход по логину и паролю не поддерживается. - Ссылка хранится зашифрованной; в списках панели, письмах и журнале строка параметров скрыта.
- Фид забирает робот с User-Agent
Mozilla/5.0 (compatible; SearchPlusBot/1.0; +https://searchplus.ru/bot)с IP62.109.31.36. Если сервер закрыт файрволом — разрешите этот адрес. - Адреса внутренних сетей и
localhostне запрашиваются, в том числе после перенаправления. Перенаправлений — не больше 5.
Форматы
Формат определяется по содержимому, не по расширению: корень yml_catalog — YML, rss или feed с полями g: — Google Merchant, остальное — свой XML с картой полей.
Формат запоминается при первой загрузке: если вы сменили формат фида, укажите ссылку заново. Обязательные поля товара: id, название, ссылка, цена.
YML (Яндекс Маркет)
| Поле | Что даёт |
|---|---|
offer@id | id товара |
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>Одежда > Футболки</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>Кухня > Чайники</g:product_type>
</entry>
</feed>
Свой XML
После первой загрузки панель предложит карту полей: какой элемент — товар и откуда брать каждое поле. Проверьте её и сохраните в «Подключении» — фид сразу загрузится заново. Пока карта не сохранена, товары не принимаются. Поле указывается так:
- дочерний элемент:
title, вложенный:prices/current; - атрибут:
@skuилиprice/@value; - параметр по имени:
param[@name='Цвет']— в одинарных кавычках; - свойства списком: элемент со списком элементов с атрибутом
name, напримерattrs/attr; - раздел — путь через «/», «>» или «|»; «Группа вариантов» объединяет варианты одного товара.
Наличие: «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'; современным — нет.
Для разработчика сайта
- Объект
window.SearchPlusдополняйте, а не заменяйте:window.SearchPlus = window.SearchPlus || {}. Присваивание нового объекта после скрипта уберётopen,chatиtrack. - Скрипт оборачивает
fetch,navigator.sendBeaconиdataLayer.push: свои адресаsearchplus:он обрабатывает сам, остальные проходят без изменений. - Браузеры под управлением автотестов (
navigator.webdriver, Selenium, Playwright) и поисковые роботы поиск не получают — проверяйте его в обычном браузере. - Для баннера cookie:
rag_sa— из какого поиска открыт товар, 7 дней;rag_ab— участие в сравнении поисков;rag_chat_vid— посетитель чата, год. ВlocalStorage— пропуск проверки браузера и состояние чата. Данных покупателя в них нет. - Если идёт сравнение с поиском сайта, у части посетителей окна SearchPlus нет и
SearchPlus.open()ничего не делает — так и задумано.
Заказы и конверсии
Скрипт запоминает в 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 — штатно или модулем.
- 1С-Битрикс без модуля: «Магазин → Настройки → Экспорт данных», профиль «Яндекс». Ссылка — файл профиля в
/bitrix/catalog_export/. Предложения объединятся по ссылке товара. - Другие CMS: ищите в настройках или каталоге модулей «Яндекс Маркет», «YML», «Google Merchant» или «товарный фид». Важно, чтобы в фиде были ссылки на страницы сайта и цены.
- Своя разработка: соберите YML по примеру выше или отдавайте любой XML с картой полей. Если каталог меняется часто, удобнее API.