Bitrix smart filter 404 ошибка

Если в вызове "bitrix:catalog" указать "SET_STATUS_404" => "N"  фильтр работает, но вместо 404 ошибки на страницах с неправильным адресом выходит страница каталога с кодом 200. Как сделать чтобы и 404 отображалась и фильтр работал?
 

Если в вызове «bitrix:catalog» указать «SET_STATUS_404» => «N»  фильтр работает, но вместо 404 ошибки на страницах с неправильным адресом выходит страница каталога с кодом 200.
Как сделать чтобы и 404 отображалась и фильтр работал?

 

помимо параметра компонента -> установить 404, еще нужно в init.php сделать небольшую настройку вывода 404

 

Пользователь 3123557

Заглянувший

Сообщений: 8
Регистрация: 19.04.2019

#3

19.04.2019 09:32:13

Цитата
Сергей . написал:
помимо параметра компонента -> установить 404, еще нужно в init.php сделать небольшую настройку вывода 404

Можете примерно написать как должна работать функция в init.php?

 

Пользователь 180446

Эксперт

Сообщений: 684
Баллов: 92
Регистрация: 11.04.2013

#4

19.04.2019 09:32:30

Цитата
Константин Забурунов написал:
Как сделать чтобы и 404 отображалась и фильтр работал?

Так попробуй

Код
"SET_STATUS_404" => "Y"
 

Пользователь 3123557

Заглянувший

Сообщений: 8
Регистрация: 19.04.2019

#5

19.04.2019 09:37:16

Цитата
Александр Медведев написал:

Цитата
Константин Забурунов  написал:
Как сделать чтобы и 404 отображалась и фильтр работал?

Так попробуй

Код
  "SET_STATUS_404"  =>  "Y" 
 

В таком случае при применении фильтра выдается 404, т.е. фильтр перестает работать.
Это локальный баг сайта или такова специфика работы smart.filter?

 

Локальный баг.
По какому урлу отправляет фильтр?
Какие настройки у него?
Зачем ты фамилию поменял?  :D  

 

Пользователь 3123557

Заглянувший

Сообщений: 8
Регистрация: 19.04.2019

#7

19.04.2019 09:58:51

Цитата
Александр Медведев написал:
Локальный баг.По какому урлу отправляет фильтр?Какие настройки у него?

Файлы с вызовами компонентов section.php строчка 111

https://yadi.sk/d/mlTsG333C69upw

Цитата
Александр Медведев написал:
Зачем ты фамилию поменял?

Хотел инкогнито))

 

Пользователь 3123557

Заглянувший

Сообщений: 8
Регистрация: 19.04.2019

#8

19.04.2019 11:57:18

Цитата
Константин Dev написал:
Цитата Александр Медведев  написал:Зачем ты фамилию поменял? Хотел инкогнито))

Просто API bitrix еще плохо знаю, если ответ был бы на поверхности, то я бы мог выглядеть глупо)

 

Бли неохота скачивать файлы, давай инфу сюда.
Урл и параметры компонентра фильтра

 

Пользователь 3123557

Заглянувший

Сообщений: 8
Регистрация: 19.04.2019

#10

19.04.2019 12:27:50

Цитата
Александр Медведев написал:
Бли неохота скачивать файлы, давай инфу сюда.
Урл и параметры компонентра фильтра

Ок:)

https://clck.ru/FgY5r

Код
            $APPLICATION->IncludeComponent(
                "ik:catalog.smart.filter",
                "",
                array(
                    "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
                    "IBLOCK_ID" => $arParams["IBLOCK_ID"],
                    "SECTION_ID" => $arCurSection['ID'],
                    "FILTER_NAME" => $arParams["FILTER_NAME"],
                    "PRICE_CODE" => $arParams["PRICE_CODE"],
                    "CACHE_TYPE" => $arParams["CACHE_TYPE"],
                    "CACHE_TIME" => $arParams["CACHE_TIME"],
                    "CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
                    "SAVE_IN_SESSION" => "N",
                    "FILTER_VIEW_MODE" => $arParams["FILTER_VIEW_MODE"],
                    "XML_EXPORT" => "Y",
                    "SECTION_TITLE" => "NAME",
                    "SECTION_DESCRIPTION" => "DESCRIPTION",
                    'HIDE_NOT_AVAILABLE' => $arParams["HIDE_NOT_AVAILABLE"],
                    "TEMPLATE_THEME" => $arParams["TEMPLATE_THEME"],
                    'CONVERT_CURRENCY' => $arParams['CONVERT_CURRENCY'],
                    'CURRENCY_ID' => $arParams['CURRENCY_ID'],
                    "SEF_MODE" => $arParams["SEF_MODE"],
                    "SEF_RULE" => $arResult["FOLDER"] . $arResult["URL_TEMPLATES"]["smart_filter"],
                    "SMART_FILTER_PATH" => $arResult["VARIABLES"]["SMART_FILTER_PATH"],
                    "PAGER_PARAMS_NAME" => $arParams["PAGER_PARAMS_NAME"],
                    "INSTANT_RELOAD" => $arParams["INSTANT_RELOAD"],
                ),
                $component,
                array('HIDE_ICONS' => 'Y')
            );
 

А че — норм всё работает, что не так?

Кстати вот ты скрываешь цену, но особо пытливые смогут её вычислить с помощью того же фильтра!

 

Пользователь 3123557

Заглянувший

Сообщений: 8
Регистрация: 19.04.2019

#12

19.04.2019 15:05:46

Цитата
Александр Медведев написал:
Кстати вот ты скрываешь цену, но особо пытливые смогут её вычислить с помощью того же фильтра!

Спасибо за инфу

Цитата
Александр Медведев написал:
А че — норм всё работает, что не так?

Для SEO надо чтобы отдавался 404 код на страницах с неправильными адресами

Цитата
Константин Забурунов написал:
Если в вызове «bitrix:catalog» указать «SET_STATUS_404» => «N»  фильтр работает, но вместо 404 ошибки на страницах с неправильным адресом выходит страница каталога с кодом 200.
Как сделать чтобы и 404 отображалась и фильтр работал?
 

Пользователь 180446

Эксперт

Сообщений: 684
Баллов: 92
Регистрация: 11.04.2013

#13

19.04.2019 19:51:39

Так я ж в самом начале спросил — при включенном SET_STATUS_404 — какой урл отдаёт фильтр? Ты так и не ответил.
Я ведь правильно понял проблему?

Цитата
Константин Dev написал:
В таком случае при применении фильтра выдается 404, т.е. фильтр перестает работать.

С чего ты это взял?

 

Пользователь 3123557

Заглянувший

Сообщений: 8
Регистрация: 19.04.2019

#14

22.04.2019 08:54:19

Цитата
Александр Медведев написал:
Так я ж в самом начале спросил — при включенном SET_STATUS_404 — какой урл отдаёт фильтр? Ты так и не ответил.

Адрес фильтра генерируется правильно, но выдается 404

Спасибо большое за ответы! Так сделал:

Перед вызовом «bitrix:catalog» (компонента)

Код
$page_uri = $APPLICATION->GetCurPage();
if(stripos($page_uri, "/filter_is_applied/")){
  $show_404 = "N";
} else {
  $show_404 = "Y";
}
// строка "filter_is_applied" указана в параметре компонента "SEF_URL_TEMPLATES" в подпараметре "smart_filter"

В параметрах компонента

Код
"SET_STATUS_404" => $show_404,
"SHOW_404" => $show_404,
 

Пользователь 238791

Заглянувший

Сообщений: 5
Регистрация: 31.01.2014

#15

16.01.2020 16:50:11

Если у вас компонент bitrix:news и у вас показывается 404 пр применении фильтрации, то возможно проблема в определении секции, так как в arVariables id секции = 0.
Для себя придумал решение, построенное на принципах из предыдущего поста.
В параметрах компонента.

Код
$sectionTemplate = (stripos($page_uri, "/filter/"))?"#SECTION_CODE_PATH#/filter/#SMART_FILTER_PATH#/":"#SECTION_CODE_PATH#/";
"SEF_URL_TEMPLATES" => array(
         "news" => "",
         "section" => $sectionTemplate,

Доброго времени суток!

На одном проекте встала задача для комплексного компонента каталога, а в частности при выбранном фильтре проверять параметры которые передаются в URL-е и если в нем находятся несуществующие параметры выводить 404 страницу (при ЧПУ для catalog.smart.filter).

Для примера, есть действующая рабочая страница с адресом/catalog/dveri/filter/tolshina_polotna-is-35/apply/ и есть старый адрес (или просто любой спамный адрес) /catalog/dveri/filter/tolshina_polotna-is-999999999/apply/. Т.е. такого параметра в фильтре нет, но страница все равно отдает 200 код и выводит данные по странице без фильтра. Вот её то нам и нужно убрать, т.е. выводить 404 код и страницу.

Сразу хочу сказать, что показанная реализация далеко не идеальная и подходит на минимальных изменениях комплексного шаблона компонента, но каждый может её донастроить «под себя». Мне для выполнения задачи хватило минимальных дополнений.

Что делаем:

1) убеждаемся, что у нас добавлен обработчик события на эпилоге, проверяющий константу ERROR_404 и при её наличии выводящий 404 страницу с нужным кодом. Примерно такого содержания:

AddEventHandler("main", "OnEpilog", "error_page");
function error_page()
{
    $page_404 = "/404.php";
    GLOBAL $APPLICATION;
    if(strpos($APPLICATION->GetCurPage(), $page_404) === false && defined("ERROR_404") && ERROR_404 == "Y")
    {
        $APPLICATION->RestartBuffer();
        CHTTP::SetStatus("404 Not Found");
        include($_SERVER["DOCUMENT_ROOT"].SITE_TEMPLATE_PATH."/header.php");
        include($_SERVER["DOCUMENT_ROOT"].$page_404);
        include($_SERVER["DOCUMENT_ROOT"].SITE_TEMPLATE_PATH."/footer.php");
        die();
    }
}

Добавить его можно в init.php например.

2) Мы будем проверять, что выбран адрес с установленными значениями фильтра (в моём случае это наличие /filter/), а также есть параметры фильтрации для catalog.section (по умолчанию глобальная переменная $arrFilter, у вас может быть другая).

Для этого идем в шаблон нашего catalog.section в файл result_modifier.php и там ставим проверку (можно её поставить перед вызовом catalog.section, как вам угодно)

global $arrFilter;
$curPage = $APPLICATION->GetCurPage(false);

if(strpos($curPage, "/filter/") !== false && empty($arrFilter))
{
	define("ERROR_404","Y");
}

Как вы можете видеть я проверяю вообще на пустоту массива фильтра $arrFilter, если он у вас где-то еще переопределяется и там присутствуют другие значения (кроме тех, что устанавливает catalog.smart.filter) — вам нужна более сложная логика для проверки. Но для общего примера и понимания мне кажется этого достаточно.

Все, после этого если адрес страницы содержит /filter/, а параметров фильтрации нет никаких, будет отдаваться 404 страница.

  • Вы здесь : 
  • Разработчик сайтов и магазинов на битриксе . И не только.
  • /Без рубрики /
  • bitrix Если smart.filter в корне выдает 404 для 2х и более чебоксов

для начала лезем в этот файл
bitrix/modules/main/classes/general/component_engine.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

protected function __checkPath4Template($pageTemplate, $currentPageUrl, &$arVariables)

{

if (!empty($this->greedyParts))

{

$pageTemplateReg = preg_replace(«‘#(?:».implode(«|», $this->greedyParts).«)#'», «(.+?)», $pageTemplate);

$pageTemplateReg = preg_replace(«‘#[^#]+?#'», «([^/]+?)», $pageTemplateReg);

}

else

{

$pageTemplateReg = preg_replace(«‘#[^#]+?#'», «([^/]+?)», $pageTemplate);

}

if (substr($pageTemplateReg, 1, 1) == «/»)

$pageTemplateReg .= «index\.php»;

        $re = ‘/^/([^/]*?/)filter/(.+?)/apply//m’;

        /*

         /decking/filter/brand-is-darvolex/s_depth-is-8/apply/sdfsdfsdfsdfsfsdf

        /decking/terrasnaya-doska-plastik/filter/s_color-is-8/apply/

        /decking/filter/brand-is-darvolex/s_depth-is-8/apply/sdfsdfsdfsdfsfsdf

*/

        $matches_f=array();

        preg_match($re, $_SERVER[‘REQUEST_URI’], $matches_f );

        if($matches_f){

            $pageTemplateReg=«filter/(.+?)/apply/index.php»;

        }

$arValues = array();

if (preg_match(«‘^».$pageTemplateReg.«$'», $currentPageUrl, $arValues))

{

$arMatches = array();

if (preg_match_all(«‘#([^#]+?)#'», $pageTemplate, $arMatches))

{

for ($i = 0, $cnt = count($arMatches[1]); $i < $cnt; $i++)

$arVariables[$arMatches[1][$i]] = $arValues[$i + 1];

}

return true;

}

return false;

}

и исплавляем работу без категорий
2) потом для вашего smart фильтер добавочку — проверку на страницу делаем, что бы не попали страницы с категориями

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

$re = ‘/^/(?:.+?)filter/(.+?)/apply//m’;

/*$str = ‘/decking/filter/brand-is-darvolex/s_depth-is-8/apply/sdfsdfsdfsdfsfsdf

/decking/herrr/filter/brand-is-darvolex/s_depth-is-8/apply/’; */

$matches_f=array();

preg_match($re, $_SERVER[‘REQUEST_URI’], $matches_f );

if($matches_f){

    $arResult[‘VARIABLES’][‘SMART_FILTER_PATH’]=$matches_f[1];

}

$APPLICATION->IncludeComponent(

    ‘bitrix:catalog.smart.filter’,

    ‘catalog’,

    array(

        ‘IBLOCK_TYPE’ => $arParams[‘IBLOCK_TYPE’],

        ‘IBLOCK_ID’ => $arParams[‘IBLOCK_ID’],

        ‘SECTION_ID’ => $arSection[‘ID’],

        ‘FILTER_NAME’ => $arParams[‘FILTER_NAME’],

        ‘PRICE_CODE’ => $arParams[‘PRICE_CODE’],

        ‘CACHE_TYPE’ => $arParams[‘CACHE_TYPE’],

        ‘CACHE_TIME’ => $arParams[‘CACHE_TIME’],

        ‘CACHE_GROUPS’ => $arParams[‘CACHE_GROUPS’],

        ‘SAVE_IN_SESSION’ => ‘N’,

        ‘FILTER_VIEW_MODE’ => ($arTheme[‘FILTER_VIEW’][‘VALUE’] == ‘HORIZONTAL’ ? ‘HORIZONTAL’ : ‘VERTICAL’),

        ‘DISPLAY_ELEMENT_COUNT’ => ‘Y’,

        ‘POPUP_POSITION’ => ($arTheme[‘SIDE_MENU’][‘VALUE’] == ‘LEFT’ ? ‘right’ : ‘left’),

        ‘INSTANT_RELOAD’ => ‘Y’,

        ‘XML_EXPORT’ => ‘N’,

        ‘HIDE_NOT_AVAILABLE’ => ‘N’,

        ‘TEMPLATE_THEME’ => $arParams[‘TEMPLATE_THEME’],

        ‘SEF_MODE’ => strlen($arParams[‘FILTER_URL_TEMPLATE’]) ? ‘Y’ : ‘N’,

        ‘SEF_RULE’ => $arResult[‘FOLDER’].$arParams[‘FILTER_URL_TEMPLATE’],

        ‘SMART_FILTER_PATH’ => $arResult[‘VARIABLES’][‘SMART_FILTER_PATH’],

    ),

    $component

);

День добрый подскажите, как можно решить данную проблемку, подключил с начала комплексный компонент каталог, потом умный фильтр. Зашёл в настройки инфоблока и поставил галочки показывать в умном фильтре, вид в умном фильтре, показывать развёрнутым и всё это напротив свойств цена и бренды. После чего появился фильтр с параметрами цена и бренды, но если нажать на кнопку показать ничего не выдаёт?

Код умного фильтра

 <?$APPLICATION->IncludeComponent(
"bitrix:catalog.smart.filter",
".default",
Array(
    "CACHE_GROUPS" => "Y",
    "CACHE_TIME" => "36000000",
    "CACHE_TYPE" => "A",
    "COMPONENT_TEMPLATE" => ".default",
    "DISPLAY_ELEMENT_COUNT" => "Y",
    "FILTER_NAME" => "arrFilter",
    "FILTER_VIEW_MODE" => "vertical",
    "IBLOCK_ID" => "1",
    "IBLOCK_TYPE" => "Catalog",
    "INSTANT_RELOAD" => "N",
    "PAGER_PARAMS_NAME" => "arrPager",
    "POPUP_POSITION" => "left",
    "SAVE_IN_SESSION" => "N",
    "SECTION_CODE" => "",
    "SECTION_DESCRIPTION" => "-",
    "SECTION_ID" => $_REQUEST["SECTION_ID"],
    "SECTION_TITLE" => "-",
    "SEF_MODE" => "N",
    "TEMPLATE_THEME" => "blue",
    "XML_EXPORT" => "N"
)

);?>

Код каталога

             <?$APPLICATION->IncludeComponent(
"bitrix:catalog",
"Catalog",
Array(
    "ACTION_VARIABLE" => "action",
    "ADD_ELEMENT_CHAIN" => "N",
    "ADD_PICT_PROP" => "-",
    "ADD_PROPERTIES_TO_BASKET" => "Y",
    "ADD_SECTIONS_CHAIN" => "Y",
    "AJAX_MODE" => "N",
    "AJAX_OPTION_ADDITIONAL" => "",
    "AJAX_OPTION_HISTORY" => "N",
    "AJAX_OPTION_JUMP" => "N",
    "AJAX_OPTION_STYLE" => "Y",
    "BASKET_URL" => "/personal/basket.php",
    "CACHE_FILTER" => "N",
    "CACHE_GROUPS" => "Y",
    "CACHE_TIME" => "36000000",
    "CACHE_TYPE" => "A",
    "COMPONENT_TEMPLATE" => "Catalog",
    "DETAIL_ADD_DETAIL_TO_SLIDER" => "N",
    "DETAIL_BACKGROUND_IMAGE" => "-",
    "DETAIL_BRAND_USE" => "N",
    "DETAIL_BROWSER_TITLE" => "-",
    "DETAIL_CHECK_SECTION_ID_VARIABLE" => "N",
    "DETAIL_DETAIL_PICTURE_MODE" => "IMG",
    "DETAIL_DISPLAY_NAME" => "Y",
    "DETAIL_DISPLAY_PREVIEW_TEXT_MODE" => "E",
    "DETAIL_META_DESCRIPTION" => "-",
    "DETAIL_META_KEYWORDS" => "-",
    "DETAIL_PROPERTY_CODE" => array(0=>"",1=>"",),
    "DETAIL_SET_CANONICAL_URL" => "N",
    "DETAIL_USE_COMMENTS" => "N",
    "DETAIL_USE_VOTE_RATING" => "Y",
    "DETAIL_VOTE_DISPLAY_AS_RATING" => "rating",
    "DISPLAY_BOTTOM_PAGER" => "Y",
    "DISPLAY_TOP_PAGER" => "N",
    "ELEMENT_SORT_FIELD" => "sort",
    "ELEMENT_SORT_FIELD2" => "id",
    "ELEMENT_SORT_ORDER" => "asc",
    "ELEMENT_SORT_ORDER2" => "desc",
    "FILTER_VIEW_MODE" => "VERTICAL",
    "IBLOCK_ID" => "1",
    "IBLOCK_TYPE" => "Catalog",
    "INCLUDE_SUBSECTIONS" => "N",
    "LABEL_PROP" => "-",
    "LINE_ELEMENT_COUNT" => "3",
    "LINK_ELEMENTS_URL" => "link.php?PARENT_ELEMENT_ID=#ELEMENT_ID#",
    "LINK_IBLOCK_ID" => "",
    "LINK_IBLOCK_TYPE" => "",
    "LINK_PROPERTY_SID" => "",
    "LIST_BROWSER_TITLE" => "-",
    "LIST_META_DESCRIPTION" => "-",
    "LIST_META_KEYWORDS" => "-",
    "LIST_PROPERTY_CODE" => array(0=>"",1=>"",),
    "MESSAGE_404" => "",
    "MESS_BTN_ADD_TO_BASKET" => "В корзину",
    "MESS_BTN_BUY" => "Купить",
    "MESS_BTN_COMPARE" => "Сравнение",
    "MESS_BTN_DETAIL" => "Подробнее",
    "MESS_NOT_AVAILABLE" => "Нет в наличии",
    "PAGER_BASE_LINK_ENABLE" => "N",
    "PAGER_DESC_NUMBERING" => "N",
    "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
    "PAGER_SHOW_ALL" => "N",
    "PAGER_SHOW_ALWAYS" => "N",
    "PAGER_TEMPLATE" => ".default",
    "PAGER_TITLE" => "Товары",
    "PAGE_ELEMENT_COUNT" => "30",
    "PARTIAL_PRODUCT_PROPERTIES" => "N",
    "PRICE_CODE" => array(0=>"ATTR_PRICE",),
    "PRICE_VAT_INCLUDE" => "Y",
    "PRICE_VAT_SHOW_VALUE" => "N",
    "PRODUCT_ID_VARIABLE" => "id",
    "PRODUCT_PROPERTIES" => array(),
    "PRODUCT_PROPS_VARIABLE" => "prop",
    "PRODUCT_QUANTITY_VARIABLE" => "",
    "SECTIONS_HIDE_SECTION_NAME" => "N",
    "SECTIONS_SHOW_PARENT_NAME" => "Y",
    "SECTIONS_VIEW_MODE" => "TILE",
    "SECTION_BACKGROUND_IMAGE" => "-",
    "SECTION_COUNT_ELEMENTS" => "N",
    "SECTION_ID_VARIABLE" => "SECTION_ID",
    "SECTION_TOP_DEPTH" => "2",
    "SEF_FOLDER" => "/catalog/",
    "SEF_MODE" => "Y",
    "SEF_URL_TEMPLATES" => array("sections"=>"","section"=>"#SECTION_CODE_PATH#/","element"=>"#SECTION_CODE_PATH#/#ELEMENT_ID#/","compare"=>"compare.php?action=#ACTION_CODE#","smart_filter"=>"#SECTION_ID#/filter/#SMART_FILTER_PATH#/apply/",),
    "SET_LAST_MODIFIED" => "N",
    "SET_STATUS_404" => "N",
    "SET_TITLE" => "Y",
    "SHOW_404" => "N",
    "SHOW_DEACTIVATED" => "N",
    "SHOW_PRICE_COUNT" => "1",
    "SHOW_TOP_ELEMENTS" => "N",
    "SIDEBAR_DETAIL_SHOW" => "Y",
    "SIDEBAR_PATH" => "",
    "SIDEBAR_SECTION_SHOW" => "Y",
    "TEMPLATE_THEME" => "blue",
    "TOP_ELEMENT_COUNT" => "9",
    "TOP_ELEMENT_SORT_FIELD" => "sort",
    "TOP_ELEMENT_SORT_FIELD2" => "id",
    "TOP_ELEMENT_SORT_ORDER" => "asc",
    "TOP_ELEMENT_SORT_ORDER2" => "desc",
    "TOP_LINE_ELEMENT_COUNT" => "3",
    "TOP_PROPERTY_CODE" => array(0=>"",1=>"",),
    "TOP_VIEW_MODE" => "SECTION",
    "USE_COMPARE" => "N",
    "USE_ELEMENT_COUNTER" => "Y",
    "USE_FILTER" => "N",
    "USE_MAIN_ELEMENT_SECTION" => "N",
    "USE_PRICE_COUNT" => "N",
    "USE_PRODUCT_QUANTITY" => "N",
    "USE_STORE" => "N",
    "VARIABLE_ALIASES" => array("compare"=>array("ACTION_CODE"=>"action",),)
)

);?>

  • Что такое умный фильтр
  • В чем сложность и вопрос?
  • История исследования и разработки умного фильтра
  • Почему нельзя использовать умный фильтр Битрикса «из коробки»?
  • Ожидания покупателя от работы фильтра
    • Какие флажки помещать в умный фильтр?
  • Требования SEO-специалистов к умному фильтру
    • Уникальные title, keywords, description, h1.
    • «Быстрые ссылки» — готовые результаты фильтра
    • Размещение текста на странице с фильтром
    • Правильные canonical и отсутствие дублей
    • Шаблон правил для robots.txt
    • Автоматическое добавление в sitemap.xml
    • Умный фильтр и коды ответа
    • Фильтр не требует квалификации программиста для настройки
    • Пример реализации механизма расстановки уникальных заголовков на страницах фильтра (сайт dg-home.ru).
  • Ожидания директора магазина
  • Внедрение умного и готового к seo фильтра на ваш проект

Есть проекты — интернет-магазины. Это сложные проекты и для продвижения, и для веб-разработки.

В них сотни и тысячи товаров. Десятки и сотни категорий.

Есть особый тип страниц — страницы фильтра. Их на порядок больше. Они собирают трафик по огромному количеству запросов и важны для SEO.

Пример: на сайте, где продаются стройматериалы, в категории «облицовочный кирпич» ставим флажок «желтый». Видим новую страницу, идеально отвечающую на запрос «желтый облицовочный кирпич». Таким образом можно обеспечить посадочными страницами семантическое ядро любого размера. Настройка ЧПУ и умного фильтра в Битрикс позволяет оптимизировать страницы правильно и для клиента и для поисковых роботов.

Много посадочных также хорошо и для контекстной рекламы — любой запрос найдет свою страницу.

фильтр в битриксе

Вывод: страницы выдачи фильтров интернет-магазина исключительно важны для SEO.

Статья о том, как их делать, оформлять, встраивать в навигацию и продвигать.

Что такое умный фильтр

Фильтр — инструмент выбора товаров в интернет-магазине. Например, в строительном интернет-магазине, чтобы из множества однотипных кирпичей выбрать желаемый цвет, пользователь ставит галочку, страница обновляется, появляются «Абрикосовые кирпичи». Также выбирают Производителя, Размер, и прочие характеристики. Чем больше параметров выберет пользователь, тем уже будет выборка, тем точнее результат.

Фильтры можно любить или нет, но не обращать на них внимание нельзя. Для магазина с 1000 товаров и 30 категориями страниц-фильтров будут десятки тысяч. Про них знают поисковики, они занимают большой процент всех проиндексированных страниц. Это ваш актив, работайте с ним.

Фильтр — это ваш актив. Работайте с ним!

Умный фильтр не только показывает товары, но обладает дополнительными удобствами:

  • Знает, какие комбинации характеристик не дают результата, и запрещает их выбор. Например, бренд Braer не производит абрикосовый кирпич.
  • Знает, в какой категории какие характеристики бывают. Для строительного кирпича не показывает характеристику «Цвет».

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

Знакомьтесь, Умный Фильтр.

умный фильтр в битриксе

Знакомьтесь, господин Уэф. Никакого отношения к статье не имеет, но созвучно ;)

господин Уэф

В чем сложность и вопрос?

Фильтр — штука «чисто программерская». Ставишь галочки, сайт «вжух-вжух» и показывает результат.

Никакой ручной настройки не подразумевает — SELECT-запросы к базе данных в чистом виде.

Однако, есть 2 отрасли, о которых нужно подумать — поисковое продвижение и юзабилити. Первое важно для сеошника, второе — для пользователя. Ведь он покупает ваши товары! Пусть ему будет удобно!

Задача веб-интегратора — заботиться о личном счастье каждого участника веб-системы. Мы провели анализ и придумали компромиссную реализацию умного фильтра, удовлетворяющего всех. В том числе директора магазина.

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

Список требований к умному фильтру участников проекта оформили в виде mindmap (увеличивается при нажатии).

интеллект-карта разработки умного фильтра

История исследования и разработки умного фильтра

Ранее мы касались темы в статьях:

  • Рассказали, чем хорош умный фильтр и как он работает — Подбор по параметрам как на Ситилинке
  • Немного раскрыли в статье технику реализации ЧПУ фильтра на портале недвижимости.
  • Упомянули «быстрый фильтр» — младшего брата «умного фильтра», заточенного для SEO.

Почему нельзя использовать умный фильтр Битрикса «из коробки»?

Битрикс сделал хороший фильтр, но традиционно не подумал о SEO. У коробочного фильтра 1С-Битрикс (версия 16.5.4) несколько серьезных недостатков:

  • Длинные избыточные адреса страниц. Также, если удалить последний /apply/ будет 404 ошибка.
    чпу фильтра битрикса из коробки
  • Отдельную страницу с результатами фильтра нельзя оптимизировать — разместить заголовок и текст. Приходится использовать дополнительные модули (например, наши «Инструменты SEO-специалиста»).
  • Нельзя настроить канонический адрес автоматически.
  • Сброшенный фильтр возвращает вас к оригинальному списку товаров, но меняет адрес страницы: /catalog/pants/filter/clear/apply/ вместо /catalog/pants/.
  • Если у магазина товаров до 50 тысяч, а общее количество свойств не превышает 500, можно смело использовать умный фильтр битрикса. Он справится. Если товаров или свойств в разы больше, придется делать собственную разработку.

Ожидания покупателя от работы фильтра

  1. Фильтр помогает найти товар.
  2. Покупатель хочет, чтобы фильтр работал быстро. Выбрал галки, перезагрузил страницу, увидел результат.
  3. Покупатель хочет, чтобы адреса страниц не менялись. Страницей фильтра можно поделиться, сохранить в закладки, выучить наизусть.
  4. Поведение фильтра предсказуемо и понятно. Владельцы магазинов не всегда хотят тратить ресурсы на удобство работы пользователя с сайтом, оставляют задачи «на потом». Страдают, как правило, пользователи.

Пример страдания: Угадайте, за что отвечает флажок «Тип: Отвертка аккумуляторная» в категории «Отвертки аккумуляторные»? Правильно, ни за что;)

аккумуляторные отвертки в фильтре

Для удовлетворения ожиданий покупатели (и увеличения конверсии в итоге) разработчик должен подумать и выполнить задачи:

  1. Сделать удобный и понятный интерфейс фильтра.
  2. В каждой категории магазина показывать важными несколько свойств, которые помогают покупателю совершить выбор. Остальные скрывать.
  3. Продумать архитектуру фильтра так, чтобы запросов было минимальное количество и работал кеш. Влияет на скорость работы фильтра. Бонус — быстрые страницы хорошо влияют на пользовательские факторы сайта (важно для SEO).
  4. Дополнительное требование про кеш: кэшированные страницы отдают правильный заголовок Last-Modified на дату кеширования.
  5. Порядок сортировки и постраничная навигация должны передаваться в GET-параметрах. Вопрос про канонические страницы ниже в блоке про SEO.
  6. Сделать минимум изменений в существующем программном коде. В идеале — небольшие надстройки «поверх» фильтра из коробки.

Какие флажки помещать в умный фильтр?

Как мы решали проблему сортировки характеристик / свойств фильтра в категориях.

Есть категории — Диваны и Люстры. У диванов есть свойства: двухместный, трехместный. У люстр — материал (сталь, стекло) и стиль (прованс, лофт). Какие флажки должны остаться в фильтре, в каком порядке? На основании чего принимать решение?

Для электроники, бытовой техники, инструментов, компьютеров можно подсмотреть флажки-свойства в Яндекс.Маркете. Как быть для других тематик?

Мы придумали следующий алгоритм:

  • собираем ключевые фразы по названиям всех категорий каталога сайта (включая слова «купить», «цена»)
  • группируем в соответствии с исходными категориями. В «Диваны» кладем «купить кожаный диван», «купить угловой диван», «диван аккордеон купить». В «Люстры» — «купить хрустальную люстру», «купить потолочную люстру».
  • сортируем в каждой группе ключи по убыванию частотности, отсеиваем низкочастотные запросы.
  • Получаем по 2-3 базовых характеристики, которые интересуют покупателей товаров конкретной категории. Для диванов важен тип и материал. Для люстр — материал на первом месте.

пример работы фильтра

Требования SEO-специалистов к умному фильтру

Заметили, да? У всех ожидания, а у нас — требования. Отвечу от имени сеошников. Фильтр может оказаться бомбой замедленного действия, неповоротливой и инертной для поисковой машины. Лучше заранее все продумать и не совершать ошибок.

Фильтр может оказаться бомбой замедленного действия

Для внедрения SEO-требований подойдет «коробочный» фильтр Битрикса. Приблизительная оценка внедрения: ~100 человеко-часов. Перечисляем в порядке важности приоритета. Если бюджета не хватает, отказывайтесь от нижних.

  1. Уникальные title, keywords, description, h1 на страницах умного фильтра. Бонус — красивый и кликабельный сниппет в выдаче.
  2. «Быстрые ссылки» — готовые результаты фильтра
  3. Размещение текста на странице с фильтром
  4. Правильные canonical и отсутствие дублей
  5. Шаблоны правил для robots.txt
  6. Автоматическое добавление в sitemap.xml
  7. Генерация sitemap.xml с правильными ЧПУ одной кнопкой
  8. Фильтр отдает правильные коды ответа.
  9. SEO-специалист справится с настройкой без программиста.

Пояснения некоторых требований.

Уникальные title, keywords, description, h1.

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

«Быстрые ссылки» — готовые результаты фильтра

Мы неоднократно писали про удобство «Быстрых фильтров» для пользователя:

  • https://www.intervolga.ru/blog/marketing/fix-seo-problems-integration/#section9
  • https://www.intervolga.ru/blog/projects/tipovye-pozhelaniya-seo-spetsialistov-dlya-internet-magazinov-na-1s-bitriks-i-sposoby-ikh-realizatsi/#section12

Быстрая ссылка (быстрый фильтр) — это страница с подборкой товаров под конкретный запрос. Например, «фрезеры бош». Быстрая ссылка имеет ЧПУ и находится в зоне видимости пользователя (заодно, и поисковика).

Как программировать быстрые фильтры:

  1. В 1С создаем и загружаем на сайт пустые категории в соответствии с группами фраз из семантического ядра. Группы нельзя переименовывать, это важно.
  2. На стороне сайта настраиваем привязки «Адрес категории — Адрес страницы фильтра».
  3. Пишем код, который подставляет на страницу пустой категории список товаров с указанной страницы фильтра. Получается «ЧПУ над ЧПУ».

настройка быстрых ссылок

Бонус для пользователя — воспользоваться готовой ссылкой быстрее и удобнее, чем ковыряться в фильтре.

Некоторые SEO-специалисты считают, что в интернет-магазине вообще надо закрыть от индексации все страницы с результатами фильтра

Наша позиция — если вы настроите «Быстрые ссылки» и заведете необходимое количество по всему семантическому ядру, остальные страницы можно «спрятать». На продвигаемые запросы будут страницы (что хорошо). Не используемые — закрыты от поискового робота.

Размещение текста на странице с фильтром

В конкурентных тематиках на войне за поисковый трафик мы используем возможности сайта по-максимуму.

Размещение текстов на страницах категорий каталога помогает получить коммерческий трафик на сайт.

Чаще всего эту задачу делают вместе с предыдущей. Если есть категория — быстрая ссылка, значит можно разместить и опубликовать ее описание.

Правильные canonical и отсутствие дублей

На скриншоте ссылки «сортировка по цене», «алфавиту», «показывать по 20 — 40 — 60» не изменяют товары на странице, только их порядок. С точки зрения поисковика, никакой ценности эти страницы не представляют. SEO-специалисты используют специальный «канонический тег» для указания поисковой машине, какую страницу считать главной и оставить в выдаче.

генератор дублей

Инструментов для настройки канонических тегов категорий в битриксе нет. Наш подход к настройке канонических страниц фильтра:

  1. По умолчанию по адресу категории без GET-параметров выводим страницу с сортировкой по цене по возрастанию и внешним видом «Плитка». Эту страницу назначаем канонической с помощью тега
    <link rel="canonical" href="<адрес страницы>" />
  2. 2-я, 3-я и все следующие страницы ссылаются на каноническую страницу по умолчанию. Для Google делаем дополнительно атрибуты
    rel="next" и rel="prev"
  3. Все прочие направления сортировок и внешнего вида товаров (страницы с GET-параметрами, как правило) закрываем от индексации через robots.txt.

Будьте аккуратнее — если среди запросов пользователей попадаются запросы «дорогие диваны», можно специально для них сделать релевантной страницу с сортировкой по цене от большей к меньшей.

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

Шаблон правил для robots.txt

К сожалению, шаблона для настройки robots.txt в части фильтра нет. Каждый проект индивидуален, и задача по настройке файла лежит на плечах SEO-специалиста. Некоторые типовые инструкции:

Правило Пояснение
Disallow: /*PAGEN_
		

Закрываем все страницы пагинации.

Работает для всех битриксов.

Disallow: /*ORDER_BY=
Disallow: /*desc=
Disallow: /*sort=
Disallow: *sort_by=*

Закрываем все страницы сортировки.

Может отличаться в зависимости от проекта.

Disallow: */filter/
Disallow: */apply/
Disallow: /?set_filter=

Запрещают индексацию страниц фильтра.

Внимание, применяйте указанные инструкции только с одобрения специалистов по поисковому продвижению.

Для облегчения первичной настройки воспользуйтесь «Стартовым набором robots.txt» от битрикс.

стартовый набор robots.txt от битрикс

Автоматическое добавление в sitemap.xml

В зависимости от того, закрываете вы страницы фильтра от индексации, или нет — подход к решению задачи может быть различным.

Сейчас мы делаем карту сайта «по старинке» — автоматически генерируем средствами битрикса и полуавтоматически добавляем адреса страниц фильтра.

Умный фильтр и коды ответа

Мы рекомендуем дорабатывать механизм фильтра так, чтобы он умел отдавать следующие коды состояния.

Код состояния Условие
200 OK

Страница с результатами фильтра существует и содержит хотя бы 1 товар.

301 Moved Permanently
		

Для случая, когда вы настраиваете «быструю ссылку». Страница с оригинальным адресом должна отдавать 301 редирект на нее.

304 Not Modified
		

Если поисковик обращается к странице с заголовком If-Modified-Since и страница не изменилась, сервер должен вернуть 304 Not Modified. Ниже цитата из документации Google.


Убедитесь, что ваш веб-сервер поддерживает HTTP-заголовок If-Modified-Since. С его помощью Google может узнать, изменился ли контент сайта с момента последнего сканирования. Эта функция помогает сократить лишнюю нагрузку на сервер — https://support.google.com/webmasters/answer/35769

404 Not Found
		

Для случая, когда адрес страницы неверный.

410 Gone
		

Если сайт знает, что раньше по этому адресу были товары, и больше не будут. — Мы не используем, слишком накладно отслеживать подобные страницы.

Фильтр не требует квалификации программиста для настройки

Каждый раз приходится искать компромисс между удобством использования настроек для не-программистов и временем разработки.

Пока, лучшее решение — все настройки выносить в отдельные инфоблоки (highload-блоки), которые можно редактировать в интерфейсе админки.

Альтернативная попытка — сделать настройку через CSV или другой табличный формат — привела к провалу. Разобраться в хитросплетениях шаблонов названий элементов смог только его автор:

убер-csv для настройки мета-информации
Пример файла настроек

Пример реализации механизма расстановки уникальных заголовков на страницах фильтра (сайт dg-home.ru).

  1. Разработали техническое задания для программирования — описали, какие должны быть заголовки и мета-теги страниц рубрики, фильтра, карточки товара. ТЗ для программиста
  2. Используем бесплатную библиотеку морфологического анализа phpMorphy (http://phpmorphy.sourceforge.net/dokuwiki/). phpMorphy умеет склонять слова русского языка — заголовки и мета-описания получаются фонетически грамотными и привлекательными для пользователей.
  3. Готовим CSV-файлики с настройками для какой категории какое свойство в каком порядке выводить и как правильно склонять его название.
  4. На странице каталога в component_epilog.php размещаем код, который проверяет настройки в CSV для данной категории и устанавливает в соответствии с ними Title, H1, мета-теги. При большом объеме настройки надо выносить в инфоблоки или highload-блоки.

Ожидания директора магазина

  1. Минимум, а лучше отсутствие изменений в учетной системе (1С). Все решать на стороне сайта. Если в 1С установлен свежий модуль обмена данными, никаких доработок на стороне 1С не потребуется. Максимум — аккуратно создать свойства товаров и привязать товары к соответствующим категориям.
  2. Подрядчик должен решить задачу комплексно и ничего не сломать. Подрядчик умеет проектировать интерфейсы и оптимизировать сайты. Желательно участие SEO-специалиста в процессе написания технического задания на фильтр.

Скажем честно — комплексные веб-интеграционные проекты — это ни разу не весело. Мы справляемся, но тяжко всем. Заказчикам в том числе.

Если вы решили поручить работу с умным фильтром своему разработчику — пусть сначала читает нашу статью.

Внедрение умного и готового к seo фильтра на ваш проект

Можно внедрять постепенно, можно сразу все. Трудоемкость разработки всех описанных задач — 80 — 100 часов для среднего интернет-магазина.

Для больших (50 тысяч товаров и больше) появятся проблемы с производительностью, время увеличится на 30-50%.

Мы рассмотрели решение задач, которые возникают перед веб-разработчиками и SEO-специалистами при настройке умного фильтра на проектах с 1С-Битрикс. Будем рады, если вы поделитесь статьей в социальных сетях и напишете в комментариях, если мы что-то забыли.

Статья появилась благодаря работе с нашими заказчиками и их проектами:

  • ООО «КирпичРУ» (kirpich.ru);
  • ООО «Декор и Дизайн» (dg-home.ru);
  • ООО «ЛидерСтройИнструмент» (liderstroyinstrument.ru)
  • ООО «Империя Садовода» (www.imperia-sadovoda.ru)

Интересная ошибка выявлена в работе smart.filter. Не работает фильтрация и кнопка купить если в адресе есть слова с спецсимволами. В консоли BX.debug показывает 404 ошибку.

Ошибка наблюдается для фильтра и фильтраций значений с спецсимволами одинарные кавычки, например Поплин 220 см. ‘Радуга-Актив’ – это проблема в старых версиях продуктов Битрикс, такой проблемы в свежих версиях Битрикс нет. Тестировал на версии 19.0.1100, у сайта с ошибкой версия 17.5.16

Если Битрикс не имеет активную лицензию для обновлений то решить проблему путём обновления нет возможности.

Самый простой способ решения это исключение кавычек из данных в полях свойств каталога.

По ошибке кнопки купить при фильтраций значений с спецсимволами одинарные кавычки – это уже баг в продукте Битрикс даже в новейших версиях.

Подтверждение этому баг-трекер поддержки Битрикс «Не работает добавление в корзину, если в фильтруемом свойстве типа строка, есть спецсимволы». Номер заявки: 119321

Как показывает практика исправят ошибку минимум через пол года.

багтрекер №119321.png

29.01.2023
Хостинг бегет — сапожник без сапог
На днях захожу на страницу поддержки бегет и у меня ничего не работает. Выясняется, что api.beget.com/v1/helpdesk с трояном HEUR:Backdoor.PHP.WebShell.gen и мой Касперский блокирует страницу
ID: 435

25.01.2023
Ошибка работы веб форм битрикс в аякс режиме
Возникла задача внедрить битрикс формы на сайт битрикс, но нюанс в том, что страница лендинг в HTML без подключения битрикс шаблона.
В целом я не предполагал, что возникнут трудности, но этот гибрид удалось запустить. Возникла ошибка открытия результата формы в новом окне, что говорит о том, что аякс не отрабатывает.
ID: 434

19.01.2023
Ник ру покупает отзывы, но выше дна не подняться
Самый убогий хостинг провайдер, который ворует домены у клиентов покупает отзывы.
ID: 433

Понравилась статья? Поделить с друзьями:
  • Bitrix mysql query error 1271 illegal mix of collations for operation union 400
  • Bitrix mysql query error 1054
  • Bitrix mysql connect error localhost 2002 no such file or directory 400
  • Bitrix main db connectionexception mysql connect error localhost
  • Bitrix main argumentexception json error 1 100