Всем известно, что 1С-Битрикс, особенно не последних версий, плохо оптимизирован под требования SEO-специалистов(адекватные и не очень). Практически каждому веб-разработчику приходилось сталкиваться с однотипными требованиями сеошников: убрать дубли страниц, перевести все урлы на ЧПУ, создать миллионы тегов с уникальными метатегами и т.д. В этой статье я напишу как реализовать некоторые из требований.
Предупреждение: некоторое здесь может быть говнокодом/костылями/велосипедами, а может даже вообще не заработать на вашем проекте.
Дубли страниц
Настройка редиректа с не-www на www:
#nginx:
server {
server_name "~^(?!www\.).*" ;
return 301 $scheme://www.$host$request_uri;
}
#apache:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Настройка редиректа с www на не-www:
#nginx:
server {
server_name "~^www\.(.*)$" ;
return 301 $scheme://$1$request_uri ;
}
#apache:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Добавление слеша в конец урла:
#nginx:
rewrite ^([^.]*[^/])$ $1/ permanent;
#apache:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
Оптимизация страниц пагинации
Для реализации ЧПУ-страниц пагинации используем код коллеги: Ссылка. Проверено, работает. Требования к виду урла сеошники различные, поэтому в двух местах кода по ссылке нужно не забыть поменять регулярки.
Также в шаблоне компонента system.pagenavigation добавляем код для добавления метатегов страниц пагинации:
if ($arResult["NavPageNomer"] == 2) {
$APPLICATION->SetPageProperty("robots", "noindex, follow");
$APPLICATION->AddHeadString('<link rel="prev" href="ВАШ_УРЛ_НА_СТРАНИЦУ_КАТЕГОРИИ">' );
}
elseif ($arResult["NavPageNomer"] > 2) {
$APPLICATION->SetPageProperty("robots", "noindex, follow");
$APPLICATION->AddHeadString('<link rel="prev" href="ВАШ_УРЛ_НА_ПРЕДЫДУЩУЮ_СТРАНИЦУ">' );
}
if ($arResult["NavPageNomer"] < $arResult["NavPageCount"]) {
$APPLICATION->AddHeadString('<link rel="next" href="ВАШ_УРЛ_НА_СЛЕДУЮЩУЮ_СТРАНИЦУ">' );
}
Для того, чтобы на несуществующих страницах пагинации(напр. ?PAGEN_1=100500) выводилась 404 ошибка, пишем в этом же шаблоне:
if ($_GET["PAGEN_" . $arResult["NavNum"]] > 0 && $arResult["NavPageNomer"] != $_GET["PAGEN_" . $arResult["NavNum"]]) {
define('ERROR_404', 'Y');
return;
}
Есть требование добавлять к титлу страницы пагинации её номер, для этого добавляем в init.php обработчик:
AddEventHandler("main", "OnEpilog", "OnEpilogHandler");
function OnEpilogHandler()
{
global $APPLICATION;
if (!defined('ERROR_404') && intval($_GET["PAGEN_1"]) > 0) {
$APPLICATION->SetPageProperty("title", $APPLICATION->GetPageProperty("title") . "– " . intval($_GET["PAGEN_1"]) . " страница");
}
}