AI PLAY玩法更新持续收录
← 回到更新流

2026-10-14 · 原文发布日

每周邮件追踪自家域名被 AI 引用情况

每周一上午读取 TriRank 缓存的域名 AI 引用测量数据(只读不触发新检测),与上次结果比对:有引用、零引用、数据缺失或过期分别作为不同状态处理,只在有变化或首次基线时用 SMTP 发纯文本邮件提醒,平稳周不打扰。使用前需先在 TriRank 网站跑免费审计建立基线。

原文要点

原模板只在每周一09:00按n8n工作流时区读取TriRank已缓存的域名AI引用测量,明确是只读请求、不触发新AI探测;HTTP错误与限流单列成不可用数据。它用n8n workflow static data保存上次读数做比对,把实测有引用、实测零引用、部分覆盖、无新鲜测量分成不同状态;读数不变不发邮件,首次运行可选发基线。匿名每IP每天60次读取,可选x-api-key提高额度;static data只在激活的计划运行中持久,手动测试不持久。

这次做成什么

照着搭一条“安静型”监测:每周固定时间只读取自家域名在TriRank的缓存引用数,和上周比,只在首次基线或状态变化时发一封纯文本邮件;平稳周零打扰。练习用本站虚构域名与合成读数,不碰真实生产邮箱。

准备什么

  • 一个可访问外网的n8n实例,并能使用计划触发与SMTP发送节点
  • 一个隔离测试邮箱的SMTP凭据,不要用生产告警邮箱硬测
  • 已在TriRank对练习域名完成免费审计并本人通过人机验证以建立基线
  • 可选:TriRank API key,仅以Header Auth凭据保存,不写进工作流JSON

具体怎么做

  1. 先建基线再谈比对

    在TriRank审计页对练习域名跑一次免费审计,本人完成人机验证;确认该域名已有可读缓存测量后再进n8n。没基线时工作流只能报无新鲜测量,不是实测零引用。

  2. 搭只读链路

    计划触发设为周一09:00并核对工作流时区;配置节点放domain与notifyOnFirstRun;HTTP请求用GET访问TriRank signals接口,方法保持只读,如需提额把x-api-key放进Header Auth凭据;把HTTP错误、限流与空数据都归入不可用,不要当成零引用。

  3. 用static data做状态机

    在Code节点读取上次快照,计算当前状态:实测有引用、实测零引用、部分覆盖、无新鲜测量或不可用;与上次状态和上次数值比较,首次且notifyOnFirstRun为真才生成基线邮件,状态或数值变化才生成变更邮件,完全一致则把message置空。

  4. 有消息才发并激活

    用IF判断message非空才进入SMTP Send Email,正文用纯文本;填From与To为隔离邮箱。先手动跑一次看日志,再激活;记住手动测试不写static data,激活后的计划运行才会持久比对基线。

可直接复制的材料

状态判定与邮件模板配置

本站独立示例配置;domain、邮箱、状态文案需替换,接口字段名要以实际signals响应为准。

{
  "domain": "example-practice.cn",
  "notifyOnFirstRun": true,
  "timezoneNote": "使用n8n工作流时区,周一09:00触发",
  "states": ["MEASURED_CITATIONS", "MEASURED_ZERO", "PARTIAL_COVERAGE", "NO_FRESH_MEASUREMENT", "UNAVAILABLE"],
  "emailSubject": "[AI引用周报] example-practice.cn 状态变化",
  "emailBody": "域名:example-practice.cn\n本次状态:MEASURED_CITATIONS\n引用计数:3\n上次状态:MEASURED_ZERO\n结论:出现新增AI引用,请检查品牌词与来源页。"
}

n8n Code比对逻辑

本站编写的示意逻辑;res.ok、citations、fresh、partial是占位字段,必须按真实signals响应改名后再用。

const staticData = this.getWorkflowStaticData('global');
const cfg = $('Configure domain').first().json;
const res = $input.first().json;
let status = 'UNAVAILABLE';
let count = null;
if (res && res.ok === true && typeof res.citations === 'number' && res.fresh === true) {
  count = res.citations;
  status = count > 0 ? 'MEASURED_CITATIONS' : 'MEASURED_ZERO';
} else if (res && res.ok === true && res.partial === true) {
  status = 'PARTIAL_COVERAGE';
} else if (res && res.ok === true) {
  status = 'NO_FRESH_MEASUREMENT';
}
const prev = staticData.snapshot || null;
const first = !prev;
const changed = !prev || prev.status !== status || prev.count !== count;
let message = '';
if ((first && cfg.notifyOnFirstRun) || (!first && changed)) {
  message = `域名:${cfg.domain}\n本次状态:${status}\n引用计数:${count}\n上次状态:${prev ? prev.status : '无'}\n说明:仅读取缓存测量,未触发新检测。`;
}
staticData.snapshot = { status, count, at: new Date().toISOString() };
return [{ json: { domain: cfg.domain, status, count, changed, message } }];

合成signals响应样例

本站虚构练习数据,只用于跑通状态机,不代表TriRank真实返回结构。

{
  "ok": true,
  "domain": "example-practice.cn",
  "citations": 3,
  "fresh": true,
  "partial": false,
  "measuredAt": "2026-10-12T09:00:00Z"
}

输入与输出示例

本站虚构演示,未调用真实接口,数字与字段仅对应上文合成输入。

输入

练习域名example-practice.cn,上周快照为MEASURED_ZERO且count为0,本周合成signals返回ok为true、citations为3、fresh为true、partial为false。

对应输出

判定状态MEASURED_CITATIONS,changed为true,生成邮件:主题[AI引用周报] example-practice.cn 状态变化;正文含本次状态MEASURED_CITATIONS、引用计数3、上次状态MEASURED_ZERO,并注明仅读取缓存测量未触发新检测。

做完检查这些

  • HTTP请求方法为GET且只读,失败与限流进入UNAVAILABLE而不是被当成零引用
  • 四类测量状态与不可用能分别落到不同分支,邮件正文能看出状态名与计数
  • 读数与状态完全不变时message为空,SMTP节点被IF拦住不发信
  • 激活后的计划运行能把快照写入static data,下周能基于该快照判断变化

容易卡住的地方

  • 手动测试执行不持久static data,会反复像首次运行,需激活后等计划周期验证
  • 把无新鲜测量误当实测零引用会制造假告警,两类必须分开命名
  • 时区没核对会让周一09:00落到别的日期,先看工作流时区再排错
  • 匿名读取约每IP每天60次,频繁手动重跑容易触发限流并显示不可用
  • 旧审计会过期且本流程不刷新,长期报无新鲜测量时应回TriRank重跑审计

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Monitor AI citation changes for your domain with TriRank and SMTP email
原作者
TriRank
原始发布日期
2026-10-14T08:10:09.673Z
来源
https://n8n.io/workflows/20942