Cómo funciona esta comprobación
Esta comprobación solo actúa si tu web ya envía la cabecera Referrer-Policy; si falta por completo, lo señala el escáner de cabeceras. Scanaris lee el valor y, si contiene unsafe-url o no-referrer-when-downgrade, abre un hallazgo de severidad baja con el valor exacto. Cualquier otro valor (strict-origin-when-cross-origin, no-referrer, same-origin, origin, strict-origin) se da por bueno. Es decir, no mide que tengas la cabecera, sino que la que tienes no filtre la URL completa.
Qué es el referer y qué se filtra
Cada vez que un usuario pulsa un enlace hacia otra web, o tu página carga una imagen o un script de otro dominio, el navegador envía al destino una cabecera Referer con la URL de la página desde la que viene. La política de referer decide cuánto de esa URL se envía. Con unsafe-url, la URL completa, con ruta y parámetros, incluso si el destino es HTTP. Con no-referrer-when-downgrade, la URL completa a cualquier destino HTTPS; era el comportamiento por defecto de los navegadores hasta 2020 y por eso sigue en muchas configuraciones antiguas. Lo que se filtra son cosas como /dashboard/facturas/8841, /reset-password?token=..., /buscar?q=despido o el identificador de un documento compartido: todo lo que haya en la URL del usuario llega a redes de anuncios, a servicios de analítica y a cualquier sitio externo al que enlaces.
Cómo arreglarlo
El valor recomendado para casi cualquier web:
Referrer-Policy: strict-origin-when-cross-origin
Envía la URL completa dentro de tu propio dominio (así tu analítica sigue funcionando), solo el origen (https://tudominio.com) a otros dominios, y nada si el destino es HTTP. Es el valor por defecto de los navegadores modernos, con lo que al ponerlo explícitamente solo estás fijando lo que ya hacen. Si no necesitas que nadie sepa de dónde viene el visitante, no-referrer es más estricto todavía.
- Nuxt: en
routeRulesdenuxt.config, en la regla'/**'. - Next.js: en la función
headers()denext.config.js. - Vercel: en
vercel.json. Netlify: en_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' }).
Si algún enlace concreto necesita otro comportamiento (por ejemplo un programa de afiliados que exige el referer completo), ajústalo en ese enlace con el atributo referrerpolicy en lugar de relajar la política de toda la web.
Comprueba que está arreglado
curl -sI https://tudominio.com | grep -i referrer-policy
Debe mostrar strict-origin-when-cross-origin o no-referrer. Comprueba también que no haya una etiqueta <meta name="referrer"> en el HTML con un valor distinto: la meta tiene prioridad sobre la cabecera en esa página.
Preguntas frecuentes
¿Perderé datos en Google Analytics o en mi herramienta de estadísticas?
No. La analítica de tu propia web se alimenta del script que incluyes, no del referer. Lo que cambia es lo que ven las webs a las que enlazas: en lugar de la página exacta verán tu dominio. Para tus propias páginas internas, el referer completo se mantiene.
Mi web no tiene URLs con datos sensibles.
Hoy. Un enlace de restablecer contraseña, un identificador de pedido o un parámetro de búsqueda aparecen en cuanto la web crece. Fijar la política correcta cuesta una línea y no tiene efectos secundarios.
¿Por qué no-referrer-when-downgrade era el valor por defecto?
Porque en los primeros años de la web el referer completo se consideraba útil y HTTPS era minoritario. Chrome, Firefox y Safari cambiaron el valor por defecto a strict-origin-when-cross-origin entre 2020 y 2021 precisamente por las filtraciones que describe esta guía. Todas las cabeceras relacionadas las explica cabeceras HTTP para humanos.