sitemap.xml и robots.txt для поддоменов
При мультирегиональности на поддоменах каждому поддомену нужны свои robots.txt и sitemap.xml. Без этой настройки поддомен отдаёт файлы основного домена: карта сайта на spb.example.ru будет содержать адреса example.ru, и поисковик не увидит региональные страницы как отдельные.
Проверить, есть ли проблема, можно за минуту: откройте sitemap.xml на поддомене и посмотрите, какие адреса внутри. Если основного домена — настройка ниже нужна.
Для добавления этой возможности необходимо отредактировать конфигурационный файл nginx. На виртуальной машине они находятся в папке /etc/nginx/bx/site_avaliable. Если у вас только один сайт, то скорее всего конфиги называются s1.conf и ssl.s1.conf. Если на сервере несколько проектов, то скорее всего конфиги будут в названии иметь домен, например, bx_ext_sitename.ru.conf и bx_ext_ssl_sitename.ru.conf. Правьте оба файла — и HTTP, и HTTPS.
Ошибка в конфигурации nginx кладёт сайт целиком. Перед правками сделайте копию файла, а после изменений проверьте конфигурацию командой nginx -t — она покажет ошибку до перезапуска.
Необходимые правки:
1. server_name приведите к виду
server_name ~^sitename\.ru$ ~^(?<name>[\w-]+)\.sitename\.ru$;где sitename\.ru — адрес вашего сайта. Обратный слеш перед точкой необходим.
2. Выше блока клиентской части (того, что начинается с set $PORTNUXT, см. Установка клиентской части решения) добавьте два блока:
location ~* ^\/[a-z0-9_-]+\.[a-z0-9]+$ {
root "/home/bitrix/ext_www/sitename.ru/frontend/static/$name";
try_files $uri @proxy;
}
location @proxy {
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Cache-Status $upstream_cache_status;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ignore_headers Set-Cookie Cache-Control;
proxy_http_version 1.1;
proxy_read_timeout 1m;
proxy_connect_timeout 1m;
proxy_pass http://127.0.0.1:$PORTNUXT;
}где /home/bitrix/ext_www/sitename.ru/ — путь до корня сайта. После него обязательно frontend/static/$name: именно в эту папку решение складывает sitemap.xml и robots.txt для каждого поддомена.
Первый блок отдаёт файлы из папки поддомена, а если файла там нет — передаёт запрос клиентской части через второй блок. Блок @proxy нужен только вместе с первым: в основной конфигурации клиентской части он не используется.
Проверьте конфигурацию и перезапустите nginx:
nginx -t
systemctl restart nginxКак проверить, что получилось
После перезагрузки nginx откройте на поддомене два адреса:
https://spb.example.ru/robots.txthttps://spb.example.ru/sitemap.xml
В карте сайта адреса внутри <loc> должны быть с поддоменом, а не с основным доменом.
Если адреса не изменились, проверьте по порядку: перезагружен ли nginx после правки конфига; стоят ли оба блока выше блока клиентской части; есть ли в папке frontend/static подпапка с именем этого поддомена — именно туда решение складывает файлы; лежат ли в ней sitemap.xml и robots.txt. Нет подпапки — значит карта для этого поддомена ещё не собиралась.
Карту сайта пересобирает фоновая задача, а не правка nginx: если файла для поддомена ещё нет, дождитесь её выполнения или проверьте расписание по статье «cron». Как устроена сборка карты — в статье «Карта сайта».