Skip to content

Всё для WordPress, веб-разработки — и не только

🚀 Редирект с www на без www через .htaccess: полный гайд для Grav, WordPress и других CMS

🚀 Редирект с www на без www через .htaccess: полный гайд для Grav, WordPress и других CMS

Сайт открывается и с www, и без, а поисковик видит два разных адреса с одинаковым содержимым. Дубли страниц, размазанный ссылочный вес, путаница в Search Console. Знакомо?

Ни Grav, ни WordPress не решают эту проблему из коробки. Файл .htaccess и ровно один блок кода за пять минут всё исправляют. Дальше, проверенные строчки для Apache-серверов: универсальные, без хардкода домена, с HTTPS и без. Плюс способ убедиться, что редирект работает не только в браузере.

💡 Быстрый обзор:

  • Выберите канонический вариант (с www или без) и добавьте универсальный 301-редирект в .htaccess
  • Проверьте цепочку редиректов через curl -I или онлайн-чекер: браузер кеширует 301 и может врать
  • Один блок кода одновременно решает проблему www и принудительного HTTPS

Зачем вообще выбирать между www и без www

Google не отдаёт предпочтения ни тому, ни другому варианту, официальная позиция неизменна годами. Но выбрать нужно один и держаться его. Без редиректа www.site.ru/page и site.ru/page индексируются как разные URL, ссылочный вес делится пополам, а в аналитике один и тот же трафик числится дважды.

Что выбрать? Для крупных проектов www удобнее: cookie не утекают на поддомены вроде cdn. и api., проще настраивать DNS-записи. Для небольших сайтов разницы почти нет. Ориентируйтесь на то, что уже проиндексировано: вбейте site:вашдомен.ru в поиск и посмотрите, какой вариант чаще в выдаче. Его и делайте каноническим.

Технический нюанс: Grav не генерирует редирект сам. WordPress, только если siteurl в настройках явно совпадает с желаемым вариантом, но и это работает нестабильно. Решение одно, mod_rewrite в Apache через .htaccess.

Где лежит.htaccess и как его не положить

Файл .htaccess находится в корне сайта, там же, где index.php или папка wp-admin. Если файла нет (Grav без готового шаблона, свежий хостинг), создайте текстовый файл с именем .htaccess, точка в начале обязательна.

Перед любой правкой скачайте текущую версию на компьютер. Синтаксическая ошибка в .htaccess кладёт сайт с ошибкой 500 мгновенно. Железное правило: одна резервная копия локально, вторая, с другим именем прямо на сервере (.htaccess.backup). Восстановить можно даже без доступа к админке, через FTP или файловый менеджер хостинга.

Для Grav и WordPress правило общее: если в файле уже есть RewriteEngine On, не дублируйте эту строку. Добавляйте новый блок редиректа после неё. В стандартном .htaccess Grav она присутствует по умолчанию.

301 редирект с www на без www: универсальный код

Код ниже работает для любого домена, не нужно подставлять example.com вручную. Удобно, если ведёте несколько сайтов или переносите правила между проектами. Добавьте в .htaccess после RewriteEngine On:

1RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
2RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Построчно: RewriteCond ловит любой хост, начинающийся с www., и захватывает домен в скобки. RewriteRule перенаправляет запрос на тот же путь без www, подставляя захваченный домен через %1. Флаг R=301 означает постоянный редирект. L говорит серверу «стоп, дальше правила не применять». NC делает проверку без учёта регистра.

Если сайт работает по HTTPS, замените http:// на https:// в RewriteRule. А лучше, используйте комбинированный блок, который за один проход решает и www, и HTTPS:

1RewriteCond %{HTTPS} off [OR]
2RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
3RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Первое условие срабатывает на HTTP-запросы, второе, на www. Если истинно любое из двух ([OR]), запрос улетает на https://домен-без-www/путь. Один блок, две проблемы закрыты.

Обратный сценарий: с без www на www

Если нужно, чтобы в адресной строке всегда был www, используйте зеркальный вариант:

1RewriteCond %{HTTP_HOST} !^www\. [NC]
2RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Логика та же, только условие инвертировано: если хост не начинается с www, добавляем www. в начало. %{HTTP_HOST} подставляет текущий хост целиком, в отличие от предыдущего блока, где мы отрезали www. через захват в скобки.

Версия с HTTPS:

1RewriteCond %{HTTPS} off [OR]
2RewriteCond %{HTTP_HOST} !^www\. [NC]
3RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

Используйте один из четырёх блоков, тот, что соответствует вашему варианту канонического домена и наличию HTTPS. Два блока подряд не нужны и создадут лишний хоп в цепочке редиректов.

Как проверить, что редирект работает

Не полагайтесь на браузер, он кеширует 301-редиректы и показывает старую картинку даже после правки .htaccess. Три способа узнать правду:

  • curl** -I.** В терминале: curl -I http://www.example.com. Корректный ответ начинается с HTTP/1.1 301 Moved Permanently, а заголовок Location: содержит целевой URL. Проверьте оба варианта, с www и без.
  • Онлайн-чекеры. Redirect Checker или HTTP Status Code Checker: вставляете URL, видите полную цепочку редиректов и итоговый код ответа.
  • Google Search Console. После смены канонического домена зайдите в настройки свойства и укажите предпочитаемую версию. Это не заменяет .htaccess, но даёт дополнительный сигнал поисковику.

Отдельный совет для Grav: после правки .htaccess сбросьте кеш CMS, Admin → Configuration → Performance → Clear Cache. Grav агрессивно кеширует страницы, и без сброса редирект может не примениться к уже сгенерированным копиям.

⁉️🤔 Частые вопросы

Какой вариант лучше для SEO, с www или без?

Google официально заявляет: разницы нет. Выбирайте любой и придерживайтесь его. Ключевой фактор, консистентность: внутренние ссылки, карта сайта и canonical-теги должны указывать на один вариант. По данным опроса Ahrefs, около 55% сайтов из топ-100 используют версию без www, но оба варианта ранжируются одинаково успешно.

Что будет, если вообще не настраивать редирект?

Поисковые системы увидят два независимых сайта-дубля. Ссылочный вес разделится, страницы начнут конкурировать друг с другом в выдаче, а в отчётах аналитики один и тот же трафик размажется по двум хостам. Через несколько месяцев типичная картина: половина страниц в индексе с www, половина без, позиции нестабильны.

Можно ли обойтись без.htaccess?

Да, но альтернативы либо сложнее, либо медленнее. Плагины для WordPress вроде Redirection и Rank Math работают на уровне PHP, каждый запрос проходит через WordPress-ядро, что создаёт нагрузку. Для высоконагруженных сайтов .htaccess на уровне Apache заметно быстрее. Для Grav плагинов-редиректоров практически нет, поэтому .htaccess остаётся основным путём. На NGINX-серверах аналогом служат директивы return 301 в блоке server {}.

Нужно ли прописывать редирект для каждой страницы отдельно?

Нет, приведённые правила универсальны, они применяются ко всем URL сайта автоматически. Один блок покрывает главную, внутренние страницы, картинки и CSS-файлы. Отдельные редиректы со старых URL на новые настраиваются дополнительно строками Redirect 301 /old-page /new-page, но к www-проблеме они отношения не имеют.

Ошибка 500 после правки.htaccess, что делать?

Скопируйте .htaccess.backup обратно через FTP или файловый менеджер хостинга, сайт оживёт мгновенно. Проверьте код на опечатки: пропущенный пробел, лишний слеш, непарные скобки. Добавляйте правила по одному и тестируйте после каждого изменения. И никогда не правьте .htaccess на продакшене без актуального бэкапа под рукой.

Редирект работает, но Google продолжает показывать старую версию в выдаче, почему?

Переиндексация занимает от нескольких дней до пары недель. Убедитесь, что canonical-теги на страницах указывают на выбранный вариант, а карта сайта содержит URL без старого хоста. В Search Console можно запросить переобход через инструмент проверки URL, это ускоряет процесс, но не гарантирует мгновенный результат.

Какой вариант поставить: короткий вердикт

Если сайт новый, берите вариант без www и HTTPS. Меньше символов в адресной строке, проще диктовать вслух, никаких проблем с cookie на поддоменах. Для большинства проектов этого хватает с запасом.

Уже проиндексировались с www, не ломайте то, что работает. Настройте редирект с без-www на www, обновите canonical и живите спокойно.

Весь процесс: открыли .htaccess, добавили один из четырёх блоков выше, сбросили кеш CMS, проверили через curl -I. Пять минут, и дубли ушли из поисковой картины. Другие приёмы для .htaccess собраны в подборке по настройке сервера, загляните, если настраиваете сайт комплексно.