Шаблон пагинации. Добавляем meta-теги "next" и "prev"

Уже не первый раз от сеошников приходит задача о том, что на страницах пагинации необходимо выводить теги "prev" и "next" с указанием адресов предыдущей и следующей страниц. Данный пост о расширении шаблона пагинации для данной задачи

Рассмотрим произвольный шаблон (решение не имеет к стилям, прописанным в шаблоне, никакого отношения, поэтому подойдет любой ваш шаблон).

Для начала, после подключения пролога в шаблоне, подключим класс Asset:

use Bitrix\Main\Page\Asset;
$asset = Asset::getInstance();

Далее, определим функцию, которая из настроек сайтов в базе вытягивает информацию о текущем сайте:

if(!function_exists('PaiGetSiteInfo')){
	function PaiGetSiteInfo($siteId = SITE_ID)
	{
		if (empty($siteId))
		{
			return "";
		}
		$arSite = false;
		$obCache = new \CPHPCache();
		if ($obCache->InitCache(36000, 'site_' . $siteId, '/'))
		{
			$arSite = $obCache->GetVars();
		} elseif ($obCache->StartDataCache())
		{
			$arSite = \CSite::GetByID($siteId)->Fetch();
			$obCache->EndDataCache($arSite);
		}
		return $arSite;
	}
}

Далее, определяем ссылки на предыдущую и следующую страницы:

$context = \Bitrix\Main\Application::getInstance()->getContext();
$server = $context->getServer();
$curPage = $server->getRequestUri();
$arSiteInfo = PaiGetSiteInfo();
$arResult['PROTOCOL'] = CMain::IsHTTPS() ? "https://" : "http://";
$arResult['SERVER_NAME'] = $arSiteInfo['SERVER_NAME'];
$arResult['NEXT_NUM'] = $arResult['NavPageNomer'] + 1;
$arResult['PREV_NUM'] = $arResult['NavPageNomer'] - 1;
$arResult['NEXT_PAGE'] = $arResult['PROTOCOL'] . $arResult['SERVER_NAME'] . $arResult['sUrlPath'] .
	'?' .$strNavQueryString.'PAGEN_'.$arResult["NavNum"].'=' . $arResult['NEXT_NUM'];
$arResult['PREV_PAGE'] = $arResult['PROTOCOL'] . $arResult['SERVER_NAME'] . $arResult['sUrlPath'] .
	'?' .$strNavQueryString.'PAGEN_'.$arResult["NavNum"].'=' . $arResult['PREV_NUM'];

И последний штрих - выводим все это в шапку сайта (естественно, с проверкой количества страниц - если страница всего одна, то выводить ничего и не нужно):

	if(intval($arResult['NavPageCount']) > 1){
	if($arResult['PREV_NUM']>=1){
		$asset->addString('<link rel="prev" href="'.$arResult['PREV_PAGE'].'" />');
	}

	if($arResult['NEXT_NUM']<=$arResult['NavPageCount']){
		$asset->addString('<link rel="next" href="'.$arResult['NEXT_PAGE'].'" />');
	}

	if($arResult['NavPageNomer']>1){
		$APPLICATION->SetDirProperty('robots','noindex,follow');
	
		// если не выводится, можете попробовать так: 
		// asset->addString('<meta name="robots" content="noindex, follow" />');
	}
}

Если заметили, тут кроме ссылок на следующую и предыдущую страницы, также выведен тег robots. В его логику подробно вдаваться не буду. Скажу только, что сео-шники сказали "Надо!". Если вы считаете иначе - удалите этот кусок.

Количество показов: 5069
10.03.2017

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.