# AI 引荐访问监测：自己确认 AI 有没有带来访客

在线教程：https://madeinred.com/monitor
原始 Markdown：https://madeinred.com/monitor.md

跟着这份教程，在自己的网站和统计工具里查看：用户是否从 ChatGPT 等 AI 回答中点击了链接、进入哪个页面、有没有注册、咨询或购买。这里监测的是人的引荐访问，不是 AI 爬虫抓取。

开始前，你需要自己的网站，以及已经接入的分析工具（如 GA4、Plausible）或可查看的服务器日志。没有接入统计时，先完成数据接收，再验证来源。

## 先分清两件事

- **被 AI 引用**：ChatGPT、Perplexity、Claude 等回答中出现了你的网站链接。MadeInRed 的「被 AI 引用体检」负责检查网站是否具备被抓取、理解和引用的基础条件。
- **AI 引荐访问**：用户点击 AI 产品回答中的链接，浏览器真的打开了你的网站。它是访问归因问题，通常要结合 UTM、HTTP Referer、落地页和后续转化来观察。

一次引用不保证一定带来访问；一次访问也不代表 AI 一定引用了页面正文。引用体检的就绪分也不证明已经发生引用。AI 爬虫抓取、真实引用和人类访客点击，要分开记录和验证。

## 第一步：生成一个测试链接

在 https://madeinred.com/monitor 输入自己的落地页地址，选择 AI 来源，生成并打开测试链接。例如：

    https://your-site.example/pricing?utm_source=chatgpt.com&utm_medium=referral&utm_campaign=ai-referral-test

- utm_source=chatgpt.com：给访问标记来源。
- utm_medium=referral：标记为引荐。
- utm_campaign=ai-referral-test：明确这是手动测试，方便从正式报表排除。

生成器在你的浏览器本地处理地址，保留其他查询参数和 #定位，替换原有的这三个 UTM 字段。它不会为你的站点接入统计。

**手动打开带参数的链接，只验证统计链路，不证明 AI 已经推荐你。** ChatGPT 有时会传来源参数，但你不能强制它或其他 AI 产品一定添加 UTM。真实访问的参数以实际请求为准。

进入网站后，把 utm_source、utm_medium、utm_campaign 交给你的分析系统或后端保存。最小统计维度是：

1. 来源（source）
2. 媒介（medium）
3. 进入的页面（landing page）
4. 会话是否完成目标（注册、提交表单、购买等）
5. 首次访问时间

**注意：你不能强制 ChatGPT 或其他 AI 产品一定自动添加 UTM。** 只有请求实际带到你的网站时，才能把这个参数当成正向证据。不要把“所有来自 ChatGPT 的点击”写成已经被完整统计。

## 第二步：在自己的统计工具里确认

在新浏览器会话中打开测试链接，检查跳转后参数是否仍在，再到自己的统计工具查看。地址栏有参数，不代表分析系统已收到。

### GA4

先用“实时”报告确认测试访问被收到。随后在“报告 → 获客 → 流量获取”中切换到“会话来源/媒介”，筛选 chatgpt.com / referral；再用“会话广告系列”找 ai-referral-test。常规报告有处理延迟，新标签不一定会改写已有会话的来源；需要按新会话及实际收集结果复核。未取得分析同意或被拦截时，可能无法看到这次测试。

官方文档：https://support.google.com/analytics/answer/12923437?hl=zh-Hans

### Plausible

打开 Sources（来源），筛选 chatgpt.com；打开 Campaigns（广告系列），找到 ai-referral-test。点击来源，查看落地页和已配置的目标转化。

官方文档：https://plausible.io/docs/top-referrers
参数支持：https://plausible.io/docs/custom-query-params

### 自建统计或服务器日志

确认首次请求收到 UTM，保存来源、落地页和时间。后续转化由已有会话或事件机制关联，单条访问日志不会自动完成转化归因。

测试访问和来源都能找到，才说明基础收集链路可用。用 ai-referral-test 单独标记这些访问，从真实 AI 引荐统计中排除。

## 第三步：没有 UTM 时，查看 HTTP Referer

当链接没有 UTM 时，服务器有时仍能从请求头里的 Referer（历史拼写）看到上一个页面。例如请求可能带有：

    Referer: https://chatgpt.com/

在边缘函数、应用服务器或 Web 服务器日志里记录它。Nginx 的最小示例：

    log_format ai_ref '$time_iso8601 $request $status ref=$http_referer';
    access_log /var/log/nginx/ai-referrer.log ai_ref;

在应用代码里，读取请求头的方式是：

    const referer = request.headers.get('referer');
    let referrerHost = '';
    
    try {
      const url = new URL(referer || '');
      if (['https:', 'http:'].includes(url.protocol)
          && !url.username && !url.password) {
        referrerHost = url.hostname.toLowerCase();
      }
    } catch {
      // 空值或无效的请求头，按来源未知处理。
    }
    
    const aiHosts = new Set([
      'chatgpt.com', 'chat.openai.com', 'perplexity.ai',
      'claude.ai', 'gemini.google.com'
    ]);
    const aiSource = aiHosts.has(referrerHost)
      ? referrerHost : 'unknown';

示例只负责安全解析与分类，不负责写入数据库或识别人类访客。来源参数和请求头可以手动设置或伪造，不能用于认证身份。UTM 和 Referer 冲突时保留各自的观测依据。原始日志可能包含敏感参数；按站点日志策略设置访问权限、脱敏和保留期限，优先保存规范化后的主机名。

## 把来源归一化

先保存原始观测值一小段时间，再建立归一化规则。常见候选包括：

- chatgpt.com、chat.openai.com
- perplexity.ai
- claude.ai
- gemini.google.com

不要因为域名“看起来像 AI”就自动归类，也不要假设所有 AI 产品都使用稳定的 Referer。建议保留两个字段：

- raw_referrer：仅在隐私政策允许的期限内保存，用于排查
- attribution_source：例如 chatgpt、perplexity、unknown

## 第四步：记录落地页与转化

你可以在分析工具、日志管道或自己的数据库中记录类似下面的字段：

| 字段 | 示例 | 用途 |
|---|---|---|
| source | chatgpt.com | 来源主机或 UTM 来源 |
| medium | referral | 区分引荐、自然、付费 |
| campaign | ai-referral-test | 标记手动测试，从正式报表排除 |
| evidence | utm / referer | 保存归因依据 |
| landing_path | /pricing | 哪个页面接住了访问 |
| session_id | 随机 ID | 关联后续行为，不放邮箱或姓名 |
| converted | true / false | 是否完成目标 |
| observed_at | 2026-10-08T12:00:00Z | 复盘时间范围 |

不要用请求次数代替会话数或人数。重复刷新、机器人、内部测试都可能影响计数。一次测试转化成功，只说明事件链路可用；业务效果需要观察真实访客和一段时间的数据。

## 验证清单

1. 建一个你自己控制的测试链接，带上 utm_source=chatgpt.com 和 utm_campaign=ai-referral-test。
2. 在真实浏览器中打开它，确认落地页没有丢掉查询参数。
3. 查看浏览器网络请求、边缘日志或应用日志，确认参数被收到。
4. 完成一次测试转化，确认来源能和转化事件关联。
5. 用受控请求测试不带 UTM 的 Referer 解析，包括空值、无效 URL 和相似域名。
6. 对照原始日志和分析面板，检查时区、去重和跨页面传递是否一致。
7. 将 ai-referral-test 测试数据从正式统计中排除。

## 第五步：正确解读结果

可以说：

- “我们观察到带 utm_source=chatgpt.com 的访问。”
- “我们观察到 Referer 主机为 chatgpt.com 的访问。”
- “这些可观察到的访问中，有多少完成了目标。”

不能说：

- “我手动打开测试链接，所以 ChatGPT 已经推荐了我的网站。”
- “没有 UTM，所以这个用户一定不是从 AI 来的。”
- “没有 Referer，所以 AI 没有带来访问。”
- “一次带参数的访问就证明 AI 让业务增长。”

浏览器隐私设置、跳转、应用内浏览器、复制粘贴、Referrer-Policy 和广告拦截都可能移除这些信号。UTM 与 Referer 是**正向证据**，缺少它们只是“来源不可观察”，不是反向证据。

## 隐私与安全

- UTM 中不要放邮箱、姓名、订单号等个人信息。
- 只保留完成归因所需的字段，设置明确的日志保留期限。
- 完整 Referer 可能包含路径和查询参数；默认优先保存主机名，必要时再短期保存原值。
- 按你所在地区的隐私法规、Cookie 同意机制和隐私政策执行。
- 不要把来源字段直接当作授权条件，也不要用它处理账号安全决策。

## 交给你的 AI 助手实施

请在当前网站项目中接入 AI 引荐访问归因。先阅读 https://madeinred.com/monitor.md，然后检查项目已有的分析工具和数据收集方式。
1. 记录实际到达的 utm_source、utm_medium、utm_campaign；没有 UTM 时，尝试读取 HTTP Referer。处理空值和 URL 解析失败，只接受 http/https，并按已知 AI 来源域名白名单归一化。
2. UTM 和 Referer 分别保留观测依据；发生冲突时保留冲突，不把请求头或参数当作身份认证。
3. 关联落地页、会话与已有的注册、咨询或购买事件。遵守项目现有同意机制，不记录邮箱、姓名或 URL 中的敏感参数，优先只保留 Referer 主机名。
4. 用 utm_campaign=ai-referral-test 验证接收和转化链路，把测试数据单独标记并从正式报表排除。测试不能当成真实 AI 引荐。
5. 给出实际修改、验证结果和查看数据的位置。没有来源信号时记录 unknown，不推断为没有 AI 访问；不要声称已覆盖全部 AI 流量。

## 和 MadeInRed 的关系

先用 [被 AI 引用体检](https://madeinred.com/) 检查网站是否能被 AI 抓取和引用，再用本教程在你自己的分析或日志系统中验证“可观察到的 AI 引荐访问”。体检回答“能不能被看见和引用”，本教程回答“点击发生后，我能看到哪些访问信号”。

原始 Markdown 地址：https://madeinred.com/monitor.md
