Zum Inhalt springen

Besucher durchlaufen mehrere Weiterleitungen vor der Seite

Warnung Ganze Domain Sicherheit

Allgemeine Anleitung. Öffnen Sie diesen Artikel aus Ihrem PageCheck-Bericht, dann ist er mit den auf Ihrer Website gefundenen Weiterleitungsketten und der Regel für Ihr Hosting (Cloudflare, Plesk, cPanel, Apache oder nginx) ausgefüllt.

Was es ist

Eine Website hat vier Stammadressen: mit und ohne www, über http:// und über https://. Besucher tippen jede davon ein, alte Links und Suchergebnisse zeigen auf jede davon. Nur eine liefert die Seite aus; die anderen drei sollten den Besucher mit einer einzigen dauerhaften Weiterleitung (301) dorthin schicken – direkt auf die https://-Adresse und nie über http://.

Jede zusätzliche Weiterleitung ist ein kompletter Weg zum Server und zurück, bevor die Seite überhaupt zu laden beginnen kann, und Google verlangt höchstens eine. Ein Sprung von https:// zurück auf http:// setzt einen Erstbesucher auf eine unverschlüsselte Verbindung, die jeder im selben Netz mitlesen oder umleiten kann.

Was falsch ist

Eine oder mehrere Stammadressen brauchen zwei oder mehr Weiterleitungen bis zur Seite, führen unterwegs über unverschlüsseltes http://, verwenden eine vorübergehende Weiterleitung, enden auf einer anderen Website oder erreichen gar keine Seite.

So beheben Sie es

1. Legen Sie die eine endgültige Adresse fest und stellen Sie sicher, dass HTTPS auf jedem Namen funktioniert. Die Seite wird unter https://example.com ausgeliefert, also sollte jede andere Adresse dorthin zeigen. Öffnen Sie vor jeder Weiterleitung https:// auf dem anderen Namen (www.example.com) im Browser: Es darf keine Zertifikatswarnung erscheinen. Zertifikate von Let's Encrypt und Cloudflare decken beide Namen ab, wenn beide eingetragen sind; fehlt einer, nehmen Sie ihn zuerst ins Zertifikat auf, sonst beginnt jede Weiterleitung von diesem Namen mit einer Warnung.

2. Richten Sie von jeder anderen Stammadresse eine einzige dauerhafte Weiterleitung direkt auf die endgültige ein. Verwenden Sie die Regel für die Stelle, an der Ihre Website antwortet (Ihr Hoster kann es Ihnen sagen): eine Regel, die Schema und www im selben Schritt behandelt, nicht zwei Regeln nacheinander. Verwenden Sie einen 301, nie einen 302 oder 307, und behalten Sie Pfad und Query-String bei.

Apache oder LiteSpeed (auch Plesk- und cPanel-Hosts mit Apache): in der Datei .htaccess im Hauptordner der Website, oberhalb der Zeile „# 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: die Server-Blöcke der Website

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, falls die Website dahinter liegt: 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: Stellen Sie „Preferred domain“ auf die gewählte Form (https://example.com) und setzen Sie den Haken bei „Permanent SEO-safe 301 redirect from HTTP to HTTPS“. Plesk schickt dann jede andere Stammadresse in einem Schritt zur endgültigen.
  • cPanel: Domains → Redirects: eine dauerhafte (301) Wildcard-Weiterleitung vom anderen Namen zur endgültigen Adresse, „Redirect with or without www“ – oder die .htaccess-Regel oben.
  • Beendet ein CDN oder Load Balancer HTTPS vor dem Server, sieht der Server nur http://, und die .htaccess-Regel oben läuft in eine Schleife. Prüfen Sie dann den Header „X-Forwarded-Proto“ statt %{HTTPS}, oder setzen Sie die Weiterleitung wie bei Cloudflare im CDN.
  • Entfernen Sie danach jede andere Weiterleitungsregel für diese Adressen (ein älteres „HTTPS erzwingen“-Plugin, eine zweite Weiterleitung im Hosting-Panel): Zwei Regeln sind es, die zwei Sprünge erzeugen.

3. Sagen Sie Browsern, dass sie von Anfang an https:// verwenden sollen. Sobald https:// auf beiden Namen funktioniert, senden Sie auf beiden den Header Strict-Transport-Security: max-age=31536000; includeSubDomains. Ein Browser, der die Website einmal besucht hat, versucht dann nie wieder http://, sodass der http://-Sprung für wiederkehrende Besucher verschwindet. Fügen Sie „preload“ hinzu und melden Sie die Domain bei hstspreload.org nur an, wenn jede Subdomain über HTTPS funktioniert.

4. Prüfen. Fragen Sie jede Stammadresse nach ihrer ersten Antwort: Jede außer der endgültigen Adresse muss mit 301 und der endgültigen Adresse in „location“ antworten, die endgültige Adresse mit 200:

Im Terminal

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'

Führen Sie dann diese Prüfung erneut aus: Sie folgt allen vier Adressen und listet jeden Sprung auf.

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/

Prüfen Sie Ihre Website, um zu sehen, ob sie dieses Problem hat. Website prüfen