2026-09-28 · 原文发布日
n8n模板:用Claude对比竞品找出SEO实体缺口
这个n8n工作流按周运行或通过webhook提交主题,抓取你自己页面和竞品页面的可见文本,分别交给Claude提取带重要度评级的相关实体JSON列表。系统汇总竞品实体形成共识表,计算你的页面缺失或覆盖偏弱的实体,再让Claude把缺口排成优先级建议和主题聚类;缺口数量超过阈值时发WhatsApp提醒,全部主题处理完后发送运行摘要,webhook触发时摘要同时作为响应返回。需在配置中设置URL与主题上限、爬取间隔、阈值及Claude模型名。
原文要点
该n8n工作流可通过每周定时、手动运行或POST webhook触发;webhook负载含topic、yourUrls、competitorUrls。它抓取自己页面与竞品页面的可见文本,分批调用Anthropic Claude(/v1/messages)提取带重要度评级的实体JSON,汇总竞品共识表,计算缺失或覆盖偏弱的实体,再让Claude输出排序建议与主题聚类。缺口数超阈值时发WhatsApp提醒,全部主题处理完后发WhatsApp摘要,webhook触发时摘要同时作为响应返回。配置项包括URL/主题上限、竞品提及阈值、显著性阈值、爬取间隔、User-Agent与Claude模型名。需要Anthropic HTTP Header Auth、WhatsApp Business Cloud凭据和一个外部主题数据库端点。
这次做成什么
在n8n中搭一个单主题的最小可用练习:手动输入自己页面与两个竞品页面URL,抓取文本后用Claude提取实体并计算缺口,把结果写入本地表格而非WhatsApp,从而在未配置WhatsApp和外部数据库前验证实体提取与缺口比对逻辑。此练习为本站设计的简化版,原模板的分支、阈值与WhatsApp节点需在原模板中核对。
准备什么
- 一个自托管或云端n8n实例,可访问外网抓取网页
- Anthropic API Key,并在n8n新建HTTP Header Auth凭据(头名x-api-key)
- 两个可公开访问的竞品页面URL和一个自己的页面URL
- 一个用于存放结果的Google Sheet或n8n本地数据表
具体怎么做
建手动触发与配置节点
新建工作流,添加Manual Trigger,接一个Set节点,字段:topic(字符串)、yourUrl(字符串)、competitorUrl1、competitorUrl2。这里替代原模板的webhook/定时/数据库队列,练习只跑一个主题。
抓取三个页面
添加HTTP Request节点,URL用表达式引用yourUrl,Method GET,Response Format选Text,Headers里加User-Agent如 Mozilla/5.0 (practice-bot)。复制该节点两次分别抓competitorUrl1与competitorUrl2,在竞品节点前加一个Wait节点设5秒,模拟原模板的爬取间隔。
提取纯文本
每个HTTP节点后接HTML节点(Extract Html Content),Operation选Extract Text,去掉脚本与标签,得到visibleText字段。若你的n8n版本无此操作,可用Code节点用正则去掉标签,但结果会粗糙。
调Claude提取实体
添加HTTP Request节点,POST https://api.anthropic.com/v1/messages,凭据选Anthropic的HTTP Header Auth,另加头anthropic-version: 2023-06-01。Body为JSON,model填你在配置中设定的模型名,messages里的user内容用下方提示词并拼接visibleText。对自己页面与两个竞品各调一次,共三次。
汇总并计算缺口
接一个Code节点:解析三次返回JSON中的实体数组,把两个竞品的实体合并成共识表(同一实体在两个竞品都出现记mentions=2),再与自己页面实体按名称比对,输出missing(自己完全没有)和weak(自己重要度低于竞品均值)两个数组。
Claude排序建议并落表
把missing与weak数组再次发给Claude,用第二个提示词要求返回排序建议和主题聚类JSON;最后接Google Sheets节点把topic、缺口数、建议JSON追加为一行。原模板在缺口数超阈值时走WhatsApp分支,本练习省略该分支,如需阈值判断可加一个IF节点比较缺口数与你设的阈值。
可直接复制的材料
实体提取提示词(发给Claude的user消息)
本站独立编写,prominence评分口径为本站设定,请在原模板中核对其评级字段定义。
你是SEO实体分析助手。下面是网页可见文本。请提取与主题高度相关的命名实体(人物、品牌、产品、概念、技术、地点等),只输出JSON数组,不要任何解释文字。每个元素格式:{"entity":"实体名","type":"类型","prominence":1到10的整数,表示该实体在页面中的覆盖显著度}。最多返回25个实体。网页文本:
{{ $json.visibleText }}缺口排序提示词
本站独立编写,用于替代原模板第二次Claude调用,字段结构为本站设定。
你是SEO内容策略师。以下是竞品共识实体中我方页面缺失或覆盖偏弱的实体列表(JSON)。请输出JSON对象:{"recommendations":[{"entity":"","reason":"为什么该实体对主题重要","priority":"high|medium|low","suggestion":"如何在页面中补强"}],"clusters":[{"cluster":"主题聚类名","entities":[]}]}。按对搜索相关性的影响排序,只输出JSON。输入:
{{ $json.gaps }}测试用页面文本(合成)
合成文本,供无法抓真实网页时直接粘进Code节点调试比对逻辑。
自家页面:我们的面包店提供酸面包、可颂和肉桂卷,使用天然酵母,每天早上六点出炉。
竞品A页面:本店主打酸面包与天然酵母发酵工艺,提供无麸质面包、全麦吐司,并开设烘焙课程。
竞品B页面:酸面包专门店,采用天然酵母和石窑烘烤,销售无麸质面包、冷冻面团,附烘焙课程与面包订阅服务。输入与输出示例
本站虚构演示,数字为演示值,未实际调用Claude。
输入
topic="家用酸面包"; yourUrl文本=上方自家页面;competitorUrl1/2文本=上方竞品A/B页面对应输出
missing=["无麸质面包","烘焙课程","石窑烘烤","冷冻面团","面包订阅服务","全麦吐司"]; weak=[{"entity":"天然酵母","myProminence":6,"competitorAvg":8}]; recommendations首条={"entity":"无麸质面包","priority":"high","suggestion":"在产品页新增无麸质品类段落"}做完检查这些
- 三次Claude调用都返回可解析的JSON数组,且每个元素含entity、type、prominence三个字段
- Code节点输出的missing数组只包含自家页面文本中确实未出现的实体名
- weak数组中每个实体的myProminence小于竞品平均prominence
- Google Sheets中新增一行,缺口数与missing加weak的总长度一致
容易卡住的地方
- Anthropic接口必须带anthropic-version头,否则请求会被拒绝
- Claude偶尔会在JSON外包裹解释文字,Code节点需先截取第一个[到最后一个]再解析,否则会抛错
- 抓取的页面若是JS渲染的SPA,HTML文本提取会得到空内容,练习时请选静态页面
- 原模板要求WhatsApp Business Cloud凭据与外部主题数据库端点,本练习未覆盖这两处,上线前需在原模板中配置并核对阈值字段
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Identify SEO entity gaps between your site and competitors with Claude and WhatsApp
- 原作者
- Oneclick AI Squad
- 原始发布日期
- 2026-09-28T06:10:13.710Z
- 来源
- https://n8n.io/workflows/20006