Bitrix catalog 404 ошибка

<?    

    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");  

?>                 

<div id="content-column-primary">         

    <?$APPLICATION->IncludeComponent(

            "bitrix:catalog.section",

            "comon",

            Array(

                "IBLOCK_TYPE" => "catalog",

                "IBLOCK_ID" => "14",

                "SECTION_ID" => "58",

                "SECTION_CODE" => $_REQUEST["SECTION_CODE"],

                "SECTION_USER_FIELDS" => array(0=>"",1=>"",),

                "ELEMENT_SORT_FIELD" => "sort",

                "ELEMENT_SORT_ORDER" => "asc",

                "FILTER_NAME" => "arrFilter",

                "INCLUDE_SUBSECTIONS" => "Y",

                "SHOW_ALL_WO_SECTION" => "Y",

                "PAGE_ELEMENT_COUNT" => "9",

                "LINE_ELEMENT_COUNT" => "3",

                "PROPERTY_CODE" => array(0=>"price",1=>"type",2=>"",),

                "SECTION_URL" => "/catalog/#SECTION_CODE#/",

                "DETAIL_URL" => "/catalog/#SECTION_CODE#/#ID#/",

                "BASKET_URL" => "/cart/",

                "ACTION_VARIABLE" => "action",

                "PRODUCT_ID_VARIABLE" => "id",

                "PRODUCT_QUANTITY_VARIABLE" => "quantity",

                "PRODUCT_PROPS_VARIABLE" => "prop",

                "SECTION_ID_VARIABLE" => "SECTION_ID",

                "AJAX_MODE" => "N",

                "AJAX_OPTION_JUMP" => "N",

                "AJAX_OPTION_STYLE" => "N",

                "AJAX_OPTION_HISTORY" => "N",

                "CACHE_TYPE" => "A",

                "CACHE_TIME" => "36000000",

                "CACHE_GROUPS" => "N",

                "META_KEYWORDS" => "-",

                "META_DESCRIPTION" => "-",

                "BROWSER_TITLE" => "NAME",

                "ADD_SECTIONS_CHAIN" => "N",

                "DISPLAY_COMPARE" => "N",

                "SET_TITLE" => "Y",

                "SET_STATUS_404" => "N",

                "CACHE_FILTER" => "N",

                "PRICE_CODE" => array(),

                "USE_PRICE_COUNT" => "N",

                "SHOW_PRICE_COUNT" => "1",

                "PRICE_VAT_INCLUDE" => "Y",

                "PRODUCT_PROPERTIES" => array(),

                "USE_PRODUCT_QUANTITY" => "N",

                "DISPLAY_TOP_PAGER" => "N",

                "DISPLAY_BOTTOM_PAGER" => "Y",

                "PAGER_TITLE" => "Товары",

                "PAGER_SHOW_ALWAYS" => "N",

                "PAGER_TEMPLATE" => "common",

                "PAGER_DESC_NUMBERING" => "N",

                "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",

                "PAGER_SHOW_ALL" => "N",

                "AJAX_OPTION_ADDITIONAL" => ""

            )

        );?> 



    <table class="mceItemTable" st yle="width: 100%" border="0"><tbody><tr><td>



                   Поделись с друзьями:

                <sc ript type="text/javascript" src="//yandex.st/share/share.js" charset="utf-8"></sc ript>

                <div class="yashare-auto-init" data-yashareL10n="ru" data-yashareType="none" data-yashareQuickServices="yaru,vkontakte,facebook,twitter,odnoklassniki,moimir,lj,friendfeed,moikrug,gplus"></div>



                <br mce_bogus="1"></td><td><br mce_bogus="1"></td><td scope="" st yle="width: 200px;" dir="" id="" align="" lang="" valign="">

                Вконтакте:

                <!-- Put this div tag to the place, where the Like block will be -->

                <div id="vk_like"></div>

                <sc ript type="text/javascript">

                    VK.Widgets.Like("vk_like", {type: "button", height: 20});

                </sc ript>



                <br mce_bogus="1"></td></tr>

            <tr><td colspan="3" rowspan="1">

                <div class="fb-like" data-href="http://www.shar-papier.ru" data-send="true" data-width="700" data-show-faces="false" data-font="arial"></div>



                <br></td></tr>



        </tbody>

        </table>



    <?php 

        if($APPLICATION->GetTitle() == "") {

            $APPLICATION->SetTitle("Интернет-магазин");

        } else {

            $APPLICATION->AddChainItem("Интернет-магазин", "/catalog/");

        }

?></div>

 <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Битрикс отдаёт 404 страницу при переходе в подкаталог. Подкаталог имеет элементы, которые тоже отдают 404. Тем не менее список элементов каталога отображается без нареканий. Шаблон каталога стандартный.

$APPLICATION->IncludeComponent(
	"bitrix:catalog", 
	"the_catalog", 
	array(
		"IBLOCK_TYPE" => "content",
		"IBLOCK_ID" => "25",
		"BASKET_URL" => "/personal/basket.php",
		"ACTION_VARIABLE" => "action",
		"PRODUCT_ID_VARIABLE" => "id",
		"SECTION_ID_VARIABLE" => "SECTION_ID",
		"PRODUCT_QUANTITY_VARIABLE" => "quantity",
		"SEF_MODE" => "Y",
		"SEF_FOLDER" => "/the_catalog/",
		"AJAX_MODE" => "N",
		"AJAX_OPTION_JUMP" => "N",
		"AJAX_OPTION_STYLE" => "Y",
		"AJAX_OPTION_HISTORY" => "N",
		"CACHE_TYPE" => "A",
		"CACHE_TIME" => "36000000",
		"CACHE_FILTER" => "N",
		"CACHE_GROUPS" => "Y",
		"SET_TITLE" => "N",
		"SET_STATUS_404" => "Y",
		"USE_ELEMENT_COUNTER" => "Y",
		"USE_FILTER" => "Y",
		"FILTER_NAME" => "",
		"FILTER_FIELD_CODE" => array(
			0 => "",
			1 => "",
		),
		"FILTER_PROPERTY_CODE" => array(
			0 => "",
			1 => "SIZE",
			2 => "",
		),
		"FILTER_PRICE_CODE" => array(
		),
		"USE_REVIEW" => "N",
		"USE_COMPARE" => "Y",
		"PRICE_CODE" => array(
			0 => "RUB",
		),
		"COMPARE_NAME" => "CATALOG_COMPARE_LIST",
		"COMPARE_FIELD_CODE" => array(
			0 => "",
			1 => "",
		),
		"COMPARE_PROPERTY_CODE" => array(
			0 => "PRODUCER",
			1 => "COMPLEXITY",
			2 => "TYPE",
			3 => "SIZE",
			4 => "",
		),
		"COMPARE_ELEMENT_SORT_FIELD" => "sort",
		"COMPARE_ELEMENT_SORT_ORDER" => "asc",
		"USE_PRICE_COUNT" => "Y",
		"SHOW_PRICE_COUNT" => "1",
		"PRICE_VAT_INCLUDE" => "Y",
		"PRICE_VAT_SHOW_VALUE" => "N",
		"USE_PRODUCT_QUANTITY" => "N",
		"CONVERT_CURRENCY" => "N",
		"SHOW_TOP_ELEMENTS" => "N",
		"SECTION_COUNT_ELEMENTS" => "Y",
		"SECTION_TOP_DEPTH" => "2",
		"PAGE_ELEMENT_COUNT" => "12",
		"LINE_ELEMENT_COUNT" => "6",
		"ELEMENT_SORT_FIELD" => "CATALOG_AVAILABLE",
		"ELEMENT_SORT_ORDER" => "DESC",
		"ELEMENT_SORT_FIELD2" => $_REQUEST["by"],
		"ELEMENT_SORT_ORDER2" => $_REQUEST["order"],
		"LIST_PROPERTY_CODE" => array(
			0 => "ARTICUL",
			1 => "SET",
			2 => "SIZE2",
			3 => "TYPE",
			4 => "SIZE",
			5 => "",
		),
		"INCLUDE_SUBSECTIONS" => "Y",
		"LIST_META_KEYWORDS" => "-",
		"LIST_META_DESCRIPTION" => "-",
		"LIST_BROWSER_TITLE" => "-",
		"DETAIL_PROPERTY_CODE" => array(
			0 => "ARTICUL",
			1 => "COMPLEXITY",
			2 => "TYPE",
			3 => "SIZE",
			4 => "COMPLECT",
			5 => "MARKA",
			6 => "",
		),
		"DETAIL_META_KEYWORDS" => "-",
		"DETAIL_META_DESCRIPTION" => "-",
		"DETAIL_BROWSER_TITLE" => "-",
		"LINK_IBLOCK_TYPE" => "",
		"LINK_IBLOCK_ID" => "",
		"LINK_PROPERTY_SID" => "",
		"LINK_ELEMENTS_URL" => "link.php?PARENT_ELEMENT_ID=#ELEMENT_ID#",
		"USE_ALSO_BUY" => "N",
		"USE_STORE" => "N",
		"DISPLAY_TOP_PAGER" => "Y",
		"DISPLAY_BOTTOM_PAGER" => "Y",
		"PAGER_TITLE" => "",
		"PAGER_SHOW_ALWAYS" => "N",
		"PAGER_TEMPLATE" => "catalog",
		"PAGER_DESC_NUMBERING" => "N",
		"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
		"PAGER_SHOW_ALL" => "Y",
		"AJAX_OPTION_ADDITIONAL" => "",
		"HIDE_NOT_AVAILABLE" => "N",
		"ADD_SECTIONS_CHAIN" => "Y",
		"ADD_ELEMENT_CHAIN" => "N",
		"DISPLAY_ELEMENT_SELECT_BOX" => "N",
		"ADD_PROPERTIES_TO_BASKET" => "Y",
		"PRODUCT_PROPS_VARIABLE" => "prop",
		"PARTIAL_PRODUCT_PROPERTIES" => "N",
		"PRODUCT_PROPERTIES" => array(
		),
		"DETAIL_CHECK_SECTION_ID_VARIABLE" => "N",
		"SEF_URL_TEMPLATES" => array(
			"sections" => "",
			"section" => "#SECTION_CODE_PATH#/",
			"element" => "#SECTION_CODE#/#ELEMENT_CODE#/",
			"compare" => "compare.php?action=#ACTION_CODE#",
		),
		"VARIABLE_ALIASES" => array(
			"compare" => array(
				"ACTION_CODE" => "action",
			),
		)
	),
	false
);

Оглавление

  • Проверка сайта и настройка 404-й страницы
  • Ошибка элемент/раздел не найден
  • Оформляем 404-ю страницу

Вы наверняка сталкивались с проблемой когда при обращении к несуществующему адресу в каталоге товаров или в разделе новости, вместо 404-й страницы получали ответ «не найден раздел или элемент» при этом серверу в заголовка отдавался статутс 200 ok а не 404 not found. Это не правильно, т.к. поисковик может проиндексировать пустые страницы которые впоследствии повысят количество отказов при заходе реальных посетителей на сайт. И так почему так происходит и как этого избежать.

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

Во-первых проверим наличие файла 404.php который должен лежать в корне вашего сайта. Если его нет, можете его создать с таким содержимым:


<?
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
 
CHTTP::SetStatus("404 Not Found");
@define("ERROR_404","Y");
 
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
 
$APPLICATION->SetTitle("404 Not Found");
 
$APPLICATION->IncludeComponent("bitrix:main.map", ".default", Array(
	"LEVEL"	=>	"3",
	"COL_NUM"	=>	"2",
	"SHOW_DESCRIPTION"	=>	"Y",
	"SET_TITLE"	=>	"Y",
	"CACHE_TIME"	=>	"3600"
	)
);
 
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Ключевыми в этом файле являются строки:


<?
CHTTP::SetStatus("404 Not Found");
@define("ERROR_404", "Y");

Возможно у вас есть сам файл, но отсутствуют эти строки, что и приводит к ошибке в работе 404-й.

Во-вторых, проверьте файл .htaccess (если он поддерживается вашим сервером), в нём должна присутствовать такая директива:


ErrorDocument 404 /404.php

Теперь перейдите к настройкам вашего компонента (обычно это bitrix.catalog или bitrix.news), блоке «настройки 404 ошибки» отметьте галочку «Устанавливать статус 404» (название галочки может отличаться в компонентах, в некоторых она называется «Устанавливать статус 404, если не найдены элемент или раздел:»).
Настройка 404-й страницы
Затем в файл /bitrix/php_interface/init.php (или /local/php_interface/init.php) добавьте следующий код:


<?
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();
	}
}

Этим кодом, мы добавляем в OnEpilog свой обработчик события, который считывает установленный компонентом параметр ERROR_404 и запускает перегрузку буфера подключая файл 404-й страницы. Обычно это 404.php лежащий в корне сайта. Хотя при соответствующем оформлении 404-й страницы, можно (даже будет лучше) не подключать файлы header.php и footer.php.

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


<?
array(
    "CONDITION" => "#^/([a-zA-Z]+)/([0-9]+)/#",
    "RULE" => "",
    "ID" => "bitrix:catalog.section",
    "PATH" => "/index.php",
),

Обычно в CONDITION — создаётся некорректное регулярное выражение, которое срабатывает на все страницы, в том числе и на не существующие и вместо 404-й страницы, сайт выдаёт что-то ещё, обычно страницу или компонент указанный в PATH этого правила. Если такое правило есть, его необходимо скорректировать или удалить из urlrewrite.php.

Ошибка элемент/раздел не найден

Такая ошибка возникает когда шаблоны ЧПУ в инфоблоке и в настройках компонента не совпадают. Или же пользователь ввёл некорректный URL близкий к шаблону. Проверьте настройки инфоблока:

Настройка ЧПУ в инфоблоке

И настройки ЧПУ в компоненте (обычно комплексном):

Настройка ЧПУ в комплексном компоненте

Так же следует проверить соответствие шаблона и свойств элемента. Например в примере в шаблон URL детальной страницы входит символьный код элемента #ELEMENT_CODE#, если у элемента нет символьного кода, вы получите ошибку. Но правильнее конечно, не показывать такие сообщения (элемент не найден, раздел не найден), компонент должен установить статус 404 и должен сработать скрипт показывающий пользователю /404.php с соответствующим ответом в заголовке. В противном случае, могут быть проблемы с SEO сайта.

Оформляем 404-ю страницу

По умолчанию 404.php в 1С Битрикс содержит компонент карты сайта и выводит список ссылок взятый из файлов формирования меню. При этом на странице так же остаётся полноценная шапка и подвал сайта (отрабатывают header.php и footer.php шаблона), что на мой взгляд не правильно. Кстати сеошники из компании Кокос, с которыми мне приходилось сталкиваться, так же не рекомендовали выводить шапку и подвал с полноценной навигацией по сайту на 404-й странице.

На мой взгляд 404-я должна говорить пользователю что он всё ещё на том же сайте где и был секунду назад,  отвечать на вопрос почему он здесь и что делать дальше и отдавать соответствующие заголовки поисковому роботу.

И так давайте выведем 404-ю страницу битрикс без шапки и подвала, но при этом подтянем ядро системы, чтобы мы могли подключить стили шаблона по средствам константы SITE_TEMPLATE_PATH. Убираем всё лишнее, подключаем ядро, получаем такой файл:


<?
//Подключаем ядро битрикса без шапки
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
//Устанавливаем необходимые заголовки
CHTTP::SetStatus("404 Not Found"); @define("ERROR_404","Y");


Чтобы посетитель не подумал что он покинул ваш сайт, стили оформления 404-й страницы должны быть такими же как и на всём сайте (заголовки, шрифты, цвета, иконки, картинки). Обязательно (минимально) на этой странице должен быть логотип.

Я люблю когда сообщения об ошибках читаются сразу, поэтому пишу их большими шрифтами, например Open Sans Condensed, не мельчите и объясняйте пользователю куда он попал и что ему дальше делать (вернуться на главную страницу, сделать запрос в форме поиска, в конце концов позвонить или написать вам). У меня получилась такая страничка:


<? require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); //Подключаем ядро битрикса без шапки CHTTP::SetStatus("404 Not Found"); //Устанавливаем необходимые заголовки @define("ERROR_404","Y");  ?>
<link href='https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300,300italic,700|Arimo:400,400italic,700,700italic|Noto+Sans:400,400italic,700,700italic&subset=latin,cyrillic-ext' rel='stylesheet' type='text/css'>

<div class="container404">
	<img src="<?=SITE_TEMPLATE_PATH;?>/images/logo.jpg" alt="Название сайта">
	<span class="title404">404</span>
	<span class="subtitle404">Страница не найдена</span>
	<span class="description404">Возможно запрашиваемая вами страница была удалена или перемещена. Вернуться <a rel="nofollow" href="/">на главную</a>?</span>
	<span class="contacts404">позвоните нам: <span class="phone404"> +7 (999) 000 - 00 - 00</span> или напишите на e-mail: <a target="_blank" href="mailto:example@mail.ru">example@mail.ru</a></span>
</div>

Добавим немного CSS стилей для полноты картины:


.container404 { text-align: center; width: 1200px; margin: 0 auto; margin-top: 100px;}
.container404 img { display: block; margin: 0 auto; margin-bottom: 50px; }
.container404 a { color: #F0A229; }
.container404 a:hover { text-decoration: none; }
.title404 { font-family: 'Open Sans Condensed', sans-serif; font-size: 60px; line-height: 80px; display: block; }
.subtitle404 { font-family: 'Open Sans Condensed', sans-serif; font-size: 40px; line-height: 60px; display: block; }
.description404 { font-family: 'Open Sans Condensed', sans-serif; font-size: 30px; line-height: 40px; display: block;}
.contacts404 { margin:0 auto; width: 800px; padding: 10px 0px 100px 0px; font-family: 'Open Sans Condensed', sans-serif; font-size: 30px; line-height: 40px; }
.phone404 { font-weight: bold; }

Вроде бы всё. Ах да чуть не забыл! Нужно проверить всё ли правильно отдаётся поисковому роботу. Для этого перейдите на сайт, вызовете консоль разработчика (обычно клавиша F12 или пункт в меню инструментов браузера «инструменты разработчика» или что-то подобное), перейдите на вкладку Сеть/Network введите адрес несуществующей страницы и посмотрите какой ответ вернёт сервер (вкладка Status):

Работа 404-й страницы

Как видите всё в порядке, сервер вернул 404-й заголовок, что означает — страница не существует, а следовательно поисковик не проиндексирует ненужные адреса и в поиск попадут только реально существующие документы вашего сайта. Теперь точно всё. Желаю удачи!

Очень важным вопросом при SEO продвижении сайта является 404 статус несуществующих страниц сайта.

В Битрикс при заходе на страницы, где не размещен комплексный компонент, ошибка 404 отдается нормально. А вот где есть комплексный компонент, есть проблемы, поэтому нужно знать как правильно сделать настройки.

Первым делом в настройках комплексного компонента bitrx:news или bitrix:catalog устанавливаем отдачу 404 ошибки:

Далее нужно правильно настроить ЧПУ инфоблока из которого выводится контент и включить поддержку ЧПУ в комплексном компоненте. Будем рассматривать компонент bitrix:catalog.

Установим следующие настройки в инфоблоке и тоже самое зададим в настройках компонента.

Если для вывода раздела использовать шаблон #SECTION_CODE#, то получим следующее:

/catalog/section/element/ - элемент. 200 OK
/catalog/section/element123/ - элемент. ошибка 404
/catalog/section123/element/ - элемент. 200 OK
/catalog/section/ - раздел. 200 OK
/catalog/section123/ - раздел. 200 OK

Поэтому правильным вариантом будет использовать шаблон #SECTION_CODE_PATH#.

С этим шаблоном получим следующее:

/catalog/section/element/ - элемент. 200 OK
/catalog/section/element123/ - элемент. ошибка 404
/catalog/section123/element/ - элемент. ошибка 404
/catalog/section/ - раздел. 200 OK
/catalog/section123/ - раздел. ошибка 404

Результат отличный. Делаем вывод, что лучше использовать #SECTION_CODE_PATH#. Однако при использовании компонента bitrix:news, даже с такой настройкой будут некоторые неисправимые проблемы:

/news/section/element/ - элемент. 200 OK
/news/section/element123/ - элемент. ошибка 404
/news/section123/element/ - элемент. 200 OK
/news/section/ - раздел. 200 OK
/news/section123/ - раздел. ошибка 404

2021.08.27

Если у вас настроен вывод товаров из вложенных разделов каталога в разделах верхнего уровня или непосредственно в корне каталога и при переходе в карточку товара у вас возникает ошибка 404, то зайдите в параметры компонента каталога, найдите и активируйте чек-бокс «Использовать основной раздел для показа элемента«

«Экстренное» подключение просмотренных товаров

Fix счетчика товара (BX 23.300)

Наши решения

IntecUniverse — интернет-магазин с конструктором дизайна

31 430 руб.
44 900 руб.

Интернет-магазин на редакции Старт с конструктором дизайна — IntecUniverse LITE

29 925 руб.
39 900 руб.

INTEC.Food — магазин доставки еды, суши, пиццы с корзиной и оплатой. Сайт для ресторанов и кафе

29 925 руб.
39 900 руб.

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

29 925 руб.
39 900 руб.

INTEC. SEO — модуль поисковой оптимизации: seo — фильтр, генерация сео — текстов, H1, мета-тегов

11 175 руб.
14 900 руб.

INTEC Конструктор сайтов — визуальный редактор структуры и дизайна

4 950 руб.
9 900 руб.

INTEC: Мультирегиональность — региональная сеть вашего сайта с продвижением в поисковиках

7 450 руб.
14 900 руб.

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Bitrix 500 ошибка ajax
  • Bioshock remastered ошибка 0xc00000142
  • Bioshock infinite русификатор ошибка
  • Bitmos oxy 6000 ошибка error o2
  • Bitlocker ошибка данных crc

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии