# 归因与 unknown

> 短链接、结果，以及为什么来源不明的结果记为 unknown。

URL: https://mcp-docs.opennomos.com/zh/docs/growth-loop/attribution

OpenNomos 不知道你的网站上发生了什么。它只知道别人告诉它的内容，而且不会去猜。

## 短链接

用 `track` 传 `type: "link"`，为你要发布的某一个位置创建一条链接：

```json
{ "type": "link", "link": { "target_url": "https://acme.com/pricing", "channel": "reddit", "experiment_id": "exp_7Hn2LpWc0" } }
```

| `mode` | 返回 |
| --- | --- |
| `redirect`（默认） | `short_url`（`https://service.opennomos.com/l/<code>`）和 `final_url`。会统计点击。 |
| `utm_only` | 只返回带 UTM 参数的 `final_url`。OpenNomos 不统计任何东西。 |

两种模式都会加上 `utm_source`（取 `channel`，没有则为 `opennomos`）、`utm_medium=opennomos`、`utm_campaign`（取实验 id，没有则为项目 slug）；跳转型链接还会加 `utm_content=<code>`。

目标地址的安全限制：只允许 `https`；不能是 IP 地址、`localhost`、已知的短链服务或 OpenNomos 自己；跳转型链接每个项目最多 **三个不同的目标域名**（项目自己的 `website`、`url` 或 `domain` 档案字段的域名算一个）。第四个域名会失败并返回 `link_host_not_allowed`，请让用户确认。

### 一次点击会记录什么

每次跳转记录：时间、机器人标记（空的或像爬虫的 user agent）、IP 和 user agent 的**按日加盐哈希**（用来统计独立访客，又不保存这两者）、国家，以及来源页的**域名**（仅域名）。见[隐私](https://mcp-docs.opennomos.com/zh/docs/reference/privacy.md)。聊天应用的链接预览属于机器人；简报会分别报告 `human` 和 `bot` 点击。

## 结果

用 `log_action` 的 `outcome` 对象记录结果（`type` 如 `signup`、`reply`、`call_booked`；可选 `value`、`unit`、`evidence`）。

| 归因 | 何时 |
| --- | --- |
| `direct` | 结果关联到某个机会或短链接。 |
| `unknown` | 没有关联。 |

归因为 `unknown` 的结果**绝不会算到某个渠道头上**，也不计入 `outcome:<type>` 的实验指标。简报的 `attribution` 部分会把它们报告为 `unknown` 并给出 `unknown_share`，让质量不高的现状看得见，而不是被藏起来。（简报里还有一个 `self_reported` 桶；目前的 `log_action` 只会记录 `direct` 或 `unknown`。）

## 边界

- **不会有转化事件回传。** 点击在跳转时被统计。你网站上的注册，只有当你或你的 agent 用 `log_action` 记录（比如来自你自己的分析数据）并关联到链接或机会时，才会被统计。
- **没有账号体系的网站**可以归因点击，但除非你自己上报，否则无法归因注册。
- **接入分析工具**（Search Console、GA4、产品分析），让 agent 能读到真实转化，这是计划中的，目前没有。

<Callout type="info">
如果你不知道一次注册从哪来，就让它保持 `unknown`。这是正确答案。
</Callout>
