请问怎么知道打开链接的来源?

需求是做一个数据统计网站的来源,可是怎么获取呢?

有用 document.referrer 属性的,可是这个属性限制太多,经常获取不到值

请问还有什么方法呢?

比如我分享一个链接到微信,然后微信直接点击链接用默认浏览器打开。

阅读 2.1k
3 个回答

取不到值是故意的,保护用户隐私。你有几个选择:

  1. 就统计能统计到的信息
  2. 尽量让你关注的平台给你特殊标记
  3. 加入一些统计联盟,分享一些统计数据

一般来说通过 referrer 属性来获取,同一个浏览器中的打开链接,可以获取到来源的网站。

如果是微信的打开的话,多半是需要从 URL 中获取微信拼接的 query 参数来判断(不是必定有)。不过如果是微信的话,倒是可以通过 UA 头来判断。

总的来说并没有一个万能的方法,因为不同的场景就是需要用不同的判断方式来判断和处理。

另外一个就是你需要统计的两个维度不一样,一个是来源网站,一个来源设备。
来源网站 可以用 referrer 来统计。
来源设备 可以用 UA 头来统计。

这个你是不是应该用 http 协议中的 user-agent

下面以我的 iphone 为例。

微信内部浏览器打开能够获取到的头信息包含了 MicroMessenger:

GET / HTTP/1.1
Host: 172.16.111.194:10000
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.29(0x18001d36) NetType/WIFI Language/zh_CN
Accept-Language: zh-CN,zh-Hans;q=0.9
Accept-Encoding: gzip, deflate
Connection: keep-alive

如果是微信打开后,选择默认浏览器打开,如果没有额外的手段,在我从 http 的头信息来看,没有任何方法能够知道打开的来源是微信,实际上也确实不是微信,因为这只是微信把连接交给了默认浏览器打开:

GET / HTTP/1.1
Host: 172.16.111.194:10000
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Mobile/15E148 Safari/604.1
Accept-Language: zh-CN,zh-Hans;q=0.9
Accept-Encoding: gzip, deflate
Connection: keep-alive

其实你是不是可以换一个思路,在生成分享链接到微信时,动态生成一个 idurl 中,你在内部保存这个 id 是属于微信的,如果被访问,你就知道了这是从微信访问的,同时你也可以利用这个 id,来限制用户只能在微信中访问。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏