Мы сделаем поиск на вашем сайте умным!

Информация, необходимая для эксплуатации программного обеспечения

Для обеспечения работы системы умного поиска Searchbooster.io требуется выполнить следующую последовательность шагов:

  1. зарегистрироваться в системе по ссылке
  2. создать новый проект и присвоить ему название (инструкция)
  3. добавить в проект фид, содержащий информацию о товарах (см. требования к фиду на странице ниже)
  4. установить на целевой сайт JS-код виджета (инструкция) или осуществить интеграцию по API
  5. после индексации содержимого фида система начнет работать и будет активирован тестовый период на 14 дней
  6. во время тестового периода с вами свяжутся сотрудники сервиса и помогут выбрать тариф, выставят счет, после оплаты которого, активируют надлежащий тариф.

Общая схема работы проекта описана тут.

Документация API в формате OpenAPI (swagger)
Скринкаст с описанием основных API методов

Пример рекомендуемого YML

Чем больше полей заполнено — тем лучше

<yml_catalog date="2020-08-04 02:00">
	<shop>
		<name>Магазин</name>
		<company>Магазин</company>
		<url>https://site.ru/</url>

		<brands>
			<brand url="http://site.ru/brand/1">Lego</brand>
			<brand url="http://site.ru/brand/2">Лукойл</brand>
			<brand url="http://site.ru/brand/3">BMW</brand>
		</brands>

		<categories>
			<category url="http://site.ru/cat/1" id="1">Спорт и отдых</category>
			<category url="http://site.ru/cat/2" id="2" parentId="1">Тренажеры и фитнес</category>
			<category url="http://site.ru/cat/3" id="3" parentId="2">Тренажеры</category>
			<category url="http://site.ru/cat/4" id="4" parentId="3">Эллиптические тренажеры</category>
		</categories>

		<offers>
			<offer type="vendor.model" available="true" id="1" group_id="1">
				<url>https://site.ru/product/1</url>
				<price>665890.00</price>
				<price type="opt">655890.00</price>
				<price type="opt2">645890.00</price>
				<oldprice>1399.00</oldprice>
				<currencyId>RUR</currencyId>
				<categoryId>4</categoryId>
				<picture>https://site.ru/images/1.png</picture>
				<typePrefix>Эллиптический тренажер</typePrefix>
				<vendor>Matrix</vendor>
				<model>A3X 2012</model>
				<description>Описание</description>
				<sales_notes>Сборка - бесплатно.</sales_notes>
				<manufacturer_warranty>true</manufacturer_warranty>
				<vendorCode>артикул-товара</vendorCode>
				<snippet>подпись-к-товару</snippet>
				<label>ярлык-на-товар-акция-на-товар</label>
			
				<param name="popularity">3</param>
				<param name="Вес в упаковке" unit="кг">221</param>
				<param name="Длина" unit="м">1.8</param>
				<param name="Ширина" unit="м">0.7</param>
				<param name="Высота" unit="м">1.7</param>
				<pickup>false</pickup>
				<store>false</store>

				<region id="msk">
				    <available>true</available>
			      	    <price>9999</price>
				</region>
				<region id="spb">
				    <available>false</available>
				    <price>11200</price>
				</region>
			</offer>
		</offers>
	</shop>
</yml_catalog>

С официальными рекомендациями от Yandex вы можете ознакомиться здесь: https://yandex.ru/support/marketplace/catalog/yml-requirements.html

Все параметры id должны начинаться не с нуля.

Обратите внимание: ряд параметров, например, свойство url у элемента category не является частью официального формата Yandex Market, однако, если вы будете передавать его, мы расширим возможности поиска. Также не все параметры являются обязательными для заполнения, например, тег url, раздел brands — мы можем использовать YML и без них, но наличие таких полей впоследствии улучшает работу поиска.

Также важным является параметр, названный в примере «popularity». В данном параметре следует указывать условный вес товара, который будет использоваться в ранжировании выдачи. Параметр не является обязательным, но может заметно улучшить работу поиска, настроив выдачу товаров под вас.

Региональность реализуется с использованием тега region. Подобным регионом могут быть города, районы или какие-то условные полигоны. Внутри региона можно настраивать частные случаи свойств товара.

Как передать артикул товара?

Артикул товара следует передавать через отдельный тег <offerCode> — передача артикула товара.

Также есть альтернативный способ передачи артикула через <param name=»Артикул»>

Как вывести произвольный Ярлык у товара и произвольный сниппет?

Реализована поддержка тегов snippet и label.

При помощи первого можно передавать сниппет, а при помощи второго — произвольный ярлык

Поддержка тегов snippet и label.

Упрощённый формат передачи товара

Самый простой способ оформить конкретный товар из вашего магазина. С подобным форматом мы тоже можем работать, но для большей эффективности советуем использовать шаблон, который расположен выше

<offer id="9012">
  <name>Эллиптический тренажер Matrix A3X 2012</name>
  <url>https://site.ru/product/1</url>
  <price>665890.00</price>
  <currencyId>RUR</currencyId>
  <categoryId>4</categoryId>
  <picture>https://site.ru/images/1.png</picture>
</offer>

Механизм callback для вызова пользовательских событий

Наш виджет поддерживает запуск кастомных событий при поиске или использовании поисковых подсказок.

!function(e, t, n, o, r) {
    e[r] = e[r] || function() {
        (e[r].a = e[r].a || []).push(arguments)
    }, e[r].h = o, e[r].n = r, e[r].i = 1 * new Date, s = t.createElement(n), a = t.getElementsByTagName(n)[0], s.async = 1, s.src = o, a.parentNode.insertBefore(s, a)
}(window, document, "script", "https://cdn2.searchbooster.net/scripts/v2/init.js", "searchbooster"), searchbooster({
    theme: "v2",
    apiUrl: "//api4.searchbooster.io",
   
    apiKey: "...",
 
    initialized: function(e) {
        e.on('search', function(query) {
            if (query.query.query.length) {
                gtag('config', 'UA-123-1', {
                    'page_path': '/poisk/rezultaty/?q=' + encodeURIComponent(query.query.query)
                })
               
            }
        })

        e.on('completions', function(query) {
            if (query.query.query.length) {
              console.log(query.query.query);
            }
        });
        e.CombinedSearchInput.mount("header #SearchInput input")
    }
});

Преобразование результатов поиска

В ряде случаев на стороне сайта нужно дополнительно видоизменить результаты поиска. Например это удобно при размещении кода на разных сайтах. Ниже пример инициализации

! function(e, t, n, c, o) {
    e[o] = e[o] || function() {
        (e[o].a = e[o].a || []).push(arguments)
    }, e[o].h = c, e[o].n = o, e[o].i = 1 * new Date, s = t.createElement(n), a = t.getElementsByTagName(n)[0], s.async = 1, s.src = c, a.parentNode.insertBefore(s, a)
}(window, document, "script", "https://cdn2.searchbooster.net/scripts/v2/init.js", "searchbooster"), searchbooster({
    apiKey: "apikey",
    theme: "base",
    apiUrl: "//api4.searchbooster.io",
 
    offer: {
        mapper: function(offer) {
          // ниже идет код преобразования
            try {
                var url = new URL(offer.url);
                offer.url = url.href.replace(url.origin, '');
            } catch (error) {};
            return offer;
        },
    },
    initialized: function(e) {
        e.CombinedSearchInput.mount('.search__field');
    }
});