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

2026-09-13 · 原文发布日

每周找回丢失外链并起草挽回话术

面向SEO的n8n流程:每周一经DataForSEO拉取近期标记为lost的外链,按来源域名去重并用n8n数据表排除已处理项,再对每个丢失链接实时请求目标页,把丢失归类为页面消失、跳转、链接被移除等情形;只对“双方页面都正常但链接被删”的情况用OpenAI写一句话外联角度,汇总发Slack、明细入Google Sheets。

原文要点

Daniel Shashko在n8n发布的免费模板(19531):每周一触发,调用DataForSEO Backlinks API取status为lost的外链,按来源域名去重,用rank与spam阈值过滤,并排除已写入n8n数据表lost_link_watch(列link_id、bucket、seen_on)的记录。对剩余链接实时HTTP请求目标页,把丢失分为:我方页面消失、我方跳转、链接被移除、对方页面消失、未检查五类。仅对“双方页面正常但链接被删”用OpenAI生成一句话外联角度。结果汇总发Slack,明细追加到Google Sheets,已处理项upsert回数据表;无新数据或API失败发Slack提示,工作流报错发另一告警频道。模板免费,但DataForSEO与OpenAI为付费服务。

这次做成什么

在本站不导入原模板的前提下,照着搭建一条等效的每周外链丢失巡检练习流:先用合成CSV模拟DataForSEO返回,在n8n里用Schedule Trigger+Code节点完成去重、排除已处理和分桶,再用OpenAI节点只对removed桶写外联角度,最后输出到本地测试表。通过练习后,再对照原模板把数据源换成真实API。

准备什么

  • 一个可用的n8n实例(云端或自托管),能新建工作流和数据表
  • DataForSEO账号且开通Backlinks API(正式使用时需要,练习阶段用合成数据代替)
  • OpenAI API凭据,且所选chat模型在账号内可用
  • Google Sheets与Slack凭据(练习阶段可先用n8n数据表和邮件节点替代)
  • 一个自己有权抓取的测试域名与目标URL

具体怎么做

  1. 建立排除表与配置项

    在n8n中新建数据表lost_link_watch,建三个文本列:link_id、bucket、seen_on,手工插入两条历史记录用于验证排除逻辑。工作流开头放一个Schedule Trigger节点,设为每周一上午触发(对应原模板的每周一运行)。然后加一个Edit Fields节点,设置domain=example.com、lost_since_days=7、min_rank=10、max_spam_score=30、digest_channel=#seo-digest,后续节点统一引用这些字段,避免硬编码散落各处。

  2. 用合成数据跑通去重与过滤

    练习阶段不放真实API调用:加一个Code节点,把下方artifact中的合成CSV解析成对象数组,先按referring_domain分组,每组保留rank最高的一条;再过滤rank>=min_rank且spam_score<=max_spam_score;然后读取lost_link_watch中已有link_id,剔除重复项。正式使用时,把这一步替换为HTTP Request节点:方法POST,认证选HTTP Basic(填入DataForSEO登录名与密码的凭据),按DataForSEO文档请求lost状态且时间在窗口内的外链,字段映射保持link_id、referring_domain、rank、spam_score、target_url一致。

  3. 实时检查并分桶

    对剩下的每条记录加HTTP Request节点请求target_url,设置Continue On Fail。在后续Code节点按规则分桶:响应404或410记为their_page_gone;发生301/302且落点不同记为your_redirect;响应200但页面HTML中不再含指向你域名的链接记为removed;无法判定记为unchecked。我方页面本身打不开时记为your_page_gone。把bucket写回每条记录。

  4. 只对removed桶生成外联角度

    加IF节点只放行bucket=removed的项,接OpenAI Chat节点,把下方提示词作为system,user里传入来源域名、来源页面标题和你的目标URL,要求输出一句话中文外联角度。其余桶跳过此节点,节省费用。

  5. 汇总输出与登记

    用Aggregate节点统计各bucket数量,拼接成Slack摘要消息(练习阶段可用Send Email节点发到自己的测试邮箱);明细行追加到Google Sheets的Lost links标签页(练习阶段写入另一张n8n数据表);最后把每条已处理记录upsert进lost_link_watch,防止下周重复报告。加一个Error Trigger指向的工作流,出错时向#alerts频道发告警。

可直接复制的材料

合成测试数据 lost_backlinks.csv

本站独立编写的合成练习数据,全部域名为虚构。预期:L002被同域去重淘汰(L001 rank更高),L004因spam_score>30被过滤,剩余L001、L003、L005进入分桶。

link_id,referring_domain,rank,spam_score,source_url,target_url,first_seen_lost
L001,blog-a.com,42,5,https://blog-a.com/posts/tools-roundup,https://example.com/guide,2026-09-07
L002,blog-a.com,18,12,https://blog-a.com/posts/old-page,https://example.com/guide,2026-09-08
L003,news-b.net,55,8,https://news-b.net/article/ai-seo,https://example.com/report,2026-09-09
L004,spammy-c.xyz,3,78,https://spammy-c.xyz/x,https://example.com/guide,2026-09-10
L005,dir-d.org,30,20,https://dir-d.org/list/99,https://example.com/pricing,2026-09-11

OpenAI外联角度提示词

本站独立编写的提示词,{{$json...}}为n8n表达式占位,需按你的实际字段名调整;模型与参数请在你自己的OpenAI节点中设置。

你是SEO外链挽回助手。一条指向我方页面的外链最近被移除了,但对方页面和我方页面目前都能正常访问。请根据下面的信息,用中文写一句话外联角度,说明为什么值得恢复这条链接(例如内容仍被其读者需要、我方页面已更新数据),语气礼貌、具体、不超过60字。只输出这一句话,不要称呼和落款。
来源域名:{{$json.referring_domain}}
来源页面:{{$json.source_url}}
我方目标页:{{$json.target_url}}

分桶判断逻辑参考(Code节点JavaScript)

本站按原文描述的五类分桶独立编写的示意逻辑;bodyContainsLink需要在HTTP节点后再加一步解析HTML判断是否含指向你域名的<a>标签,原文未给出具体实现,此为本站方案。

// 输入:HTTP检查后的每条记录,含 statusCode、finalUrl、bodyContainsLink 字段
for (const item of $input.all()) {
  const r = item.json;
  if (r.statusCode === 404 || r.statusCode === 410) r.bucket = 'their_page_gone';
  else if (r.statusCode >= 300 && r.statusCode < 400 && r.finalUrl !== r.target_url) r.bucket = 'your_redirect';
  else if (r.statusCode === 200 && r.bodyContainsLink === false) r.bucket = 'removed';
  else if (r.statusCode === 200) r.bucket = 'unchecked';
  else r.bucket = 'unchecked';
}
return $input.all();

输入与输出示例

本站虚构演示,输入输出由本站设定,非原作者运行结果,未实际调用任何API。

输入

使用上方合成CSV,配置domain=example.com、lost_since_days=7、min_rank=10、max_spam_score=30,数据表lost_link_watch中预置一条已处理记录link_id=L003。

对应输出

去重过滤后剩L001与L005(L002同域低rank淘汰,L004垃圾分超标,L003已在观察表)。假设实时检查结果:L001对方页面200但已无指向example.com的链接→bucket=removed,OpenAI输出“这篇工具盘点仍在为读者推荐选型,我方指南本月刚更新了三款新工具实测数据,补上链接能让盘点保持最新”;L005对方页面404→their_page_gone,不生成话术。Slack摘要:本周新丢失2条,removed 1条、their_page_gone 1条,已附外联角度。

做完检查这些

  • 同一referring_domain出现多条lost记录时,只保留rank最高的一条进入后续流程
  • spam_score超过max_spam_score或rank低于min_rank的记录被过滤且不写入任何输出
  • lost_link_watch中已存在的link_id不会再次出现在摘要或明细里
  • 只有bucket=removed的记录触发OpenAI节点,其他桶不产生模型调用
  • 处理完成后每条记录的link_id、bucket、seen_on都写回数据表,重复运行本周数据时摘要为“无新增”

容易卡住的地方

  • DataForSEO和OpenAI都是按用量付费的服务,模板本身免费不等于运行免费
  • bodyContainsLink判断依赖对方页面HTML结构,JS渲染的页面用普通HTTP请求可能误判,原文未说明处理方式
  • n8n数据表的列名必须与代码中的link_id、bucket、seen_on完全一致,否则upsert静默失败或建出新列
  • HTTP节点不开Continue On Fail时,一条目标页超时就会中断整个循环
  • 练习用的合成CSV与真实DataForSEO响应字段不同,切换正式数据源时必须重做字段映射

原文与作者资料 ↗

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

原文标题
Recover lost backlinks with DataForSEO, OpenAI, Google Sheets, and Slack
原作者
Daniel Shashko
原始发布日期
2026-09-13T10:35:50.714Z
来源
https://n8n.io/workflows/19531