OpenCart ЧПУ: как включить SEO URL и найти причину, если они не работают

В OpenCart страницы магазина могут открываться по техническим адресам с параметрами, а после настройки SEO URL — по более понятному адресу.

+В OpenCart страницы магазина могут открываться по техническим адресам с параметрами, например:

index.php?route=product/product&product_id=42

а после настройки SEO URL — по более понятному адресу вроде:

/catalog/product-name/

В русскоязычных инструкциях такие адреса часто называют ЧПУ.

Но если просто включить SEO URL в настройках OpenCart, красивые адреса начинают работать не всегда. Дополнительно должны быть правильно настроены сами SEO keywords и обработка URL на веб-сервере.

Поэтому при проблемах с ЧПУ лучше проверить цепочку целиком:

OpenCart → SEO keyword → rewrite веб-сервера → нужная страница.

Сначала определите, что именно не работает

↑ К оглавлению

Проблемы с SEO URL могут выглядеть по-разному:

  • после включения ничего не изменилось;
  • товары продолжают открываться через index.php?route=...;
  • красивый URL ведёт на 404;
  • главная страница работает, а товары и категории нет;
  • SEO URL работают для товаров, но не для категорий;
  • после переноса магазина все ЧПУ перестали открываться;
  • после смены версии OpenCart часть ссылок стала неправильной;
  • один SEO URL открывает не ту страницу;
  • сохранить keyword не получается из-за конфликта.

Это разные ситуации.

Сначала сохраните конкретный проблемный адрес и определите:

OpenCart не создаёт SEO URL или веб-сервер не умеет обработать уже созданный адрес.

Проверьте, включены ли SEO URL

↑ К оглавлению

В OpenCart существует отдельная настройка использования SEO URL.

В актуальном коде storefront обработчик SEO URL подключается только когда активна настройка config_seo_url. После этого OpenCart добавляет механизм преобразования внутренних ссылок в SEO-пути и разбора входящих адресов.

Название вкладки и расположение переключателя могут отличаться между версиями OpenCart, поэтому не ориентируйтесь вслепую на скриншот из инструкции для другой версии.

Проверьте фактические настройки магазина и убедитесь, что использование SEO URL действительно включено.

Проверьте SEO keyword у конкретной страницы

↑ К оглавлению

Одного общего переключателя недостаточно.

Для товара, категории или другой поддерживаемой сущности должен существовать собственный SEO URL.

В текущем OpenCart у товара есть отдельная SEO-настройка, причём она поддерживает разные магазины и языки. Официальная документация рекомендует использовать уникальные, понятные URL без пробелов и специальных символов.

Для диагностики возьмите один конкретный товар.

Например, если товар называется:

Кофемашина Model X

SEO keyword может выглядеть примерно так:

coffee-machine-model-x

После сохранения откройте страницу магазина и проверьте, какой URL сформировал сам OpenCart.

Не начинайте с массового изменения сотен товаров.

Сначала добейтесь нормальной работы одного тестового адреса.

SEO keyword должен быть уникальным

↑ К оглавлению

Один и тот же keyword нельзя бездумно назначать разным страницам.

OpenCart при сохранении SEO URL проверяет существующие значения и сообщает о конфликте. В актуальном коде такая проверка выполняется с учётом магазина, а для категорий также учитывается структура пути.

Например, плохой вариант:

sale

одновременно для товара, категории и другой страницы, если эти адреса конфликтуют в конкретной конфигурации.

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

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

Если используется Apache — проверьте .htaccess

↑ К оглавлению

Для Apache одного OpenCart недостаточно: запрос красивого URL должен быть передан в приложение.

Актуальный upstream OpenCart по-прежнему содержит файл:

.htaccess.txt

В нём прямо указано, что для URL Alias требуется Apache с mod_rewrite, а файл нужно использовать как .htaccess.

Поэтому проверьте корень магазина.

Если там есть только:

.htaccess.txt

а рабочего:

.htaccess

нет, rewrite может просто не применяться.

Но не заменяйте существующий .htaccess вслепую. На рабочем сайте в нём уже могут находиться:

  • HTTPS-редиректы;
  • правила безопасности;
  • настройки хостинга;
  • редиректы старых страниц;
  • собственные rewrite rules.

Сначала сохраните резервную копию.

Проверьте mod_rewrite

↑ К оглавлению

Даже правильный .htaccess не поможет, если Apache не обрабатывает соответствующие rewrite rules.

OpenCart прямо указывает mod_rewrite как требование для своей Apache-схемы SEO URL.

Характерный случай:

  • обычный URL с index.php?route=... работает;
  • SEO keyword настроен;
  • SEO URL включены;
  • красивый URL возвращает 404.

Тогда следующий объект проверки — именно обработка rewrite на веб-сервере.

Не переустанавливайте OpenCart из-за такого симптома.

Если OpenCart установлен в подпапке

↑ К оглавлению

Допустим, магазин работает по адресу:

https://example.com/shop/

а не непосредственно из корня домена.

В стандартном .htaccess.txt OpenCart отдельно обращает внимание на RewriteBase: он должен соответствовать фактическому каталогу установки.

То есть конфигурация для:

/

и для:

/shop/

не обязательно будет одинаковой.

Если SEO URL перестали работать после переноса магазина из подпапки в корень или наоборот, обязательно проверьте rewrite-конфигурацию.

Если используется Nginx — .htaccess не работает

↑ К оглавлению

Nginx не использует .htaccess.

Поэтому инструкция:

> переименуйте .htaccess.txt в .htaccess

сама по себе не решит проблему на сервере с Nginx.

В этом случае правила маршрутизации должны быть настроены в конфигурации Nginx.

Смысл тот же:

если запрошенный путь не является реальным файлом или каталогом, запрос должен попасть в OpenCart для дальнейшего разбора SEO URL.

Не копируйте Apache RewriteRule напрямую в конфигурацию Nginx — синтаксис у них разный.

Проверьте, доходит ли SEO-путь до OpenCart

↑ К оглавлению

В текущем OpenCart входящий SEO-путь разбирается startup-контроллером seo_url.

Он получает части пути и пытается сопоставить их с зарегистрированными SEO URL. Если часть адреса не распознана, запрос может перейти к обработчику ошибки.

Это помогает разделить два случая.

Случай 1:

Nginx или Apache вообще не передаёт запрос в OpenCart.

Тогда проблема находится до приложения.

Случай 2:

Запрос попал в OpenCart, но нужного SEO keyword нет или он конфликтует.

Тогда проверять нужно уже данные OpenCart.

Если товары работают, а категории нет

↑ К оглавлению

Не спешите менять общий rewrite.

В актуальном OpenCart категории имеют собственную логику SEO URL и могут учитывать полный путь категории.

При создании и изменении категории OpenCart формирует SEO-информацию с учётом родительской структуры.

Поэтому проблема только с одной категорией может быть связана с:

  • её SEO keyword;
  • родительской категорией;
  • конфликтующим адресом;
  • изменением структуры каталога.

Если остальные красивые URL работают, общая настройка веб-сервера уже менее вероятна как причина.

Если после переноса сайта ЧПУ перестали работать

↑ К оглавлению

После переезда проверьте не только OpenCart.

Могли измениться:

  • DocumentRoot;
  • расположение магазина;
  • Apache/Nginx;
  • поддержка .htaccess;
  • rewrite rules;
  • подпапка установки;
  • домен;
  • конфигурация виртуального хоста.

Очень характерный симптом:

index.php?route=...

работает,

а:

/product-name/

нет.

Это часто означает, что само приложение доступно, но новый сервер ещё не настроен для обработки SEO-путей.

Если после включения SEO URL появляется 500

↑ К оглавлению

Не отключайте PHP и не меняйте базу.

Если ошибка появилась ровно после подключения .htaccess, сначала верните предыдущий файл и проверьте его правила.

Сам upstream OpenCart предупреждает, что некоторые директивы стандартного .htaccess.txt могут не разрешаться конкретной серверной конфигурацией и в таком случае приводить к ошибке сайта.

То есть 500 сразу после включения .htaccess — хороший сигнал проверить именно Apache-конфигурацию.

Если SEO URL работает только у части товаров

↑ К оглавлению

Проверьте SEO-настройки самих товаров.

В актуальном OpenCart SEO URL сохраняются отдельно для конкретной сущности, магазина и языка.

Поэтому один товар может иметь SEO URL, а другой — нет.

Не воспринимайте это автоматически как проблему rewrite.

Сравните две карточки:

работающую и неработающую.

Посмотрите, заполнена ли SEO-вкладка одинаково.

Учитывайте мультиязычность и несколько магазинов

↑ К оглавлению

В OpenCart SEO URL связаны не только со страницей, но также могут зависеть от store_id и language_id.

Это видно и в актуальном upstream-коде OpenCart.

Поэтому при нескольких языках или магазинах проверяйте:

  • для какого магазина сохранён keyword;
  • для какого языка;
  • есть ли значение для нужной комбинации;
  • не конфликтует ли адрес с другой страницей.

Ситуация:

> на русском SEO URL работает, а на другом языке нет

не обязательно означает проблему веб-сервера.

Не меняйте SEO URL без необходимости на работающем магазине

↑ К оглавлению

Если страница уже индексируется по адресу:

/old-product/

а вы меняете его на:

/new-product/

старый адрес сам по себе не обязан сохранить поисковую ценность.

При осознанной смене рабочего URL нужно продумать перенаправление со старого адреса на новый.

Иначе посетители и поисковые системы могут продолжать обращаться к уже несуществующему URL.

Поэтому массовое «улучшение ЧПУ» на давно работающем магазине — это уже миграция адресов, а не просто косметическая правка.

Если установлен SEO-модуль

↑ К оглавлению

Сторонние расширения могут полностью или частично менять стандартную работу URL.

Они могут:

  • генерировать адреса автоматически;
  • добавлять категории в путь;
  • убирать их;
  • менять окончания;
  • создавать редиректы;
  • изменять стандартный startup SEO handler.

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

Не пытайтесь одновременно исправлять стандартный SEO URL и стороннюю систему.

Не редактируйте таблицы SEO URL наугад

↑ К оглавлению

При проблемах с ЧПУ иногда советуют открыть базу данных и вручную исправлять записи URL.

Это допустимый инструмент диагностики для специалиста, но плохой первый шаг.

OpenCart сам:

  • создаёт SEO-записи;
  • проверяет keyword;
  • учитывает store;
  • учитывает language;
  • для категорий поддерживает структуру путей.

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

Сначала используйте штатную административную часть.

Короткий порядок диагностики

↑ К оглавлению

Если в OpenCart не работают ЧПУ, я бы проверял так:

  1. открыть проблемную страницу по обычному URL;
  2. убедиться, что сама страница работает;
  3. проверить, включены ли SEO URL;
  4. проверить SEO keyword конкретной страницы;
  5. убедиться, что keyword уникален;
  6. определить веб-сервер — Apache или Nginx;
  7. для Apache проверить .htaccess и mod_rewrite;
  8. для Nginx проверить rewrite-конфигурацию;
  9. проверить правильный базовый путь при установке в подпапке;
  10. повторить проверку на одном конкретном товаре;
  11. если проблема только с категориями — проверить их SEO-пути отдельно;
  12. при multi-store и нескольких языках проверить нужный store/language;
  13. если установлен SEO-модуль — проверить его отдельно;
  14. после исправления проверить старые и новые URL.

Так можно понять, проблема находится в данных OpenCart или на уровне веб-сервера.

Чего не стоит делать

↑ К оглавлению

Если SEO URL OpenCart не работают, не стоит сразу:

  • менять все keywords магазина;
  • редактировать базу вручную;
  • копировать чужой .htaccess целиком;
  • применять Apache-конфигурацию к Nginx;
  • устанавливать SEO-модуль только ради исправления стандартных ЧПУ;
  • менять домен и rewrite одновременно;
  • удалять рабочие редиректы;
  • менять адреса уже проиндексированных товаров без плана перенаправлений.

Сначала добейтесь правильной работы одного тестового SEO URL, а затем переходите к остальным.

Частые вопросы

Как включить ЧПУ в OpenCart?

Нужно включить SEO URL в настройках магазина, задать уникальный SEO keyword для нужной страницы и убедиться, что веб-сервер передаёт красивые URL в OpenCart. На Apache стандартный upstream предусматривает mod_rewrite и .htaccess; на Nginx rewrite настраивается в конфигурации сервера.

Почему SEO URL OpenCart выдаёт 404?

Сначала проверьте, открывается ли эта же страница по обычному адресу. Затем проверьте SEO keyword и rewrite веб-сервера. Если другие ЧПУ работают, проблема вероятнее связана с конкретным keyword или страницей.

Почему после переноса OpenCart перестали работать ЧПУ?

На новом сервере могла измениться конфигурация Apache или Nginx, DocumentRoot либо путь установки магазина. Сам OpenCart может работать, но красивые URL не передаются в его SEO-обработчик.

Почему OpenCart пишет, что SEO URL уже используется?

SEO keyword должен быть уникальным в соответствующей конфигурации магазина. OpenCart проверяет существующие SEO URL при сохранении и не позволяет безопасно использовать конфликтующее значение для другой страницы.

↑ К оглавлению

Нужна помощь с OpenCart?

Поможем найти причину, по которой SEO URL OpenCart не работают, и восстановить правильную маршрутизацию магазина.

↑ К оглавлению