2026-09-02 · 原文发布日
批量产SEO选题,人工审核后自动写成长文
面向代运营的内容流水线:客户行变更或每月触发时,GPT-4o根据客户关键词、首页内容、竞品链接生成一批选题,再审一遍标准化后写入'Content Topics'表等人审;每天把QC标为Good的选题逐条取出,用Claude生成1500词以上的HTML文章,交给Google Apps Script转成Google Docs并把链接回写表格。选题-审核-成稿的分工清晰。
原文要点
Incrementors发布的免费n8n模板(workflows/19047):Google Sheets里客户行变更或每月定时触发,从「Client Details」表逐客户取关键词、首页内容、竞品链接和项目指令,用OpenAI GPT-4o先生成一批博客选题,再用GPT-4o复审、重写、标准化后解析成结构化数组,逐行写入「Content Topics」表并带Client ID等人审;每天定时取出QC=Good且还没有Content URL的行,逐条加载客户资料后用Anthropic Claude 4 Sonnet生成1500词以上纯HTML SEO文章,把HTML和提取的H1标题POST给一个Google Apps Script web应用创建Google Doc,再把返回的文档URL回写到表格对应行。需自备Google Sheets、OpenAI、Anthropic凭据,替换表ID占位符,并自行部署接收filename和html的Apps Script端点。
这次做成什么
搭一条「选题生成→人工QC→成稿→回写链接」的流水线。原页未提供可下载工作流文件,本站按描述给出手动重建方案:两条工作流(选题流+成稿流),并配齐提示词、表格字段和Apps Script示例代码。
准备什么
- n8n实例及Google Sheets、OpenAI(GPT-4o)、Anthropic(Claude)三份凭据
- 一个Google表格,含Client Details和Content Topics两个工作表
- 能部署Google Apps Script并发布为web应用的Google账号
- OpenAI与Anthropic账户需有余额,调用按各自计费,本站不保证费用
- 用于练习的虚拟客户数据,不要用真实客户机密信息
具体怎么做
建表并填客户行
在Google表格建Client Details工作表,列至少含:Client ID、Keywords、Blog article per month、Homepage Content、Competitor URLs、Project Instruction;建Content Topics工作表,列含:Client ID、Content Topic、QC、Content URL。填入下方合成CSV的演示数据。
选题流:触发→生成→复审→写表
工作流一加Google Sheets Trigger(行变更)和Schedule Trigger(每月)两个入口,读取Client Details每行后接OpenAI节点,模型选gpt-4o,用材料中的选题提示词生成一批标题;再接第二个OpenAI节点用复审提示词标准化并输出JSON数组;接Code节点把JSON解析成数组,Split Out后逐行写入Content Topics(QC列留空)。
人工QC环节
编辑在Content Topics表把认可的选题在QC列填Good,不认可的填Bad或删除。这是流程设计的关键分工:AI只产出候选,入选由人决定。
成稿流:每日取合格选题写文
工作流二用Schedule Trigger每天跑一次,Google Sheets节点筛选QC=Good且Content URL为空的行,逐条处理:按Client ID回查Client Details,接Anthropic节点(Claude 4 Sonnet)用成稿提示词生成1500词以上纯HTML文章,Code节点用正则提取第一个H1作为标题。
Apps Script建Doc并回写
按材料代码部署Apps Script为web应用(执行身份选自己,访问权限按需),把URL填入n8n的HTTP Request节点,POST JSON含filename和html;拿到返回的文档URL后用Google Sheets Update节点写回该行Content URL列。
可直接复制的材料
选题生成提示词(GPT-4o,第一个OpenAI节点)
本站独立撰写,占位符由n8n表达式替换;原模板实际提示词需在导入后核对。
你是SEO内容策划。根据以下客户资料生成10个博客选题标题。
客户关键词:{{keywords}}
首页内容摘要:{{homepageContent}}
竞品链接:{{competitorUrls}}
项目指令:{{projectInstruction}}
要求:标题面向搜索流量,含明确目标词;避免与竞品标题雷同;每个标题一句话说清读者收益;只输出标题列表,每行一个。选题复审提示词(GPT-4o,第二个OpenAI节点)
本站独立撰写;要求只输出JSON是为了让下游Code节点可稳定解析。
下面是初稿选题列表。请执行:1) 删除重复和过泛的标题;2) 统一为「数字/疑问/方法」三种句式之一;3) 每个标题控制在30字内;4) 保留通过标准的数量。只输出JSON数组,形如["标题1","标题2"],不要输出任何其他文字。
初稿列表:
{{draftTitles}}成稿提示词(Claude 4 Sonnet)
本站独立撰写;纯HTML要求对应下游Apps Script直接转Google Doc的设计。
你是SEO撰稿人。请围绕选题「{{topic}}」为客户「{{clientId}}」写一篇不少于1500词的博客文章。
客户关键词:{{keywords}}
项目指令:{{projectInstruction}}
输出要求:只输出纯HTML,不要Markdown;结构为一个<h1>(即文章标题,单独成行便于提取)、若干<h2>小节、<p>正文和至少一个<ul>列表;首尾自然包含目标关键词;不要出现<style>和<script>标签。Apps Script web应用示例代码
本站独立编写的简化版:把HTML标签剥离成纯文本进Doc。若需保留格式,请改用Drive API的import转换,需另行开通权限。部署后把/webexec URL填进n8n。
function doPost(e) {
var body = JSON.parse(e.postData.contents);
var filename = body.filename || '未命名文章';
var html = body.html || '';
var doc = DocumentApp.create(filename);
var text = html.replace(/<h1[^>]*>(.*?)<\/h1>/gi, '\n# $1\n')
.replace(/<h2[^>]*>(.*?)<\/h2>/gi, '\n## $1\n')
.replace(/<[^>]+>/g, '')
.replace(/\n{3,}/g, '\n\n');
doc.getBody().setText(text);
doc.saveAndClose();
return ContentService
.createTextOutput(JSON.stringify({ url: doc.getUrl() }))
.setMimeType(ContentService.MimeType.JSON);
}Client Details演示数据
本站合成的虚构数据,竞品域名为占位,替换成真实数据前请确认有权抓取其首页内容。
Client ID,Keywords,Blog article per month,Homepage Content,Competitor URLs,Project Instruction
CL-001,办公室健身;久坐腰痛,4,面向上班族的线上健身课程平台,主打每天15分钟,https://example-fit-a.com;https://example-fit-b.com,语气务实接地气,避免医学承诺,标题带数字优先
CL-002,宠物鲜粮;猫咪挑食,2,手工猫鲜粮订阅电商,冷链配送,https://example-pet-a.com,强调食材透明,不使用「治疗」类词汇输入与输出示例
本站虚构演示,文档ID为示意,未实际调用OpenAI/Anthropic/Google服务。
输入
Content Topics表中一行:Client ID=CL-001,Content Topic=「7个办公桌前就能做的腰痛缓解动作」,QC=Good,Content URL为空对应输出
当日成稿流处理该行后:Claude返回约1600词HTML,首行<h1>7个办公桌前就能做的腰痛缓解动作</h1>,含5个<h2>小节;HTTP节点收到Apps Script返回{"url":"https://docs.google.com/document/d/1AbC.../edit"};表格该行Content URL被写入此链接。下一轮每日运行时该行因有URL被跳过。做完检查这些
- 选题流运行一次后,Content Topics表新增的行数与复审提示词保留的数量一致,且每行都带正确Client ID
- QC列留空或填Bad的行不会被每日成稿流取出处理
- 成稿流处理后同一行不会被重复取到(Content URL非空即跳过)
- Apps Script的doPost用curl发测试POST能返回含url字段的JSON
- OpenAI节点报错(如余额不足)时工作流有可见的错误执行记录,不是静默失败
容易卡住的地方
- GPT-4o复审输出偶尔带多余解释文字导致JSON解析失败,提示词里必须强调只输出数组,Code节点需加异常兜底
- 每月触发和行变更触发可能重复处理同一客户,建议加最近一次处理时间字段去重
- Apps Script免费配额有每日执行时限,批量成稿需逐条串行而非并发
- 原模板提示词、节点参数未随页面公开,本站提示词为独立重写,导入模板后应以模板内实际提示词为准
- Claude输出长度受模型上限影响,1500词要求可能需要分段生成再拼接
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Generate SEO blog topics and articles with Google Sheets, OpenAI, and Claude
- 原作者
- Incrementors
- 原始发布日期
- 2026-09-02T06:14:01.621Z
- 来源
- https://n8n.io/workflows/19047