Как добавить канонический тег на страницы OpenCart?

Я создал новый магазин OpenCart 1.5.6 – http://www.example.eu, однако многие его страницы идентичны (с точки зрения текстового контекста) страницам в старом магазине, который все еще работает – http://www.example.co.uk

Когда оба сайта проиндексированы, я хотел бы сослаться на все идентичные страницы на старом сайте, включив канонические теги на новый сайт:

например, страница «О нас» по адресу http://www.example.eu/about-us в идеале должен иметь что-то подобное в разделе заголовка:

<link rel="canonical" href="http://www.example.co.uk/delivery"/>

например, страница "Доставка" по адресу http://www.example.eu/delivery в идеале должен иметь что-то вроде этого в разделе заголовка:

<link rel="canonical" href="http://www.example.co.uk/delivery"/>

Я знаю, как этого можно достичь в теории, но не могу применить на практике. Кроме того, хотя меня в основном беспокоят все страницы информационного типа, в идеале я хотел бы иметь возможность указать точные страницы, которые будут иметь канонический тег, например:

If (this page is About-Us OR Delivery OR … OR … OR … OR …)
{
Include Canonical Tag of the type <link rel="canonical" href="http://www.example.co.uk/xxxxxxxx"/> , 
where xxxxxxx changes accordingly, depending on the page.
}
Else
{
Don’t include Canonical Tag
}

person Stoyan Berov    schedule 12.03.2014    source источник
comment
В зависимости от количества страниц, которые у вас есть, я могу использовать функцию in_array(). Затем вы можете указать все страницы (URL-адреса) в массиве и просто передать его.   -  person Boris    schedule 14.03.2014
comment
А как насчет перенаправления со старой страницы на новую с кодом 301 (содержимое перемещено)? Этого можно добиться в файле .htaccess.   -  person shadyyx    schedule 17.03.2014


Ответы (1)


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

Отредактируйте system/library/document.php

добавлять:

private $canonical; к переменным вашего класса вверху.

Затем добавьте следующие методы:

public function setCanonical($url) {
    $this->canonical = $url;    
}

public function getCanonical() {
    return $this->canonical;
}

В контроллере заголовка добавьте:

$this->data['canonical'] = $this->document->getCanonical();

Затем вы можете динамически установить свой канонический в контроллере заголовка:

if (isset($this->request->get['_route_'])):
    $canonical_route = $this->request->get['_route_'];
else:
    $canonical_route = '';
endif;

$this->document->setCanonical($this->data['base'] . $canonical_route);

Или вы можете установить его вручную в своих контроллерах, используя метод setCanonical.

person Vince Kronlein    schedule 14.07.2014