Вопрос или проблема
Мы обновляем наш веб-сайт (example.co.uk), частью которого является настройка 301 редиректов со старого сайта в файле .htaccess — что вполне нормально и просто.
Старый сайт имел область, которая использовала подсайт (xyz.example.co.uk), который был направлен на платформу третьей стороны.
Новый сайт теперь включает эту область (на нескольких различных страницах), поэтому подсайт больше не нужен. Для соблюдения наилучшей практики и сохранения SEO ценности существующих ссылок, какой будет лучший курс действий? Я провел часы, ищя ответы в интернете, но не могу найти ничего, что дало бы мне уверенность для реализации.
С точки зрения SEO мы идеальным образом хотим 301 редиректить старые страницы следующим образом:
https://xyz.example.co.uk/page1 на https://example.co.uk/page2
https://xyz.example.co.uk/page2/page3 на https://example.co.uk/page4/page5
И так далее…
Однако я понимаю, что размещение этих в файле .htaccess (на сервере основного домена) не будет работать, поскольку мы пытаемся перейти с подсайта на домен?
Во-первых, нужно ли нам DNS-запись для подсайта? Или она должна оставаться на месте? Подсайт в настоящее время является CNAME, но могу ли я изменить его на A запись и указать тот же IP, что и у основного домена?
Я рассмотрел множество вариантов (для справки, хостинг на Cloudways — Digital Ocean, а DNS управляется через CloudFlare):
A) Не беспокоиться о редиректах со страницы на страницу и вместо этого добавить следующее в .htaccess основного домена:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^xyz.example.co.uk$
RewriteRule ^(.*)$ https://example.co.uk/page/ [R=301,L]
Но это плохо для SEO?
B) Ничего не делать с редиректом и просто указывать подсайт на основной домен с помощью A записи, а затем потерять в SEO.
C) Настроить правило страницы в Cloudflare и перенаправить https://xyz.example.co.uk/* на https://example.co.uk/page — в этом случае я предполагаю, что мне нужно будет сохранить запись DNS для подсайта? Однако, следует ли изменить ее на A запись и указать на IP сервера основного домена?
Я думаю, что запутался достаточно, поэтому любая помощь будет очень полезна, спасибо.
Лучший вариант для SEO — 301 редиректить URL подсайта на новые URL.
Вам нужна DNS-запись для xyz.example.co.uk
, чтобы люди могли разрешать IP-адрес сервера.
Затем вам нужно, чтобы на этом IP-адресе работал HTTP-сервер для выполнения необходимых вам редиректов. В вашем случае это может быть тот же сервер, который вы используете для основного сайта (при условии, что ваш хостинг-провайдер поддерживает настройки подсайтов).
На HTTP-сервере вам нужно определить виртуальный сервер для xyz.example.co.uk
, который будет содержать правила редиректа, которые вы хотите использовать.
Также вы должны убедиться, что на https://xyz.example.co.uk
установлен действующий сертификат TLS.
Оптимизация SEO больше относится к теме Webmasters SE для вопросов и ответов.
С технической точки зрения:
Во-первых, нужна ли нам запись DNS для подсайта?
Вам нужна запись DNS для подсайта xyz.example.co.uk
, чтобы любая форма редиректа могла существовать. Без этой DNS-записи любой запрос к xyz.example.com завершится неудачей с ошибкой “узел не найден” или аналогичной проблемой DNS…
Чтобы редирект работал в веб-браузерах, необходимо, чтобы веб-сервер работал на любом хосте, на который вы указываете подсайт xyz.example.co.uk
.
Если у вас есть политика HSTS и/или старый подсайт также был доступен по HTTPS, вам необходимо настроить этот веб-сервер с действительным SSL-сертификатом для xyz.example.co.uk
.
Если вы укажете подсайт xyz.example.co.uk
на тот же веб-сервер, который используется для вашего основного сайта (например, с CNAME-записью), у вас есть два варианта:
- Вы создаете дополнительную запись “VirtualHost” специально для
xyz.example.co.uk
(мое рекомендованное решение, так как это сохраняет конфигурацию чистой и разделенной) - Вы обрабатываете запросы для
xyz.example.co.uk
на существующем сайтеwww.example.com
. Тогда:- либо вы не делаете никакой специальной обработки, и тогда
http://xyz.example.co.uk
будет отображать индексную страницуhttp://www.example.com
, а запрос кhttp://xyz.example.co.uk/page2/page3
будет отображать страницуhttp://www.example.co.uk/page2/page3
, если она существует, или вашу страницу ошибки 404, когда ее нет. - либо вы настраиваете правила перезаписи, которые срабатывают, когда используется
xyz.example.co.uk
для доступа к вашему сайту, и выполняете тип редиректов, которые вы также можете делать с отдельного VirtualHost
- либо вы не делаете никакой специальной обработки, и тогда
Самая простая конфигурация в стиле Apache (так как вы говорили о ужасе, который является .htaccess
) использует директиву Redirect
, которая изменит запросы как для http://
, так и для https://xyz.example.com/service/foo.txt
на https://www.example.com/service/foo.txt
:
# существующий VirtualHost для www.example.com
<VirtualHost *:80>
Servername www.example.com
...
</VirtualHost>
<VirtualHost *:443>
Servername www.example.com
SSLCertificateFile "/etc/apache2/conf/ssl/www.example.com.crt"
SSLCertificateKeyFile "/etc/apache2/conf/ssl/www.example.com.key"
...
</VirtualHost>
# новые минимальные записи VirtualHost для xyz.example.co.uk
<VirtualHost *:80>
Servername xyz.example.com
Redirect "/" "https://www.example.com/"
</VirtualHost>
<VirtualHost *:443>
Servername xyz.example.com
SSLCertificateFile "/etc/apache2/conf/ssl/xyz.example.com.crt"
SSLCertificateKeyFile "/etc/apache2/conf/ssl/xyz.example.com.key"
Redirect "/" "https://www.example.com/"
</VirtualHost>
Всегда начинайте тестировать ваши редиректы с временного редиректа, так как постоянные редиректы кешируются вашим браузером, что делает исправление любых ошибок сложным.
Так как вы уже упомянули, что контент со старого подсайта не будет найден по некоторому адресу, директива Redirect
выше может не быть лучшим решением.
Вместо этого вы можете выбрать перенаправление всех старых URI на единую целевую страницу (объясняя, что XYZ была устаревшей, пожалуйста, изучите новый сайт, используя эту карту сайта) с помощью директивы RedirectMatch
:
# новые минимальные записи VirtualHost для xyz.example.co.uk
<VirtualHost *:80>
Servername xyz.example.com
RedirectMatch "*" "https://www.example.com/xyz-is-deprecated.html"
</VirtualHost>
<VirtualHost *:443>
Servername xyz.example.com
SSLCertificateFile "/etc/apache2/conf/ssl/xyz.example.com.crt"
SSLCertificateKeyFile "/etc/apache2/conf/ssl/xyz.example.com.key"
RedirectMatch "*" "https://www.example.com/xyz-is-deprecated.html"
</VirtualHost>
Самый трудоемкий вариант — сопоставить каждую старую страницу на подсайте xyz с новыми страницами на вашем основном сайте. Это можно сделать, например, с помощью директивы RewriteMap
.
/etc/apache2/xyz-to-www.txt
##
## xyz-to-www.txt - Сопоставление старых URI с xyz.example.com на
## соответствующие URI на www.example.com
##
/ /xyz-is-deprecated.html
/page1 /page2
/page2/page3 /page4/page5
И тогда это сопоставит http(s)://xyz.example.co.uk/page1
на https://www.example.co.uk/page2
, и все, что не сопоставлено, будет перенаправлено на страницу https://www.example.com/xyz-is-deprecated.html
:
# новые минимальные записи VirtualHost для xyz.example.co.uk
<VirtualHost *:80>
Servername xyz.example.com
RewriteMap xyz-to-www "txt:/etc/apache2/xyz-to-www.txt"
RewriteRule "(.*)" "https://www.example.com${xyz-to-www:$1}" [R]
</VirtualHost>
<VirtualHost *:443>
Servername xyz.example.com
SSLCertificateFile "/etc/apache2/conf/ssl/xyz.example.com.crt"
SSLCertificateKeyFile "/etc/apache2/conf/ssl/xyz.example.com.key"
RewriteMap xyz-to-www "txt:/etc/apache2/xyz-to-www.txt"
RewriteRule "(.*)" "https://www.example.com${xyz-to-www:$1|/xyz-is-deprecated.html}" [R]
</VirtualHost>
Примечание: все вышеперечисленное не протестировано и предназначено только для иллюстрации концепций.
Ответ или решение
Правильная реализация DNS и перенаправлений с подсайта на домен
Введение
Обновление веб-сайта — это процесс, требующий тщательного планирования, особенно когда речь идет о сохранении SEO-позиции и переходах с одного адреса на другой. В вашей ситуации необходимо осуществить 301-перенаправления со старого поддомена (xyz.example.co.uk) на новые страницы основного домена (example.co.uk). Ниже подробно описано, как правильно реализовать эти перенаправления и что нужно учесть в процессе.
Шаг 1: Создание DNS-записи для поддомена
Для того чтобы перенаправления работали, необходимо, чтобы у вас была DNS-запись для поддомена xyz.example.co.uk. Эта запись может быть CNAME, указывающим на ваш основной домен, или A-запись, указывающая на IP-адрес вашего сервера. Поскольку вы используете Cloudflare для управления DNS, наиболее вероятным решением будет оставить запись в виде CNAME.
Рекомендации по DNS-записи:
- Создайте CNAME-запись для xyz.example.co.uk, указывающую на example.co.uk.
- Проверьте, что у вас есть действующий SSL-сертификат для xyz.example.co.uk, если вы будете использовать HTTPS.
Шаг 2: Настройка веб-сервера для обработки перенаправлений
После настройки DNS вам необходимо настроить ваш веб-сервер для обработки запросов к старому поддомену и отправки 301-перенаправлений на новые страницы. В зависимости от используемого вами веб-сервера (например, Apache или Nginx), вы можете использовать различные подходы.
Apache
Если вы используете Apache, рекомендуется создать отдельный виртуальный хост для xyz.example.co.uk. Таким образом, вы сможете управлять перенаправлениями отдельно от основного домена.
Пример конфигурации виртуального хоста в файле конфигурации Apache:
<VirtualHost *:80>
ServerName xyz.example.co.uk
Redirect 301 /page1 https://example.co.uk/page2
Redirect 301 /page2/page3 https://example.co.uk/page4/page5
</VirtualHost>
<VirtualHost *:443>
ServerName xyz.example.co.uk
SSLCertificateFile "/etc/ssl/certs/xyz.example.co.uk.crt"
SSLCertificateKeyFile "/etc/ssl/private/xyz.example.co.uk.key"
Redirect 301 /page1 https://example.co.uk/page2
Redirect 301 /page2/page3 https://example.co.uk/page4/page5
</VirtualHost>
Nginx
Если вы используете Nginx, конфигурация будет выглядеть следующим образом:
server {
listen 80;
server_name xyz.example.co.uk;
location /page1 {
return 301 https://example.co.uk/page2;
}
location /page2/page3 {
return 301 https://example.co.uk/page4/page5;
}
}
server {
listen 443 ssl;
server_name xyz.example.co.uk;
ssl_certificate /etc/ssl/certs/xyz.example.co.uk.crt;
ssl_certificate_key /etc/ssl/private/xyz.example.co.uk.key;
location /page1 {
return 301 https://example.co.uk/page2;
}
location /page2/page3 {
return 301 https://example.co.uk/page4/page5;
}
}
Шаг 3: Проверка перенаправлений
Важно протестировать перенаправления, чтобы убедиться в их правильной работе. Это можно сделать с помощью инструментов для проверки HTTP-заголовков или командной строки с использованием curl
.
Пример команды для проверки:
curl -I https://xyz.example.co.uk/page1
Шаг 4: SEO-оптимизация
Необходимо помнить о том, что 301-перенаправления сообщают поисковым системам о том, что страница была перемещена навсегда, что помогает сохранить SEO-ценность старых ссылок. Рекомендуется также настроить карты сайта и обновить внутренние ссылки, чтобы избежать битых ссылок в будущем.
Заключение
Правильная реализация процесса перенаправления с поддомена на основной домен требует заботливого подхода, особенно в контексте SEO. Следуя предложенным шагам, вы сможете сохранить ценность ссылок и улучшить опыт пользователей. Если у вас возникнут дополнительные вопросы, рекомендуется консультироваться с SEO-специалистами или профессионалами в области веб-разработки, чтобы обеспечить успешный переход для ваших пользователей и поисковых систем.