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

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

2135
10.03.2017
06.11.2017

Уже не первый раз от сеошников приходит задача о том, что на страницах пагинации необходимо выводить теги "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. В его логику подробно вдаваться не буду. Скажу только, что сео-шники сказали "Надо!". Если вы считаете иначе - удалите этот кусок.



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Отличное решение. В дополнение к нему, еще нужно сделать что бы к Title дописовалось Страница 1, 2 ... и .тд. Нашел решение в интернете. в bitrix/php_interface/init.php прописать код: 0) { $APPLICATION->SetPageProperty("title", $APPLICATION->GetPageProperty("title") . " – " . intval($_GET["PAGEN_1"]) . " страница"); //$APPLICATION->SetPageProperty("keywords",""); $APPLICATION->SetPageProperty("description", $APPLICATION->GetPageProperty("title"). "| ➥ Лучшие Цены ✅ Акции и Спецпредложения ➤ Качественный Сервис ✈ Бесплатная Доставка ✔ Заходите!"); } if ($_GET['PAGEN_1']==='1' && isset($_GET['PAGEN_1'])) { LocalRedirect($APPLICATION->GetCurPageParam("", array("PAGEN_1"))); } } ?> Немножко модернизировал Description, Пойду искать решение, как еще Страница1 - добавить к H1
  • Ответить

Добавить комментарий

captcha

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