У стандартній установці OpenCart файл robots.txt є статичним і однаковим для всіх магазинів у кількох магазинах. Це означає, що другий і третій магазин тощо на окремих доменах дають роботу карту сайту з іноземним доменом, а директива Host для Яндекса вказує на неправильний сайт. Цей скрипт замінює статичний файл на динамічний: при кожному запиті він сам визначає поточний домен і генерує правильний robots.txt саме для цього магазину.
Основною перевагою є підтримка кількох магазинів без складних налаштувань і встановлення модулів.
Один файл robots.php розташований у корені сервера та обслуговує всі магазини одночасно. Кожен домен отримує власну відповідь:
Приклад:
# shop-one.ru/robots.txt
Хост: shop-one.ru
Карта сайту: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';
на своє/свої значення
На каву!