Odwiedzający przechodzą przez kilka przekierowań przed stroną
Instrukcje ogólne. Otwórz ten artykuł z raportu PageCheck, aby zobaczyć go wypełniony łańcuchami przekierowań znalezionymi w Twojej witrynie i regułą dla Twojego hostingu (Cloudflare, Plesk, cPanel, Apache lub nginx).
Co to jest
Witryna ma cztery adresy główne: z www i bez, przez http:// i przez https://. Odwiedzający wpisują dowolny z nich, stare linki i wyniki wyszukiwania prowadzą do dowolnego z nich. Tylko jeden serwuje stronę; pozostałe trzy powinny kierować odwiedzającego tam jednym stałym przekierowaniem (301), prosto na adres https:// i nigdy po drodze przez http://.
Każde dodatkowe przekierowanie to pełna wymiana z serwerem, zanim strona w ogóle zacznie się ładować, a Google prosi o nie więcej niż jedno. Skok z https:// z powrotem na http:// stawia nowego odwiedzającego na nieszyfrowanym połączeniu, które każdy w tej samej sieci może podsłuchać lub przekierować.
Co jest nie tak
Co najmniej jeden z adresów głównych potrzebuje dwóch lub więcej przekierowań, by dotrzeć do strony, przechodzi po drodze przez nieszyfrowane http://, używa tymczasowego przekierowania, kończy się na innej witrynie lub w ogóle nie dociera do strony.
Jak naprawić
1. Wybierz jeden adres docelowy i upewnij się, że HTTPS działa na każdej nazwie.
Strona jest serwowana pod https://example.com, więc to adres, na który powinny wskazywać wszystkie pozostałe. Zanim dodasz jakiekolwiek przekierowanie, otwórz https:// na drugiej nazwie (www.example.com) w przeglądarce: nie może pokazać ostrzeżenia o certyfikacie. Certyfikaty Let's Encrypt i Cloudflare obejmują obie nazwy, gdy obie są wpisane; jeśli jednej brakuje, najpierw dodaj ją do certyfikatu, inaczej każde przekierowanie z tej nazwy zacznie się od ostrzeżenia.
2. Ustaw jedno stałe przekierowanie z każdego pozostałego adresu głównego prosto na adres docelowy. Użyj reguły dla miejsca, w którym odpowiada Twoja witryna (hosting może Ci to powiedzieć): jednej reguły, która obsługuje schemat i www w tym samym kroku, a nie dwóch reguł jedna po drugiej. Użyj 301, nigdy 302 ani 307, i zachowaj ścieżkę oraz parametry zapytania.
Apache lub LiteSpeed (także hostingi Plesk i cPanel z Apache): w pliku .htaccess w głównym folderze witryny, nad linią „# 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: bloki server witryny
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, jeśli witryna jest za nim: 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: ustaw „Preferred domain” na wybraną formę (
https://example.com) i zaznacz „Permanent SEO-safe 301 redirect from HTTP to HTTPS”. Plesk wysyła wtedy każdy pozostały adres główny na docelowy w jednym kroku. - cPanel: Domains → Redirects: stałe (301) przekierowanie z symbolem wieloznacznym z drugiej nazwy na adres docelowy, „Redirect with or without www” — albo reguła .htaccess powyżej.
- Jeśli CDN lub równoważnik obciążenia kończy HTTPS przed serwerem, serwer widzi nieszyfrowane http:// i reguła .htaccess powyżej się zapętla. Sprawdzaj nagłówek „X-Forwarded-Proto” zamiast %{HTTPS} albo ustaw przekierowanie w CDN, jak w Cloudflare.
- Następnie usuń każdą inną regułę przekierowania dla tych adresów (starszą wtyczkę „wymuś HTTPS”, drugie przekierowanie w panelu): to dwie reguły dają dwa skoki.
3. Każ przeglądarkom używać https:// od początku.
Gdy https:// działa na obu nazwach, wysyłaj nagłówek Strict-Transport-Security: max-age=31536000; includeSubDomains na obu. Przeglądarka, która raz odwiedziła witrynę, nigdy więcej nie próbuje http://, więc skok przez http:// znika dla powracających odwiedzających. Dodaj „preload” i zgłoś domenę na hstspreload.org dopiero wtedy, gdy każda subdomena działa przez HTTPS.
4. Sprawdź. Zapytaj każdy adres główny o jego pierwszą odpowiedź: każdy oprócz adresu docelowego musi odpowiedzieć 301 z adresem docelowym w „location”, a adres docelowy musi odpowiedzieć 200:
W terminalu
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'
Następnie uruchom to sprawdzenie ponownie: podąża za wszystkimi czterema adresami i wypisuje każdy skok.
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/
Temat: example.com – prośba o przekierowanie każdego adresu witryny na docelowy w jednym kroku Dzień dobry, Sprawdzenie witryny (PageCheck) wykazało, że adresy główne naszej witryny (z www i bez, http:// i https://) nie wszystkie docierają do strony jednym stałym przekierowaniem. Strona jest serwowana pod https://example.com. Prosimy o: 1. Upewnij się, że certyfikat HTTPS obejmuje zarówno nazwę z www, jak i bez www. 2. Ustaw jedno stałe (301) przekierowanie z każdego z pozostałych adresów głównych prosto na https://example.com, zachowując ścieżkę, i usuń wszelkie inne reguły przekierowań dla nich (aby żaden adres nie potrzebował dwóch skoków i żaden nie przechodził przez http://). 3. Wysyłaj nagłówek Strict-Transport-Security na obu nazwach. 4. Sprawdź, czy każdy adres główny odpowiada 301 na adres docelowy w jednym kroku, a adres docelowy odpowiada 200. Źródła: - Google Search Central, redirects: https://developers.google.com/search/docs/crawling-indexing/301-redirects Dziękuję!
Sprawdź swoją stronę, aby zobaczyć, czy ma ten problem. Sprawdź stronę