Поширену проблема SEO та юзабіліті в інтернет-магазинах на базі OpenCart, коли виникає потреба вимкнути або видалити англійську (чи будь-яку іншу) мовну версію сайту. Зазвичай після відключення мови в адмінпанелі, всі старі URL-адреси, які вже встигли потрапити в індекс пошукових систем (наприклад, Google), починають віддавати помилку 404 (Сторінку не знайдено). Це негативно впливає на поведінкові фактори користувачів та знижує позиції сайту в пошуковій видачі.
Якщо на вашому сайті використовувався чіткий мовний префікс у посиланнях (наприклад, перенаправлення з /en/ на головну чи на старі російські сторінки виду /ru/), і структура ЧПУ (SEO URL) при цьому ідентична — таку задачу можна і краще вирішити на рівні сервера через файл .htaccess
# Редирект з /en/ або /en на головну сторінку
RewriteCond %{REQUEST_URI} ^/en/?$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/en/(.*)$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/ [R=301,L]
Ваш випадок, якщо посилання на сайті йшли без мовного префікса, а в налаштуваннях магазину увімкнено SeoPro
Модифікатор автоматично перехоплює запити до відключеної мовної версії та реалізує коректний 301-й редирект (Moved Permanently) на базову (українську) локалізацію сайту з повним збереженням структури URL (якщо сторінка існує).
У поточному коді модифікатора за замовчуванням прописаний ID мови 2, що відповідає українській локалізації на тестовому та більшості стандартних сайтів.
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>EN redir to UKR</name>
<code>EN redir to UKR</code>
<version>1.0</version>
<author>kJlukOo</author>
<link>https://cleanphp.pp.ua</link>
<file path="system/library/seopro.php">
<operation>
<search><![CDATA[public function prepareRoute($parts) {]]></search>
<add position="before"><![CDATA[
function enRedirToUkr($keyword)
{
$query_string = $this->getQueryByKeyword($keyword, 2);
if ($query_string) {
$url_data = explode('=', $query_string);
if (count($url_data) == 2) {
$route_type = $url_data[0]; // 'information_id', 'product_id' и т.д.
$route_id = $url_data[1];
$route = '';
if ($route_type == 'product_id') {
$route = 'product/product';
} elseif ($route_type == 'category_id') {
$route = 'product/category';
} elseif ($route_type == 'manufacturer_id') {
$route = 'product/manufacturer/info';
} elseif ($route_type == 'information_id') {
$route = 'information/information';
}
if ($route) {
$new_url = $this->url->link($route, $route_type . '=' . (int)$route_id);
$this->response->redirect($new_url, 301);
}
}
}
}
]]></add>
</operation>
</file>
<file path="system/library/seopro.php">
<operation>
<search><![CDATA[$query = $this->getQueryByKeyword($parts[$id]);]]></search>
<add position="after"><![CDATA[
if(!$query)
$this->enRedirToUkr($parts[$id]);
]]></add>
</operation>
</file>
</modification>