I visitatori passano per più reindirizzamenti prima della pagina
Istruzioni generali. Aprite questo articolo dal vostro report PageCheck per vederlo compilato con le catene di reindirizzamenti trovate sul sito e la regola per il vostro hosting (Cloudflare, Plesk, cPanel, Apache o nginx).
Che cos’è
Un sito web ha quattro indirizzi radice: con e senza www, via http:// e via https://. I visitatori digitano uno qualsiasi di essi, i vecchi link e i risultati di ricerca puntano a uno qualsiasi di essi. Solo uno serve la pagina; gli altri tre dovrebbero inviarvi il visitatore con un solo reindirizzamento permanente (301), direttamente all'indirizzo https:// e mai attraverso http:// lungo il percorso.
Ogni reindirizzamento in più è un viaggio completo di andata e ritorno verso il server prima ancora che la pagina possa iniziare a caricarsi, e Google ne chiede al massimo uno. Un salto da https:// a http:// mette chi visita il sito per la prima volta su una connessione non cifrata che chiunque sulla stessa rete può leggere o dirottare.
Cosa non va
Uno o più indirizzi radice richiedono due o più reindirizzamenti per raggiungere la pagina, passano per http:// non cifrato lungo il percorso, usano un reindirizzamento temporaneo, finiscono su un altro sito web o non raggiungono mai una pagina.
Come correggere
1. Decidete l'unico indirizzo finale e assicuratevi che HTTPS funzioni su ogni nome.
La pagina è servita a https://example.com, quindi è l'indirizzo a cui devono puntare tutti gli altri. Prima di aggiungere un reindirizzamento, aprite https:// sull'altro nome (www.example.com) in un browser: non deve mostrare alcun avviso sul certificato. I certificati di Let's Encrypt e di Cloudflare coprono entrambi i nomi quando entrambi sono elencati; se ne manca uno, aggiungetelo prima al certificato, altrimenti ogni reindirizzamento da quel nome inizierà con un avviso.
2. Impostate un solo reindirizzamento permanente da ogni altro indirizzo radice direttamente a quello finale. Usate la regola per il punto in cui il vostro sito risponde (il vostro hosting può dirvelo): una sola regola che gestisce schema e www nello stesso passaggio, non due regole una dopo l'altra. Usate un 301, mai un 302 o 307, e mantenete il percorso e la query string.
Apache o LiteSpeed (anche hosting Plesk e cPanel con Apache): nel file .htaccess nella cartella principale del sito, sopra la riga «# 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: i blocchi server del sito
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, se il sito è dietro di esso: 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: impostate «Preferred domain» sulla forma scelta (
https://example.com) e spuntate «Permanent SEO-safe 301 redirect from HTTP to HTTPS». Plesk manda allora ogni altro indirizzo radice a quello finale in un solo passaggio. - cPanel: Domains → Redirects: un reindirizzamento permanente (301) con wildcard dall'altro nome all'indirizzo finale, «Redirect with or without www», oppure la regola .htaccess qui sopra.
- Se una CDN o un bilanciatore di carico termina l'HTTPS davanti al server, il server vede solo http:// e la regola .htaccess qui sopra va in loop. Verificate l'intestazione «X-Forwarded-Proto» invece di %{HTTPS}, oppure impostate il reindirizzamento sulla CDN come con Cloudflare.
- Rimuovete poi ogni altra regola di reindirizzamento per questi indirizzi (un vecchio plugin «forza HTTPS», un secondo reindirizzamento del pannello di controllo): sono due regole a produrre due salti.
3. Dite ai browser di usare https:// fin dall'inizio.
Quando https:// funziona su entrambi i nomi, inviate l'intestazione Strict-Transport-Security: max-age=31536000; includeSubDomains su entrambi. Un browser che ha visitato il sito una volta non prova più http://, così il salto http:// sparisce per i visitatori che tornano. Aggiungete «preload» e inviate il dominio a hstspreload.org solo quando ogni sottodominio funziona in HTTPS.
4. Verifica. Chiedete a ogni indirizzo radice la sua prima risposta: tutti tranne l'indirizzo finale devono rispondere 301 con l'indirizzo finale in «location», e l'indirizzo finale deve rispondere 200:
In un terminale
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'
Poi eseguite di nuovo questo controllo: segue tutti e quattro gli indirizzi ed elenca ogni salto.
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/
Oggetto: example.com – per favore fate reindirizzare ogni indirizzo del sito a quello finale in un solo passaggio Buongiorno, Un controllo del sito (PageCheck) ha rilevato che gli indirizzi radice del nostro sito (con e senza www, http:// e https://) non raggiungono tutti la pagina con un solo reindirizzamento permanente. La pagina è servita a https://example.com. Per favore: 1. Assicuratevi che il certificato HTTPS copra sia il nome con www sia quello senza. 2. Impostate un solo reindirizzamento permanente (301) da ciascuno degli altri indirizzi radice direttamente a https://example.com, mantenendo il percorso, e rimuovete ogni altra regola di reindirizzamento per essi (così nessun indirizzo richiede due salti e nessuno passa per http://). 3. Inviate l'intestazione Strict-Transport-Security su entrambi i nomi. 4. Verificate che ogni indirizzo radice risponda 301 all'indirizzo finale in un solo passaggio, e che l'indirizzo finale risponda 200. Risorse: - Google Search Central, redirects: https://developers.google.com/search/docs/crawling-indexing/301-redirects Grazie!
Controlla il tuo sito per sapere se ha questo problema. Controlla un sito