Посетители проходят через несколько перенаправлений до страницы
Общие инструкции. Откройте эту статью из своего отчёта PageCheck, чтобы увидеть её заполненной цепочками перенаправлений, найденными на вашем сайте, и правилом для вашего хостинга (Cloudflare, Plesk, cPanel, Apache или nginx).
Что это такое
У сайта четыре корневых адреса: с www и без, по http:// и по https://. Посетители вводят любой из них, старые ссылки и результаты поиска ведут на любой из них. Только один отдаёт страницу; остальные три должны отправлять посетителя туда одним постоянным перенаправлением (301) — прямо на адрес https:// и никогда через http:// по пути.
Каждое лишнее перенаправление — это полное обращение к серверу и обратно, прежде чем страница вообще начнёт загружаться, а Google просит не более одного. Переход с https:// обратно на http:// ставит нового посетителя на незашифрованное соединение, которое любой в той же сети может прочитать или перенаправить.
Что не так
Один или несколько корневых адресов проходят два и более перенаправления до страницы, идут по пути через незашифрованный http://, используют временное перенаправление, заканчиваются на другом сайте или вообще не доходят до страницы.
Как исправить
1. Определите единственный конечный адрес и убедитесь, что HTTPS работает на каждом имени.
Страница отдаётся по адресу https://example.com, так что именно на него должны указывать все остальные. Прежде чем добавлять перенаправления, откройте https:// на другом имени (www.example.com) в браузере: предупреждения о сертификате быть не должно. Сертификаты Let's Encrypt и Cloudflare покрывают оба имени, когда оба указаны; если одного не хватает, сначала добавьте его в сертификат, иначе каждое перенаправление с этого имени будет начинаться с предупреждения.
2. Настройте одно постоянное перенаправление с каждого из остальных корневых адресов прямо на конечный. Используйте правило для того места, где отвечает ваш сайт (хостинг подскажет): одно правило, которое обрабатывает схему и www за один шаг, а не два правила одно за другим. Используйте 301, никогда 302 или 307, и сохраняйте путь и строку запроса.
Apache или LiteSpeed (также хостинги Plesk и cPanel с Apache): в файле .htaccess в главной папке сайта, над строкой «# BEGIN WordPress»
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]nginx: блоки server сайта
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.example.com;
# the certificate must cover www.example.com
return 301 https://example.com$request_uri;
}Cloudflare, если сайт находится за ним: Rules → Redirect Rules → Create rule
When incoming requests match (custom filter expression):
http.host eq "www.example.com"
Then: Dynamic redirect, status code 301, preserve query string:
concat("https://example.com", http.request.uri.path) -
Plesk: Websites & Domains → Hosting Settings: установите «Preferred domain» в выбранную форму (
https://example.com) и отметьте «Permanent SEO-safe 301 redirect from HTTP to HTTPS». Тогда Plesk отправляет каждый остальной корневой адрес на конечный за один шаг. - cPanel: Domains → Redirects: постоянное (301) перенаправление с подстановочным знаком с другого имени на конечный адрес, «Redirect with or without www», — или правило .htaccess выше.
- Если CDN или балансировщик нагрузки завершает HTTPS перед сервером, сервер видит незашифрованный http://, и правило .htaccess выше зацикливается. Проверяйте заголовок «X-Forwarded-Proto» вместо %{HTTPS} или задайте перенаправление на стороне CDN, как с Cloudflare.
- После этого удалите все остальные правила перенаправления для этих адресов (старый плагин «принудительный HTTPS», второе перенаправление в панели управления): именно два правила дают два перехода.
3. Скажите браузерам использовать https:// с самого начала.
Когда https:// работает на обоих именах, отправляйте заголовок Strict-Transport-Security: max-age=31536000; includeSubDomains на обоих. Браузер, однажды посетивший сайт, больше никогда не пробует http://, так что для вернувшихся посетителей переход через http:// исчезает. Добавляйте «preload» и отправляйте домен на hstspreload.org только когда каждый поддомен работает по HTTPS.
4. Проверьте. Запросите у каждого корневого адреса его первый ответ: все, кроме конечного адреса, должны отвечать 301 с конечным адресом в «location», а конечный адрес должен отвечать 200:
В терминале
curl -sI http://www.example.com/ | grep -i '^HTTP\|^location' curl -sI https://www.example.com/ | grep -i '^HTTP\|^location' curl -sI http://example.com/ | grep -i '^HTTP\|^location' curl -sI https://example.com/ | grep -i '^HTTP\|^location'
Затем запустите эту проверку снова: она проходит все четыре адреса и перечисляет каждый переход.
Make every root address of my website reach the page in one permanent redirect: http://www.example.com/, https://www.example.com/ and http://example.com/ must each answer 301 straight to https://example.com (same path and query), never via http:// on the way, and https://example.com/ must answer 200.
The site is not known to be behind a CDN.
Steps:
1. Make sure the certificate covers example.com and www.example.com (no warning on https:// for either name).
2. Replace all existing redirect rules for these addresses with ONE rule that handles scheme and host in the same step: on Cloudflare a Single Redirect `http.host eq "www.example.com"` → `concat("https://example.com", http.request.uri.path)` (301, preserve query string) with Always Use HTTPS left on; on Apache/LiteSpeed a RewriteCond %{HTTPS} off [OR] / RewriteCond %{HTTP_HOST} ^www\.example\.com$ / RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L] block above # BEGIN WordPress; on nginx a port-80 server block for both names and a port-443 block for www.example.com, each `return 301 https://example.com$request_uri;`. Behind a TLS-terminating proxy test X-Forwarded-Proto, not %{HTTPS}.
3. Remove the other rules (control panel redirects, force-HTTPS / force-www plugins) so no address takes two hops.
4. Send `Strict-Transport-Security: max-age=31536000; includeSubDomains` on both names once https:// works on both.
5. Verify with curl -sI on all four root addresses: three answer 301 with location https://example.com/… in one hop, the final one 200; show me the output.
Tell me exactly which files or settings you changed.
Resources:
- Google Search Central, redirects and Google Search: https://developers.google.com/search/docs/crawling-indexing/301-redirects
- Cloudflare, Single Redirects: https://developers.cloudflare.com/rules/url-forwarding/single-redirects/
Тема: example.com – просьба сделать так, чтобы каждый адрес сайта перенаправлял на конечный за один шаг Здравствуйте! Проверка сайта (PageCheck) показала, что корневые адреса нашего сайта (с www и без, http:// и https://) не все доходят до страницы одним постоянным перенаправлением. Страница отдаётся по адресу https://example.com. Пожалуйста: 1. Убедитесь, что сертификат HTTPS покрывает и имя с www, и имя без www. 2. Настройте одно постоянное (301) перенаправление с каждого из остальных корневых адресов прямо на https://example.com с сохранением пути и удалите все другие правила перенаправления для них (чтобы ни один адрес не проходил два перехода и ни один не шёл через http://). 3. Отправляйте заголовок Strict-Transport-Security на обоих именах. 4. Проверьте, что каждый корневой адрес отвечает 301 на конечный адрес за один шаг, а конечный адрес отвечает 200. Источники: - Google Search Central, redirects: https://developers.google.com/search/docs/crawling-indexing/301-redirects Спасибо!
Проверьте свой сайт, чтобы узнать, есть ли у него эта проблема. Проверить сайт