Wie diese Prüfung funktioniert
Diese Prüfung greift nur, wenn deine Seite den Header Referrer-Policy bereits sendet; fehlt er ganz, meldet das der Header-Scanner. Scanaris liest den Wert und öffnet, wenn er unsafe-url oder no-referrer-when-downgrade enthält, einen Befund mit niedrigem Schweregrad und dem exakten Wert. Jeder andere Wert (strict-origin-when-cross-origin, no-referrer, same-origin, origin, strict-origin) gilt als in Ordnung. Gemessen wird also nicht, ob du den Header hast, sondern ob der, den du hast, die vollständige URL preisgibt.
Was der Referrer ist und was durchsickert
Jedes Mal, wenn ein Nutzer einen Link zu einer anderen Seite anklickt oder deine Seite ein Bild oder Skript von einer anderen Domain lädt, schickt der Browser dem Ziel einen Header Referer mit der URL der Seite, von der er kommt. Die Referrer-Richtlinie entscheidet, wie viel dieser URL gesendet wird. Mit unsafe-url die vollständige URL samt Pfad und Parametern, selbst wenn das Ziel HTTP ist. Mit no-referrer-when-downgrade die vollständige URL an jedes HTTPS-Ziel; das war bis 2020 das Standardverhalten der Browser, weshalb es in vielen alten Konfigurationen noch steht. Was durchsickert, sind Dinge wie /dashboard/rechnungen/8841, /reset-password?token=..., /suche?q=kuendigung oder die Kennung eines geteilten Dokuments: Alles, was in der URL des Nutzers steht, landet bei Werbenetzwerken, Analysediensten und jeder externen Seite, auf die du verlinkst.
So behebst du es
Der empfohlene Wert für fast jede Seite:
Referrer-Policy: strict-origin-when-cross-origin
Er sendet die vollständige URL innerhalb deiner eigenen Domain (deine Analyse funktioniert weiter), nur den Origin (https://deinedomain.de) an andere Domains und nichts, wenn das Ziel HTTP ist. Es ist der Standard moderner Browser, mit dem expliziten Setzen fixierst du also nur, was sie ohnehin tun. Soll niemand erfahren, woher der Besucher kommt, ist no-referrer noch strenger.
- Nuxt: in
routeRulesdernuxt.config, unter der Regel'/**'. - Next.js: in der Funktion
headers()dernext.config.js. - Vercel: in
vercel.json. Netlify: in_headers. - nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;. Apache:Header always set Referrer-Policy "strict-origin-when-cross-origin". - Express:
helmet.referrerPolicy({ policy: 'strict-origin-when-cross-origin' }).
Braucht ein bestimmter Link ein anderes Verhalten (etwa ein Partnerprogramm, das den vollständigen Referrer verlangt), stell das an diesem Link mit dem Attribut referrerpolicy ein, statt die Richtlinie der ganzen Seite zu lockern.
Prüf, ob es behoben ist
curl -sI https://deinedomain.de | grep -i referrer-policy
Es muss strict-origin-when-cross-origin oder no-referrer erscheinen. Prüf auch, dass im HTML kein <meta name="referrer"> mit einem anderen Wert steht: Das Meta hat auf dieser Seite Vorrang vor dem Header.
Häufige Fragen
Verliere ich Daten in Google Analytics oder meinem Statistik-Tool?
Nein. Die Analyse deiner eigenen Seite speist sich aus dem Skript, das du einbindest, nicht aus dem Referrer. Was sich ändert, ist, was die Seiten sehen, auf die du verlinkst: statt der genauen Seite sehen sie deine Domain. Für deine eigenen internen Seiten bleibt der vollständige Referrer erhalten.
Meine Seite hat keine URLs mit sensiblen Daten.
Heute. Ein Link zum Zurücksetzen des Passworts, eine Bestellkennung oder ein Suchparameter tauchen auf, sobald die Seite wächst. Die richtige Richtlinie kostet eine Zeile und hat keine Nebenwirkungen.
Warum war no-referrer-when-downgrade der Standard?
Weil in den ersten Jahren des Webs der vollständige Referrer als nützlich galt und HTTPS die Minderheit war. Chrome, Firefox und Safari haben den Standard zwischen 2020 und 2021 auf strict-origin-when-cross-origin geändert, genau wegen der Lecks, die diese Anleitung beschreibt. Alle verwandten Header erklärt HTTP-Header für Menschen.