Давай начистоту. Когда я только начинал, файлы `robots.txt` и `.htaccess` казались мне какой-то магией высшего пилота. Одна ошибка — и сайт вылетит из индекса. Правда в том, что эти файлы — твои лучшие союзники в борьбе с мусором в индексе. А этот мусор (дубли страниц, служебные скрипты, админки) размывает вес и мешает ранжироваться главным страницам.
Представь, что твой сайт — это офис.
Robots.txtЭто табличка на двери с инструкциями для почтальонов (поисковых роботов): «Заходите, но в эту комнату (админку) не заглядывайте, эти документы (логи) я сам разберу».
Статус: Просьба (робот может проигнорировать)
Место: Корень сайта: https://вашсайт.ru/robots.txt
.htaccessЭто внутренняя система безопасности офиса. Она физически не пускает кого-либо в определённые помещения или автоматически перенаправляет всех из маленькой тёмной комнаты (дубля) в главный светлый зал (каноничную страницу).
Статус: Закон для сервера (выполняется беспрекословно)
Место: Корень сайта: https://вашсайт.ru/.htaccess
Главное отличие: robots.txt — это просьба, которую робот может проигнорировать (и некоторые так и делают). .htaccess — это закон для сервера, который выполняется беспрекословно. Для надежной защиты используем оба файла в связке.
Файл лежит в корне сайта: https://вашсайт.ru/robots.txt
Вот базовый, но мощный шаблон, который подходит для 95% сайтов на WordPress/битрикс:
User-agent: *Allow: / # Разрешаем индексацию всего, что не запрещено явноDisallow: /wp-admin/Disallow: /wp-includes/Disallow: /wp-login.phpDisallow: /wp-content/plugins/Disallow: /wp-content/themes/ # Часто здесь лежат копии страниц в демо-данныхDisallow: /search/ # Поиск по сайту — генератор мусораDisallow: /?s= # Альтернативный адрес поискаDisallow: /author/ # Страницы авторов, если это не корпоративный блогDisallow: /xmlrpc.phpDisallow: /trackback/Disallow: /feed/Disallow: /cgi-bin/Disallow: /?add_to_wishlist= # Параметры из URL, которые создают дублиDisallow: /*?replytocom= # Комментарии с параметрамиSitemap: https://direct-result.ru/sitemap.xml Почему именно так? Из личного опыта:
/wp-admin/ и /wp-includes/ — попытка проиндексировать файлы админки или ядра CMS — верный способ показать роботу "изнанку" сайта и подхватить в индекс служебные скрипты.?add_to_wishlist= — одна страница товара может иметь десятки адресов из-за параметров, а робот видит их как разные страницы. Закрываем это здесь, а решаем окончательно в .htaccess.Этот файл также находится в корне сайта. Перед правкой сделай бекап! Одна синтаксическая ошибка может "положить" сайт.
Наша главная задача через .htaccess — убить дубли на уровне сервера, прописав 301-редирект на каноничные версии.
Один и тот же сайт может быть доступен по 8 разным адресам (http://site.ru, http://www.site.ru, https://site.ru, https://www.site.ru + каждый со слешем и без). Надо выбрать ОДИН каноничный вариант (я всегда выбираю https://site.ru/ без www и без слеша в конце для директорий).
RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://direct-result.ru/$1 [R=301,L]RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]RewriteRule ^(.*)$ https://%1/$1 [R=301,L]RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_URI} (.+)/$RewriteRule ^ %1 [R=301,L] Если на сайте есть ?utm_source=... или ?sessionid=..., это создает дубли. Робот должен видеть только чистый URL.
RewriteCond %{QUERY_STRING} ^(.*)&?(utm_source|utm_medium|utm_campaign|utm_term|utm_content|gclid|fbclid|sessionid)=[^&]+(.*)$ [NC]RewriteRule ^(.*)$ /$1?%1%3 [R=301,L,NE] Пояснение: Это правило "вырезает" перечисленные параметры из запроса и возвращает 301 на чистый URL. Google рекомендует закрывать UTM-метки от индексации.
Здесь я перечислю то, что ломало SEO моим клиентам, пока мы не нашли причину:
Disallow: / в robots.txtЧто происходит: Полное закрытие сайта от индексации. Видел даже на больших сайтах.
Решение: Удалить эту строку или заменить на Allow: /.
Ошибка: Disallow: /css/, Disallow: /js/, Disallow: /images/
Проблема: Робот должен иметь доступ к стилям и скриптам для корректного рендеринга страницы. Без этого ты скрываешь от Google половину сайта.
Решение: Никогда не закрывать ресурсы, необходимые для отображения страницы.
Пример: Disallow: /catalog/, когда там лежат товары.
Решение: Всегда проверяй путь перед тем, как добавить его в Disallow.
Проблема: Если использовать R=302 (временный редирект), вес страницы не передастся.
Решение: Всегда используй R=301 для постоянных переадресаций.
Совет из практики: Самая частая ошибка — случайное закрытие Disallow: /wp-content/uploads/. В этой папке лежат все изображения и файлы сайта. Закрыв ее, ты сделаешь медиафайлы невидимыми для поиска по картинкам.
Теория — ничто без проверки. Вот мой обязательный чек-лист после любых правок:
твойсайт.ru/robots.txt (должен отображаться)твойсайт.ru/.htaccess (второй, скорее всего, выдаст ошибку 403 — это нормально, он закрыт).htaccess. Введи старый URL (с www или параметром) и посмотри, как его обрабатывает Google. В статусе должно быть "Найден: URL переадресован" с кодом 301.О: Индексация дублей — это прошлое. После наших правок новые дубли появляться не будут. Старые же исчезнут из индекса сами со временем (недели, иногда месяцы). Можно ускорить процесс, отправив старые дубли-URL на переобход в GSC или сделав точечный 410-й ответ (удалено) для совсем мусорных страниц.
О: Верно. .htaccess — файл для сервера Apache. На Nginx конфигурация прописывается в основном файле конфигурации сервера (обычно nginx.conf). Логика правил (редиректы с www на без-www, с HTTP на HTTPS) та же, но синтаксис другой. Тебе нужен доступ к конфигурации сервера или помощь администратора.
О: Нет, и вот живой пример. Ты закрыл страницу поиска в robots.txt (Disallow: /search/). Умный робот послушается, но на твой сайт могут вести тысячи ссылок с других сайтов на URL с параметрами (site.ru?q=...). Если эти параметры не обработаны, они проиндексируются. Robots.txt не блокирует сканирование по ссылкам, он лишь говорит, куда не ходить самому. Связка с .htaccess решает проблему наверняка.
О: Страх обоснован. Поэтому алгоритм такой:
Все редиректы проверяй потом, главное — чтобы сайт работал.
О: Да, конечно. В robots.txt можно указать конкретные пути. Например, Disallow: /private/ закроет всю папку /private/. Но помни: это только просьба роботу. Для полной защиты нужно также закрыть доступ через настройки сервера или паролем.
О: Не часто. Только когда:
Раз в полгода — достаточная периодичность для аудита этих файлов.