1. 首页
  2. 运营分析
  3. 网站来源渠道分析:为什么不推荐用 document.referrer

网站来源渠道分析:为什么不推荐用 document.referrer

一步一个脚印一个坑 4小时前 ⋅ 1 阅读
ad

 

运营做渠道分析,最朴素的想法就是"看看用户是从哪个网址点过来的"。这时候前端同学多半会掏出 document.referrer。这个字段确实能拿到一些信息,但如果你认真做过多渠道投放,就会知道它丢数据、粒度粗、还容易被"洗"。今天聊聊为什么渠道分析不能指望它,以及正确的做法是什么。


一、先说场景:运营到底想从渠道分析里得到什么

投放过的人都知道,现在几乎没有产品只靠自然流量活着。一个典型的投放组合可能是:

  • 百度 SEM(按关键词买搜索流量)
  • 微信朋友圈 / 视频号信息流广告
  • 抖音、小红书的信息流或达人合作
  • 公众号文章、知乎软文、KOL 推文
  • 邮件营销(EDM)、短信触达

钱撒出去了,运营要回答三个问题:

  1. 每个渠道带来了多少访问?
  2. 这些访问的转化质量怎么样?——不只是点击,而是注册、下单、关注
  3. 钱花得值不值?下一步预算往哪儿倾斜?

这三个问题,构成了"运营渠道分析"的全部内容。注意第二个问题的关键词——转化质量。渠道分析从来不只关心"来了多少人",更关心"来的是什么样的人"。比如:我认为我们网站的登录人数是最值得关注的指标,那么登录转化率就应该作为我们分析的关键指标了。那么哪个渠道来的用户,转化率更高呢?

最常用的就是document.referrer,而它只能勉强回答第一个问题的一半。


二、问题:document.referrer 在渠道分析上的五个坑

2.1 一大块流量,天生就没有 referrer

document.referrer 记录的是"用户上一个页面的网址"。但有一大批访问,浏览器里压根不存在"上一个页面":

访问场景 referrer 运营看到的结果
扫二维码打开 空 归为"直接访问"
微信 / QQ / 钉钉里点链接 基本为空(WebView 内不可靠) 归为"直接访问"
邮件、短信、PDF 里的链接 空 归为"直接访问"
App 内嵌浏览器打开 空 归为"直接访问"
地址栏输入、收藏夹 空 归为"直接访问"(这个倒是真的直接)

问题在于:扫码来的、聊天工具来的、邮件来的用户,恰恰是运营最想单独评估的渠道。他们全部被塞进"直接访问"这一个筐里,和真·直接访问(老用户输网址)混在一起,渠道分析直接失真。

如果你的流量里微信生态占比高(做公众号、做私域的几乎都这样),这个筐能吞掉你三成以上的访问。在 referrer 视角下,这些渠道等于不存在——你投了朋友圈广告,报表上却什么都没有。

2.2 有 referrer,但只剩一个"域名"

就算用户真的是从别的网页点过来的,现代浏览器也不见得给你完整的 referrer。两个原因:

一是浏览器默认策略收紧了。 Chrome 85 之后,默认的 Referrer-Policy 是 strict-origin-when-cross-origin——跨域跳转只发送"来源域名",不带路径、不带查询参数。什么意思?用户从百度搜索结果页点进你的网站,你拿到的 referrer 只有:

https://www.baidu.com/

用户搜的词(wd=xxx)、点的是第几条结果、结果页的完整 URL——全都没有。

二是 HTTPS 到 HTTP 的跳转直接不发送。 如果你的落地页还是 HTTP(或者链路中间有任何 HTTP 环节),从 HTTPS 站点跳过来的 referrer 会被浏览器整个吞掉。

这两个因素叠加,意味着"从搜索引擎来的用户搜了什么词"这件事,靠 referrer 在当下基本解析不出来了。而搜索词恰恰是 SEM 优化最核心的数据——没有它,你连否定词都加不了。

2.3 站内一跳,来源就"失忆"

这是最容易被新手忽略的坑。

用户从百度点进你的落地页,落地页 URL 是 https://你的网站/landing?from=baidu_sem。在这一页上,document.referrer 是百度的网址。但只要用户在站内再点一下——进入首页、注册页、详情页——后面每一页的 referrer 都变成了"你自己的网站"。

做渠道分析,你要的是"这个用户是从哪来的",而不是"这一页的上一步是哪一页"。如果只在每次页面加载时读 referrer 上报,就会发生:

  • 落地页的访问能归到百度;
  • 用户在注册页完成注册这个转化动作时,referrer 已经是站内地址,转化被归到了"站内"。

渠道分析最关键的"转化归因",就这样断掉了。所以成熟的方案都会在用户第一次访问时就采集来源并存下来(这就是"首次来源"的由来),而不是每页都读一遍 referrer。

2.4 中间跳转,会把真实渠道"洗掉"

广告行业有个普遍现象:点广告链接,并不会直接到达你的网站,中间要经过好几层:

用户点击 → 广告平台点击监测 → 短链接服务 → 联盟跳转 → 你的落地页

这些中间环节里,只要有一步用 JS 跳转(location.href)、meta refresh,或者设置了 no-referrer 策略,你落地页上读到的 referrer 就变成了中间跳转页的网址,甚至空值。

运营看到报表上写着"来源:某短链服务商域名",或者"来源:直接访问",真实投放渠道被完全掩盖。花了钱投的抖音信息流,最后变成了一堆来源不明的流量。

2.5 粒度不够:运营要的不是"哪个网站"

前面四个坑都是"丢数据",这一个是"数据本身不够用"。

假设一切顺利,referrer 完整地告诉你"来自 https://www.baidu.com/"。然后呢?运营接下来要回答的问题一个都答不了:

  • 是哪个推广计划带来的?(百度后台有十几个计划在跑)
  • 是哪个关键词触发的?(同一个计划下几十个词)
  • 是哪个创意 / 素材吸引点击的?(AB 测试了三个落地页)

referrer 最多给到"哪个网站"这一层。而运营做预算决策,需要的是"计划—关键词—创意"级别的粒度。这一层信息,referrer 结构上就提供不了,必须靠投放链接自带的参数来区分。


三、方案:渠道分析的正确姿势

既然 referrer 靠不住,渠道分析怎么做?成熟的落地组合就三件事:投放链接打标、首次来源持久化、分群漏斗对比质量。

3.1 投放链接打标:让每个渠道"自报家门"

最基础也最有效的一步:在每一条投放链接上带参数。业界通用的 UTM 体系:

https://你的网站/landing?utm_source=baidu&utm_medium=cpc&utm_campaign=2026Q3大促&utm_term=前端监控&utm_content=素材A
参数 含义 举例
utm_source 渠道 baidu / wechat / douyin
utm_medium 媒介 cpc / 信息流 / 邮件
utm_campaign 推广计划 2026Q3大促
utm_term 关键词 前端监控
utm_content 素材 / 创意 素材A / 素材B

二维码、邮件、短信同理——链接上带参数,扫码和点邮件的人就不再是"直接访问",而是带着自己的渠道标识进来。

落地页的 SDK 读取 URL 上的这些参数,和 referrer 一起上报。referrer 在这里的角色降级为"兜底信号":参数为主,referrer 为辅。有参数的用参数;没参数的(比如自然搜索、外站软文)才看 referrer 能补充什么。

3.2 首次来源持久化:"出身"要记在用户身上

前面 2.3 讲过,站内一跳 referrer 就失忆。解法是:用户第一次访问时,把来源信息固化到用户身上,之后无论再来多少次、从哪个入口进来,最初的来源都在。

实现上,第一次访问时把渠道参数、referrer、解析出的搜索词写入用户档案(cookie 或服务端),并标记"这是首次来源,之后不再覆盖"。这样一个用户"出生"在哪个渠道,就一直跟着他。

这一步的价值要在下一步才能完全体现:只有把渠道挂在用户身上,才能把"渠道"和"转化质量"连起来。

3.3 分群 + 漏斗:从"来了多少人"到"来的是什么人"

渠道分析的最后一步,也是最容易被忽略的一步:不要只看每个渠道的访问量,要按渠道把用户分开,分别跑转化漏斗。

以我们自己在用的 Webfunny 埋点系统为例,SDK 会自动记录几个预置用户属性:

  • 首次流量来源(用户第一次是从哪来的)
  • 首次广告关键词(第一次是搜什么广告词进来的)
  • 首次搜索关键词(第一次搜索用的词)

注意,全是"首次"——对应 3.2 的持久化逻辑。有了这些属性,就能建渠道分群:

[属性满足] 首次流量来源 = 百度-短语匹配
[属性满足] 首次流量来源 = 百度-智能匹配

然后把"浏览 → 体验 → 关注 / 注册"的漏斗分别套到两个分群上跑。结果往往是:两个渠道带来的访问量差不了多少,转化率却能差出几倍。

我们自己的真实经历:百度智能匹配带来的流量更多,但漏斗一跑,转化率比短语匹配低了一大截——这就是后来砍掉智能匹配词、转化率反而从 1% 出头涨到 3.4%~5.98% 的依据(完整过程写在《百度推广关键词优化:流量降了,转化率涨了》里)。

这一步为什么必须依赖"首次来源"而不是 referrer?因为转化(注册、下单、关注)往往发生在落地页之后的第 N 个页面,那一刻的 referrer 早就是站内地址了。只有把渠道固化在用户身上,转化数据才能和渠道对上号。

【截图位置 1:Webfunny 埋点系统里按"首次流量来源"维度拆分的渠道分布图】

【截图位置 2:渠道分群 + 漏斗卡片的组合使用效果,展示不同渠道的转化率对比】


四、对比一下:同一批投放,两种视角差多少

假设某产品 9 月同时在跑四个渠道,用"纯 referrer"和"参数 + 首次来源"两种口径看同一批数据:

渠道 referrer 口径看到的 参数 + 首次来源口径看到的 转化率(分群漏斗)
百度 SEM 一部分(只有 baidu.com,分不清计划和词) 完整,可下钻到计划 / 关键词 可按词对比
微信朋友圈 几乎为 0(全在"直接访问"里) 完整 可单独评估
邮件 EDM 0 完整 可单独评估
自然搜索 有(但解析不出搜索词) 有 + 搜索词 可看搜索词质量
“直接访问” 巨大(混入所有无 referrer 的渠道) 只剩真实的直接访问 —

【待补充:从埋点系统拉真实数据填充上表,重点展示"直接访问"口径的差异——referrer 口径下直接访问占比虚高,参数口径下各渠道归位】

两种口径的差别不是数字精度问题,是渠道存在与不存在的问题。用 referrer 口径,你很可能得出"微信投放无效"的结论——不是无效,是数据根本没进来。


五、总结

回到标题的问题:为什么不推荐用 document.referrer 做渠道分析?

  1. 它天生丢数据:扫码、App 内、聊天工具、邮件来的流量全没有 referrer,而这些恰恰是运营最想评估的渠道;
  2. 它给的粒度太粗:最好的情况下也只到"哪个网站",运营需要的"计划—关键词—创意"级别,它结构上提供不了;
  3. 它不可持续:站内一跳来源就失忆,转化归因直接断链。

但也不要走极端——referrer 并非一无是处。在"参数为主"的体系里,它仍然是识别自然搜索、外站软文等"没打标流量"来源的辅助信号。值得采集,不值得依赖。

真正能撑起运营渠道分析的组合是:

投放链接打标(让渠道自报家门) + 首次来源持久化(把出身记在用户身上) + 分群漏斗对比(回答钱花得值不值)

渠道分析的终点从来不是"来了多少人",而是"哪笔钱花对了"。

文中的"首次流量来源、首次广告关键词、首次搜索关键词"来自 Webfunny 埋点系统的预置用户属性,渠道分群 + 漏斗对比可以直接体验:https://www.webfunny.cn/wf_event/dataView.html

相关阅读:

  • 《百度推广关键词优化:流量降了,转化率涨了》
  • 《用户分群怎么做?用 3 个真实场景,讲清楚它的用法和价值》

附:写作备注(发稿前删除本段)

  1. 待补充数据:
    • 第四章的渠道对比表,建议从埋点系统拉真实的"首次流量来源"维度数据填充,重点展示 referrer 口径下"直接访问"占比虚高 vs 参数口径下各渠道归位;
    • 截图 1:按首次流量来源拆分的渠道分布图;
    • 截图 2:渠道分群 + 漏斗对比的效果图。
  2. 标题备选:
    • 网站来源渠道分析:为什么不推荐用 document.referrer?(当前)
    • 运营渠道分析的第一课:别指望 document.referrer
    • document.referrer 丢掉的流量,比你想象的还多
  3. 技术表述校准(已按以下口径撰写):
    • "HTTPS → HTTP 跳转不发送 referrer"为浏览器安全默认行为;
    • "Chrome 85+ 默认 strict-origin-when-cross-origin"指跨域跳转仅发送来源域名;
    • 2.4 中间跳转污染主要发生在 JS / meta refresh 跳转与 no-referrer 中间页,302 服务端跳转通常保留原始 referrer,表述已做区分;
    • 微信等 WebView 内 referrer 不可靠,表述为"基本为空"。
  4. 系列呼应:文中引用了《百度推广关键词优化》《用户分群》两篇已发布文章,发布时请加上站内链接。
  5. 若产品后续有独立的"来源分析 / 渠道分析"报表页,可在第三章补一节产品功能截图。

关于Webfunny

Webfunny专注于前端监控系统,前端埋点系统的研发。 致力于帮助开发者快速定位问题,帮助企业用数据驱动业务,实现业务数据的快速增长。支持H5/Web/PC前端、微信小程序、支付宝小程序、UniApp和Taro等跨平台框架。实时监控前端网页、前端数据分析、错误统计分析监控和BUG预警,第一时间报警,快速修复BUG!支持私有化部署,Docker容器化部署,可支持千万级PV的日活量!

  点赞 0   收藏 0
  • 一步一个脚印一个坑
    共发布148篇文章 获得4个收藏
全部评论: 0 条