Запрет индексации поисковыми системами страниц, для которых отключена индексация внутри системы

Структура сайта, информационное элементы, товары и группы имеют опцию "Индексировать". Данная опция влияет на индексацию встроенной поисковой системой, однако ее можно использовать и для запрета индексации таких страниц поисковыми системами.

В код основного макета в секцию <head> внесите следующий код:

<?php
// Запрет на индексацию узла структуры
$bNoindex = !Core_Page::instance()->structure->indexing;

if (!$bNoindex)
{
	if (is_object(Core_Page::instance()->object))
	{
		// Информационная система
		if (Core_Page::instance()->object instanceof Informationsystem_Controller_Show)
		{
			if (Core_Page::instance()->object->item)
			{
				$oInformationsystem_Item = Core_Entity::factory('Informationsystem_Item', intval(Core_Page::instance()->object->item));
				$bNoindex = !$oInformationsystem_Item->indexing;
			}
			// Первая страница - 0, запрет индексации /page-XX/
			elseif (Core_Page::instance()->object->page > 0)
			{
				$bNoindex = TRUE;
			}
			// Может быть массивом, идентификатором группы или FALSE
			elseif (is_array(Core_Page::instance()->object->group) || Core_Page::instance()->object->group)
			{
				$group_id = is_array(Core_Page::instance()->object->group)
					? Core_Array::first(Core_Page::instance()->object->group)
					: intval(Core_Page::instance()->object->group);
					
				if ($group_id)
				{
					$oInformationsystem_Group = Core_Entity::factory('Informationsystem_Group', $group_id);
					$bNoindex = !$oInformationsystem_Group->indexing;
				}
			}
		}
		// Магазин
		elseif (Core_Page::instance()->object instanceof Shop_Controller_Show)
		{   
			if (Core_Page::instance()->object->item)
			{
				$oShop_Item = Core_Entity::factory('Shop_Item', intval(Core_Page::instance()->object->item));
				$bNoindex = !$oShop_Item->indexing;
			}
			// Первая страница - 0, запрет индексации /page-XX/
			elseif (Core_Page::instance()->object->page > 0)
			{
				$bNoindex = TRUE;
			}
			else
			{
				// Может быть массивом, идентификатором группы или FALSE}
				if (is_array(Core_Page::instance()->object->group) || Core_Page::instance()->object->group)
				{
					$group_id = is_array(Core_Page::instance()->object->group)
						? Core_Array::first(Core_Page::instance()->object->group)
						: intval(Core_Page::instance()->object->group);
					
					if ($group_id)
					{
						$oShop_Group = Core_Entity::factory('Shop_Group', $group_id);
						$bNoindex = !$oShop_Group->indexing;
					}
				}
				
				// Индексация группы не запрещена, проверяем на фильтры в корне и в группе
				if (!$bNoindex
					// Нет примененного SEO-фильтра
					&& (is_null(Core_Page::instance()->object->filterSeo)
						// Есть примененный SEO-фильтр без цен и фильтрации по ценам идет
						|| Core_Page::instance()->object->filterSeo->price_from == 0
							&& Core_Page::instance()->object->filterSeo->price_to == 0
							&& count(Core_Page::instance()->object->getFilterPrices())
						// Есть примененный SEO-фильтр с ценами и фильтрация по ценам не идет
						|| Core_Page::instance()->object->filterSeo->price_from >=0
							&& Core_Page::instance()->object->filterSeo->price_to > 0
							&& !count(Core_Page::instance()->object->getFilterPrices())
					)
					// Условия фильтра заданы по свойствам, ценам или производителю
					&& (count(Core_Page::instance()->object->getFilterProperties())
						|| count(Core_Page::instance()->object->getFilterPrices())
						|| Core_Page::instance()->object->producer
					)
					// Индексация SEO-фильтра запрещена
					|| !is_null(Core_Page::instance()->object->filterSeo) && !Core_Page::instance()->object->filterSeo->indexing
				)
				{
					$bNoindex = TRUE;
				}
			}
		}
	}
}

if ($bNoindex)
{
   ?><meta name="robots" content="noindex, follow" /><?php
   echo PHP_EOL;
}
?>

Дополнительно см. Запрет на индексацию фильтра, построенного через ЧПУ.

Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.

Комментарии

  • Без темы

    битый код
    см строка 39/40 и 54/55

    18.03.2024 23:45:48
    Puma

    Без темы

    Спасибо, поправили.

    19.03.2024 09:54:06
    hostcms
  • Без темы

    если магазин привязан к морде, на главной получается noindex!
    пришлось додрабоать
    elseif (!is_array(Core_Page::instance()->object->group) && Core_Page::instance()->object->group!=0)
    вроде норм теперь

    17.10.2023 22:01:11
    Puma

    Без темы

    Спасибо, добавили проверку в код на "if ($group_id)"

    18.10.2023 11:47:39
    hostcms

    Без темы

    для ИС я бы тоже это добавила бы..
    и они бывают на морде

    14.11.2023 22:11:21
    Puma

    Без темы

    Но для ИС и так давно была проверка на
    elseif (Core_Page::instance()->object->group)
    доработали с учетом того, что у ИС теперь тоже может быть массив.

    22.11.2023 12:34:27
    hostcms
  • Версия от 6,9,4

    При работе в версиях от 6.9.4 и кодом быстрых фильтров этот код срабатывает на всех страницах магазина как <meta name="robots" content="noindex, follow" />

    17.10.2020 20:14:07
    maria.ats
    maria.ats

    Без темы

    Причиной этого может являться то, что у вас у контроллера ->group представлен в виде массива. Код примера обновлён.

    19.10.2020 09:36:25
    hostcms