You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NextJS中获取referrer值?解决document.referrer无返回问题

解决NextJS中document.referrer无法获取值的问题

原因分析

NextJS的客户端路由(next/router)基于SPA导航机制,内部页面切换不会触发浏览器完整刷新,document.referrer仅在首次从外部网站进入应用、直接刷新页面或外部链接跳转时才有值。应用内路由跳转时该属性不会更新,因此无法获取新的来源页面信息。

解决方案

1. 手动跟踪内部路由来源

通过router.events监听路由变化,手动记录上一个路由地址,替代document.referrer的作用:

import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';

export default function MyComponent() {
  const router = useRouter();
  const [previousPath, setPreviousPath] = useState(null);

  useEffect(() => {
    const handleRouteChangeStart = () => {
      // 记录当前路由作为下一次跳转的来源
      setPreviousPath(router.asPath);
    };

    router.events.on('routeChangeStart', handleRouteChangeStart);

    return () => {
      router.events.off('routeChangeStart', handleRouteChangeStart);
    };
  }, [router]);

  // 优先使用手动记录的内部路径,无则用document.referrer
  return (
    <div>
      来源路径:{previousPath || document.referrer}
    </div>
  );
}

2. 服务端直接获取Referer(SSR/SSG场景)

在服务端渲染页面时,可通过请求头直接获取referer(注意拼写缺少末尾的r):

export async function getServerSideProps(context) {
  const referrer = context.req.headers.referer || '';
  return {
    props: { referrer },
  };
}

export default function Page({ referrer }) {
  return <div>服务端获取的来源:{referrer}</div>;
}

3. 注意事项

  • document.referrer受浏览器隐私策略限制,HTTPS跳转HTTP、隐私模式等场景下可能被清空,返回空字符串。
  • 内部路由跳转必须手动维护来源路径,因为NextJS客户端导航不会更新document.referrer。

内容的提问来源于stack exchange,提问作者Vishal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:47:41