Дубли URL товаров

В своей практике я не раз сталкивалась с проблемой дублей URL товаров. Чаще всего такое случается, если на сайте интернет-магазина сложная структура каталога. Проще говоря — когда существуют категории, которые делятся на подкатегории. И чем больше вложенность, тем больше вероятность того, что ваш товар будет доступен по нескольким URL.

Например:

http://site.ru/cat_lvl_1/cat_lvl_2/tovar/

http://site.ru/cat_lvl_1/tovar

http://site.ru/tovar

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

Что делать, если товар доступен по нескольким URL?

Чтобы избавиться от дублей, достаточно настроить 301 редирект на конечную страницу товара.

Как настроить редирект?

В Битриксе для этого нужно в файле result_modifier.php компонента catalog.element добавить код

$arElement = CIblockElement::GetById($arResult["ID"])->GetNext(); 
if ($APPLICATION->GetCurDir() !== $arElement['DETAIL_PAGE_URL']) 
 { 
   LocalRedirect($arElement['DETAIL_PAGE_URL'], false, "301 Moved permanently"); 
} 

Решение для WooCommerce

if ( stristr($_SERVER['REQUEST_URI'], 'page') != false ) {
	$page = explode('/', $_SERVER['REQUEST_URI']);
	$page = $page[count($page)-2];
	if( is_product_category() && 'http://radyga96.ru'.$_SERVER['REQUEST_URI'] != get_category_link(get_queried_object()->term_id).'page/'.$page.'/' ) {
		header('Location: '.get_category_link(get_queried_object()->term_id).'page/'.$page.'/', true, 301);
		exit();
	}
} else if( is_product_category() && 'http://radyga96.ru'.$_SERVER['REQUEST_URI'] != get_category_link(get_queried_object()->term_id) ) {
		header('Location: '.get_category_link(get_queried_object()->term_id), true, 301);
		exit();
}