Правильные страницы пагинации для категорий на Opencart 2
Тестировалось на Opencart 2.1.0.1
Многие SEO-специалисты жалуются на стандартные страницы пагинации (страницы постраничной навигации) в CMS Opencart 2, 3 и других версий (со временем создатели так и не поправили эту ошибку).
Пагинация — это порядковая нумерация страниц. На чистом шаблоне Opencart она выглядит вот так:

Разберем, какие же проблемы ждут нас на чистой сборке интернет-магазина на Opencart:
- Отсутствие rel=»canonical» на страница отличных от первой.
- Полное дублирование метатегов title и description.
- Полное дублирование контента (описания категории).
- Дублирование первой страницы из-за добавления &page=1 при переходе с других.
Решить все эти проблемы достаточно просто, об этом я расскажу поэтапно в данной статье.
Как добавить Canonical (каноническую ссылку) для страниц пагинации
Ссылка на каноническую страницу показывает поисковому роботу, какая страница является основной среди нескольких её вариантов.
По умолчанию rel=»canonical» есть только на первой странице, что не имеет никакой логики.
Для того, чтоб добавить каноникал на остальные нам нужно зайти в контроллер категории, находим файл:
catalog/controller/product/category.php
Находим блок кода (где-то 350 строка и ниже):
if ($page == 1) {
$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], 'SSL'), 'canonical');
} elseif ($page == 2) {
$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], 'SSL'), 'prev');
} else {
$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page - 1), 'SSL'), 'prev');
}
if ($limit && ceil($product_total / $limit) > $page) {
$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page + 1), 'SSL'), 'next');
}
Меняем весь этот блок на:
$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], 'SSL'), 'canonical');
if ($page == 2) {
$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], 'SSL'), 'prev');
} else {
$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page - 1), 'SSL'), 'prev');
}
if ($limit && ceil($product_total / $limit) > $page) {
$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page + 1), 'SSL'), 'next');
}
Теперь на каждой странице пагинации будет выводится:
<link href=»https://вашсайт/адрескатегории» rel=»canonical» />
С каноникалом закончили, переходим к следующему этапу.
Убираем вывод описания категории для страниц пагинации
Для того, чтоб избавиться от дублей пагинации, нужно убрать описание категории (вывод текста на странице группы товаров) на всех страницах отличных от первой.
Для этого остаемся в файле контроллера категории товаров:
catalog/controller/product/category.php
Находим строку кода, отвечающую за вывод описания:
$data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
Меняем её на:
if ($page == 1) {
$data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
} else {
$data['description'] = '';
}
Теперь описание будет выводиться только на первой странице постраничной навигации.
Переходим к следующему этапу устранения дублей.
Убираем дубли метатегов title и description
Для того, чтоб убрать дубли метатегов title (заголовок) и description (описание) на страницах пагинации, остаемся в том же файле:
catalog/controller/product/category.php
Убираем дубль title
Находим строку:
$this->document->setTitle($category_info['meta_title']);
и меняем её на:
if ($page > 1) { $this->document->setTitle($category_info['meta_title'] . ' - Стр: ' . $page); }else{ $this->document->setTitle($category_info['meta_title']); }
Убираем дубль description
Находим строку:
$this->document->setDescription($category_info['meta_description']);
И меняем её на:
if ($page > 1) { $this->document->setdescription($category_info['meta_description'] . ' - Стр: ' . $page); }else{ $this->document->setdescription($category_info['meta_description']); }
Теперь на всех страницах пагинации отличных от первой, в метатегах title и description в конце будет приписываться «- Стр: номер страницы».
Переходим к следующему шагу улучшения навигации Opencart.
Удаляем &page=1 при переходе на первую страницу пагинации
Для того, чтоб устранить полный дубль первой страницы пагинации, нам нужно удалить приставку &page=1 из url.
system/library/pagination.php
Находим строки:
$output .= '<li><a href="' . str_replace('{page}', 1, $this->url) . '">' . $this->text_first . '</a></li>';
$output .= '<li><a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a></li>';
И меняем их на:
$fpage = str_replace('&page={page}', '', $this->url);
$fpage = str_replace('?page={page}', '', $fpage);
$output .= '<li><a href="' . $fpage . '">' . $this->text_first . '</a></li>';
if ($page == 2)
$output .= '<li><a href="' . $fpage . '">' . $this->text_prev . '</a></li>';
else
$output .= '<li><a href="' . str_replace('{page}', $page-1, $this->url) . '">' . $this->text_prev . '</a></li>';
Ниже ищем строки:
$output .= '<li><a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a></li>';
Меняем их на:
$fpage = str_replace('&page={page}', '', $this->url);
$fpage = str_replace('?page={page}', '', $fpage);
if ($i == 1){
$output .= '<li><a href="' . $fpage . '">' . $i . '</a></li>';
}
else{
$output .= '<li><a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a></li>';
}
С помощью достаточно простых правок можно привести стандартные страницы пагинации CMS Opencart к нормальному виду. Не ждите правок от SEO-специалистов, а внедряйте данный код на этапе разработки сайта на Опенкарте любой версии, чтоб добиться максимально лояльного отношения со стороны поисковых систем. Не забывайте следить за временем загрузки сайта. Медленные сайты постепенно покидают ТОП выдачи Google. Читайте как увеличить скорость загрузки страниц интернет-магазина на Opencart, без потери качества сайта.
Все эти исправления можно реализовать и на Opencart 3, при этом логика абсолютно не меняется, меняется только синтаксис.
Если вам будет интересно увидеть подобную статью для Opencart 3, пишите об этом в комментариях и я обязательно её напишу!
Всем оптимизированных интернет-магазинов!
