Создание «rel="canonical"» для страниц пагинаций в OpenCart


В OpenCart страницы пагинации определяются через параметр «page», даже если в настройках включено ЧПУ. По этому, чтобы избежать повторяющихся URL или похожих страниц, следует прописать тег <link> с атрибутом «rel=»canonical»» на страницах пагинации. 

На сайте уже есть статья, как это можно сделать на любых CMS при помощи PHP.
В данной статье я хочу показать, как можно сделать канонический URL («rel=»canonical»») через стандартный механизм модификаций OCMOD. Конечно, никто не запрещает делать прямо через код, но мне кажется, что через модификации удобнее. 

Создаём файл модификации rel_canonical.ocmod.xml, который будет расположен в папке /system/. Именно в данном файле будет производиться все изменения движка.

<?xml version="1.0" encoding="utf-8"?>
<modification>
	<name>rel="canonical" для страниц пагинаций</name>
	<code>rel="canonical" для страниц пагинаций</code>
	<version>2.3.0.2</version>
	<date>12.12.2019</date>
	<author>Bobroed</author>
	<link>https://bobroed.ru</link>
	<file path="catalog/controller/common/header.php">
		<operation>
			<search><![CDATA[return $this->load->view('common/header', $data);]]></search>
			<add position="before"><![CDATA[
				$data['canonical'] = '';
				if(isset($_REQUEST['page']) && $_REQUEST['page'] > 1){
					$data['title'].= ' | Страница '.$_REQUEST['page']; // Добавляем в title браузера номер страницы пагинации, если это необходимо.
					
					if((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443){
						$protocol = 'https://';
					}else{
						$protocol = 'http://';
					}
					
					$url = $protocol.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
					
					$urlend = strrpos($url, '?', -1); // Находим и удаляем все параметры (номер страницы, параметры фильтра и тд.)
					$url = substr($url, 0, $urlend);

					if(mb_substr($url, -1) == '/'){ // Тут оставляем, если ссылки на сайте не заканчиваются на /, либо удаляем, если заканчиваются на /.
						$url = substr($url, 0, -1);
					}

					$data['canonical'] = $url;
				}
			]]></add>
		</operation>
	</file>
	<file path="catalog/view/theme/<ваша_тема>/template/common/header.tpl">
		<operation>
			<search><![CDATA[</head>]]></search>
			<add position="before"><![CDATA[
				<?if($canonical){?><link rel="canonical" href="<?=$canonical;?>"/><?}?>
			]]></add>
		</operation>
	</file>
</modification>

Коротко про код:
1) В контроллере шапки (catalog/controller/common/header.php) сайта ищем вывод шаблона самой шапки ($this->load->view(‘common/header’, $data);) и вставляем наш код до её отрисовки.
2) Создаём переменную $data[‘canonical’], в которую добавим канонический URL, если будет открыта страница пагинации.
3) Проверяем, присутствует ли в URL параметр «page», и если да, и он больше 1, то выполняем код.
4) $data[‘title’].= ‘ | Страница ‘.$_REQUEST[‘page’]; — эта строка по желанию, если хотите добавить номер страницы в title браузера.
5) Далее, получаем текущий URL и удаляем из него все параметры, чтобы у нас получился канонический URL. 
6) И в заключении, в шаблоне шапки сайта вашей темы определяем, если переменная $canonical не пуста, выводим тег <link rel=»canonical»>.


Для связи

Если у вас появились какие-либо вопросы, хотите получить индивидуальный совет или у вас есть интересное предложение, вы можете связаться через форму обратной связи.

Или написать прямо на почту info@bobreod.ru





Отправляя форму, вы соглашаетесь с нашей политикой конфиденциальности