В стандартной установке OpenCart файл robots.txt статичен и одинаков для всех магазинов внутри мульти-магазина. Это означает, что второй и третий магазин итд на отдельных доменах отдают роботу Sitemap с чужим доменом, а директива Host для Яндекса указывает не на тот сайт. Данный скрипт подменяет статический файл динамическим: при каждом запросе он сам определяет текущий домен и формирует корректный robots.txt именно для этого магазина.
Главное преимущество — поддержка мульти-магазинов без сложных настроек и установок модулей.
Один файл robots.php размещается в корне сервера и обслуживает все магазины одновременно. Каждый домен получает свой ответ:
Пример:
# shop-one.ru/robots.txt
Host: shop-one.ru
Sitemap: https://shop-one.ru/sitemap.xml
# shop-two.ru/robots.txt
Host: shop-two.ru
Sitemap: https://shop-two.ru/sitemap.xml
Никаких ручных правок под каждый домен — скрипт всё определяет сам из заголовка запроса.
Базовый набор правил (из коробки)
Скрипт уже содержит закрытые маршруты, типичные для любого магазина на OpenCart:
Личный кабинет, оформление заказа, партнёрская программа
Страница сравнения товаров и поиска
Системные директории: /system, /download, /storage
URL с параметрами: ?sort=, ?order=, ?limit=, ?filter=, ?tag=, ?tracking= и их &-варианты
Явное разрешение статики: CSS, JS, изображения, шрифты
Как добавить свою директиву:
Все правила хранятся в массиве $common_rules.
Чтобы добавить нужный вам запрет, вставьте строку в массив:
// Закрыть страницу производителей
$common_rules = array(
...
'Disallow: /*route=product/manufacturer',
...
);
Чтобы добавить страницы только для конкретного магазина, используйте $host_only:
// Закрыть особый раздел только на втором магазине
if ($host_only === 'shop-two.ru') {
$lines[] = 'Disallow: /wholesale/';
}
Как удалить ненужную директиву:
Найдите строку в массиве $common_rules и удалите её. Например, если фильтрация по имени вам не нужна:
// Было — удалить эти две строки:
'Disallow: /*?filter_name=',
'Disallow: /*&filter_name=',
Как добавить правила только для Яндекса :
Блок для Яндекса формируется отдельно после общего.
Добавьте свои директивы перед директивой Host -
// Дополнительно закрыть от Яндекса страницу акций
$lines[] = 'User-agent: Yandex';
$lines = array_merge($lines, $common_rules);
$lines[] = 'Disallow: /promo/'; // ← добавить здесь
if ($host_only) {
$lines[] = 'Host: ' . $host_only;
}
Установка:
Скачайте и распакуйте архив multistore robots sitemap.zip
Загрузите robots.php в корень сайта по фтп
Переименуйте существующий robots.txt , например добавив к нему в конце нижнее подчёркивание robots.txt_ (это отключит данный файл).
Добавьте правило в .htaccess до основного блока OpenCart:
Откройте файл htaccess , найдите строку RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
Ниже добавьте
RewriteRule ^robots\.txt$ robots.php [L]
Проверьте результат:
Откройте https://ваш-домен/robots.txt в браузере или через инструменты Яндекс.Вебмастера.
И далее соответственно действующие под-магазины
https:// ваш-домен-2.ru /robots.txt
итд
Каждый роботс теперь должен указывать на отдельный сайтмап , host итд.
Совместимость
OpenCart 3.x / OcStore 3.x / LiveStore 3.x
PHP 7.0+
Apache с mod_rewrite
Работает за Nginx, Cloudflare и любым reverse proxy с заголовком X-Forwarded-Proto
Доступ к базе данных и панели администратора не требуется
Sitemap:
По-умолчанию в Opencart модуль сайтмап входящий в состав сборки, формирует sitemap.xml для каждого мульти-магазина свой.
По этой причине его нет необходимости для этих целей изменять.
Если же вы используете сторонние модули формирования сайтмап, просто замените в строке
$sitemap_url = $base_url . '/sitemap.xml';
на свое/свои значения
На кофе!