Как исключить robots.txt из редиректа в .htaccess при переезде сайта
При переезде сайта на новый домен часто возникает задача: оставить на старом домене файл robots.txt с директивой Host, указывающей на новый адрес. Однако из-за правил редиректа в файле .htaccess сам robots.txt перенаправляется на новый домен, что делает директиву Host бесполезной. В этой статье разберём, как настроить исключение для robots.txt, чтобы он корректно отдавался со старого домена, и оценим целесообразность такого решения.
Зачем оставлять robots.txt на старом домене?
Директива Host в robots.txt используется для указания поисковым системам зеркала сайта. При переезде на новый домен это помогает Яндексу и Google быстрее склеить старый и новый адреса, передав вес ссылок. Если robots.txt редиректится, поисковые роботы не видят директиву, и процесс склейки замедляется. Поэтому важно, чтобы файл robots.txt оставался доступным по старому URL без редиректа.
Как реализовать исключение в .htaccess
Чтобы запретить редирект для robots.txt, нужно добавить условие RewriteCond перед правилами перенаправления. Используйте модуль mod_rewrite вместо директив Redirect, так как он даёт больше гибкости. Пример кода:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteRule ^(.*)$ https://msk.di-service.ru/$1 [R=301,L]Это правило проверяет, что запрашиваемый URI не равен /robots.txt. Если это robots.txt - редирект не срабатывает, и файл отдаётся со старого домена. Для всех остальных страниц применяется редирект 301.
Пример для вашего файла .htaccess
Исходный файл использует комбинацию Redirect и RewriteRule. Чтобы добавить исключение, нужно переписать все редиректы на RewriteRule. Вот как это может выглядеть:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteRule ^remont-diselnih-forsunok-v-spb$ https://di-service.ru/ [R=301,L]
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteRule ^remont-diagnostika-forsunok(.*)$ https://msk.di-service.ru/remont-diagnostika-forsunok$1 [R=301,L]
... (аналогично для всех правил)Однако проще вынести условие один раз перед всеми правилами:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteRule ^(.*)$ https://msk.di-service.ru/$1 [R=301,L]Но это сработает только если все старые URL ведут на один новый домен. Если часть ссылок идёт на di-service.ru, нужно уточнить RewriteRule для каждого случая.
Стоит ли это делать?
Да, это имеет смысл, особенно если старый домен ещё индексируется поисковиками. Директива Host в robots.txt ускоряет передачу ссылочного веса и помогает избежать дублей. Однако убедитесь, что на старом домене нет других критических файлов (например, sitemap.xml), которые тоже могут потребовать исключения. Для полной уверенности проверьте доступность robots.txt через браузер или curl после настройки.
Альтернативные решения
- Использовать HTTP-заголовок Link: Укажите канонический URL в заголовке ответа для robots.txt.
- Настроить зеркало в Яндекс.Вебмастере: Добавьте старый и новый домены как зеркала, указав главное зеркало.
- Временно отключить редирект: Если переезд ещё не завершён, можно убрать редирект для robots.txt только на период индексации.
Выберите способ, который лучше подходит под вашу конфигурацию сервера и требования SEO.