SEO-адреса
По умолчанию адреса выглядят как index.php?route=product/product&product_id=42. SEO-адрес — короткий читаемый адрес той же страницы, например /en-gb/ceramic-mug. Его проще читать людям и поисковым системам. Сама страница и её контроллер не меняются — меняется только адрес.
Включение
Нужны три шага.
- В панели:
System → Settings, изменить магазин, вкладкаServer, включить «Use SEO URLs». - Научить веб-сервер передавать неизвестные адреса в
index.php. - Задать ключевые слова товарам, категориям и страницам.
Правила веб-сервера
Для Apache правила уже есть в поставке — переименуйте файл в корне сайта:
mv .htaccess.txt .htaccessДля Nginx добавьте правила в настройки сайта:
location / {
try_files $uri $uri/ @opencart;
}
location @opencart {
rewrite ^/(.+)$ /index.php?_route_=$1 last;
}Адрес, который не является настоящим файлом, передаётся в OpenCart в параметре _route_, и движок находит страницу по ключевым словам.
Ключевые слова товаров
Откройте товар в Catalog → Products, вкладка SEO, и введите ключевое слово для каждого магазина и языка: ceramic-mug. Такая же вкладка есть у категорий, производителей и информационных страниц.
Откройте витрину — ссылки на товар теперь ведут на короткий адрес, а старый адрес с product_id=42 по-прежнему работает.
Где хранятся ключевые слова
Все ключевые слова лежат в таблице oc_seo_url. Каждая строка связывает ключевое слово с парой «ключ и значение»:
key | value | keyword |
|---|---|---|
product_id | 42 | ceramic-mug |
path | 20 | desktops |
route | information/hello | hello |
Весь список виден в Design → SEO URL.
Ключевое слово для своей страницы
В Design → SEO URL добавьте строку: ключ route, значение — маршрут вашего контроллера, например information/hello, ключевое слово hello, ваш магазин и язык.
Страница откроется по адресу вида http://shop.test/en-gb/hello. Как именно собираются части адреса — с языком в начале или без него — зависит от выпуска.
Ссылки в коде
В коде ничего не меняется. $this->url->link() сам возвращает короткий адрес, если SEO-адреса включены и ключевое слово задано:
$href = $this->url->link('product/product', 'language=' . $this->config->get('config_language') . '&product_id=42');В $href окажется короткий адрес товара, а для товара без ключевого слова — обычный длинный.
Частая ошибка
Ссылку пишут в шаблоне вручную: <a href="index.php?route=product/product&product_id=42">. Она работает, но остаётся длинной, и поисковые системы видят два адреса одной страницы. Каждую ссылку стройте в контроллере через $this->url->link() и передавайте в шаблон переменной.