Зіткнувся з такою ж проблемою. Перечитав всі коменти в даній темі, дізнався багато чого про питання СЕО)))))). Хочу написати як я вирішив дане питання. Звичайно рішення не ідеальне і можливо десь неправильне але воно працює і найголовніше не потрібно вносити зміни в системні файли:
В самій категорії закоментовуємо наступні рядки залишаючи структуру як в прикладі:
if ($page == 1) {
$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id']), 'canonical');
// } else {
// $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. $page), 'canonical');
}
Цим ми відключили формування канонікал для сторінок з page > 1.
Наступне в header.php прописуємо:
if(isset($this->request->get['page']) && $this->request->get['page'] > 1){
$data['canonical'] = 'https://ВАШ ДОМЕН/'.$this->request->get['_route_'];
}
Правда в мене УРЛ всіх сторінок на різних мовах різні і я не використовую /ru/ /ua/ і т.д тому були проблеми з отриманням базової адреси але можна спробувати і таку структуру вставити в header.php:
if(isset($this->request->get['page']) && $this->request->get['page'] > 1){
$data['canonical'] = $this->url->link('common/home', '', true).$this->request->get['_route_'];
}
І нарешті в header.twig вставляємо:
{% if canonical %}
<link href="{{ canonical }}" rel="canonical" />
{% endif %}