
🚀 Редирект с 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:
1 RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 2 RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Построчно: RewriteCond ловит любой хост, начинающийся с www., и захватывает домен в скобки. RewriteRule перенаправляет запрос на тот же путь без www, подставляя захваченный домен через %1. Флаг R=301 означает постоянный редирект. L говорит серверу «стоп, дальше правила не применять». NC делает проверку без учёта регистра.
Если сайт работает по HTTPS, замените http:// на https:// в RewriteRule. А лучше, используйте комбинированный блок, который за один проход решает и www, и HTTPS:
1 RewriteCond %{HTTPS} off [OR] 2 RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 3 RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Первое условие срабатывает на HTTP-запросы, второе, на www. Если истинно любое из двух ([OR]), запрос улетает на https://домен-без-www/путь. Один блок, две проблемы закрыты.
Обратный сценарий: с без www на www
Если нужно, чтобы в адресной строке всегда был www, используйте зеркальный вариант:
1 RewriteCond %{HTTP_HOST} !^www\. [NC] 2 RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Логика та же, только условие инвертировано: если хост не начинается с www, добавляем www. в начало. %{HTTP_HOST} подставляет текущий хост целиком, в отличие от предыдущего блока, где мы отрезали www. через захват в скобки.
Версия с HTTPS:
1 RewriteCond %{HTTPS} off [OR] 2 RewriteCond %{HTTP_HOST} !^www\. [NC] 3 RewriteRule ^(.*)$ 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 собраны в подборке по настройке сервера, загляните, если настраиваете сайт комплексно.



