Добавляем prev, next и canonical в Opencart

Показываем google где у нас каноническая страница, где предыдущая и где следующая. Это улучшает индексацию сайта в пагинации

сентябрь 29 , 2018

В интернет магазинах без разбиение на страницы не обойтись. Но как указать гуглу где основная страница, а где последующие? И то будет если робот зайдет на 10 страницу - он не увидит первую?

Как пишут в google если у вас на сайте контент разбит по страницам можно предпринять 3 варианта.

  • Добавить кнопку показать все
  • Оставить все как есть
  • Добавить специальные теги link prev и next для указания цепочки навигации.

Добавить кнопку показать все

Да, можно сделать, если у Вас в категории не более +/- 200 товаров. При заходе в категорию с таким количество товара еще более менее будет все сносно.  Но как правило в интернет магазинах ассортимент настолько большой что только в пагинации может быть 200 страниц. Умножим на количество товара на одной странице.

Пагинация - переключение между страницами на сайте. В Opencart это можно увидеть в категориях, брендах, отзывах и т.п. страницах

Все вывести на одну конечно можно, но не надо. Во-первых, браузер посетителя это просто не загрузит, а зависнет + сильная нагрузка на сервер. Этот вариант отпадает.

Оставить все как есть

Самый простой способ для ленивых. Полагать на эвристику поискового робота что он сам все поймет. Вариант, но рассчитывать на высокие позиции и отсутствие ошибок сканирования не стоит. Это нам не подходит.

Добавить специальные теги link prev и next для указания цепочки навигации.

Самый отличный вариант. Таким образом мы показываем цепочку навигации и гугл проиндексирует сайт корректно и полностью. Этот код для opencart пример как сделать такое в категории. В других списках все аналогично.

Для внедрения правок открываем контроллер категории catalog/controller/product/category.php

И после строки

$data['pagination'] или $this->data['pagination'] для Opencart 1.x

Добавляем блок с кодом

$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], true), 'canonical');
if ($page > 1) {
  if ($page == 2) {
    $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], true), 'prev');
  } else {
    $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page - 1), true), 'prev');
  }
  if ($limit && ceil($product_total / $limit) > $page) {
    $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page + 1), true), 'next');
  }
}

Также не забываем что надо добавить canonical что бы показать что главная страница - это главная. В коде уже сделано - это первая строка.

Таким образом в категории уже будет правильная цепочка навигации. Данный код есть в ocStore но немного не тот что нужно. Рекомендуется его заменить на этот. В чистом Opencart его нет.

Небольшой нюанс. Т.к. в document->addLInk ключом идет ссылка на страницу без учета rel то на 2 странице пагинации у нас не будет выводится canonical из-за фактической перезаписи значения в ключе. Решаем это открытием файла:

system/library/document.php, нахождением строки:

$this->links[md5($href)] = array(

и заменой ее на:

$this->links[md5($href . $rel)] = array(

Таким образом у нас всегда будут ссылки canonical даже на второй странице.

Как проверить canonical, prev, next на сайте

Работу тегов prev - next - canonical вы можете увидеть в исходном коде страницы https://site.com/category/?page=4:

<link href="https://site.com/category/" rel="canonical" />
<link href="https://site.com/category/?page=3" rel="prev" />
<link href="https://site.com/category/?page=5" rel="next" />

Проверяйте есть ли у вас такое на сайте, если нет, внедряйте, если не разбираетесь пишите договоримся.