2026-09-24 · 原文发布日
n8n流程:合并或删除页面前先模拟SEO流量影响
这个n8n模板通过带请求头鉴权的Webhook接收POST请求,参数包含站点、时间跨度和合并、新建、删除页面等动作。流程先从Postgres读取各页面的点击、曝光、排名等基线快照,并行模拟三种动作带来的点击变化,生成逐月预测区间与风险标记,再交给OpenAI GPT-4.1把计算结果写成管理层可读的策略叙述,最后把每次模拟记录写回Postgres备查,并返回完整JSON。需要提前建好两张Postgres表并填入页面指标数据。
原文要点
该模板由 Oneclick AI Squad 发布在 n8n 工作流库(免费模板)。流程为:带请求头鉴权的 Webhook 接收 POST(tenantId/siteId、时间跨度、merge/new/remove 动作),校验失败返回结构化 400;从 Postgres 表 seo_page_metrics 读取页面级基线快照(url、clicks、impressions、avg_position、backlinks、word_count、cluster_id、primary_keyword、internal_links_in),无快照返回 404;构建站点基线模型并并行模拟合并、新建、删除三类动作,输出逐月点击区间(expected/low/high)、评级、置信度、逐动作拆解和警告;OpenAI(LangChain LLM 链)把结果写成管理层叙述,JSON 校验失败时用确定性回退;每次运行写入 seo_simulation_runs 并以 200 JSON 响应。
这次做成什么
在本机或测试环境搭通这条"带鉴权的 SEO 影响模拟 API":建好两张 Postgres 表、填入合成页面指标、导入模板连好凭据,用 curl 发送一次合并页面请求,拿到逐月预测 JSON 和管理层叙述。建表 SQL 与测试数据为本站独立设计的练习方案,列名依据原文列出的字段,未列出的内部计算逻辑以导入模板后的实际节点为准。
准备什么
- 一个 n8n 实例及可用的 Postgres 数据库(可为本地 Docker 测试库),账号能读写两张表
- OpenAI API 密钥(或兼容凭据),原文说明使用 GPT-4.1 聊天模型,调用会产生费用
- 能向 n8n 发送 HTTP 请求的工具(curl 或 Postman)用于测试 Webhook
- 对原模板中未公开的模拟算法细节不预设,导入后以实际节点配置为准
具体怎么做
创建两张 Postgres 表
在测试库执行下方材料中的建表 SQL:seo_page_metrics 存页面级指标快照(含 tenant_id、site_id、url、clicks、impressions、avg_position、backlinks、word_count、cluster_id、primary_keyword、internal_links_in),seo_simulation_runs 存每次模拟记录。这些列名来自原文列出的预期字段。
填入合成页面指标
插入下方材料中的 4 行合成数据:同一 tenant_id 和 site_id 下的 4 个页面,覆盖两个内容集群,含相似主题页面以便模拟合并场景。确认原文要求"调用 API 前快照已按 tenantId/siteId 填充"。
导入模板并配置凭据
从 n8n 模板库导入该工作流。在 Postgres 节点添加数据库凭据,在 LLM 链节点添加 OpenAI 凭据(原文指定 GPT-4.1 聊天模型)。打开 Webhook 节点,在鉴权设置中选 Header Auth,设定一个测试用头名和值(如 X-Sim-Token: test-only-123),不要用生产密钥。
用合成请求测试成功路径
激活工作流后,用下方 curl 示例向 /seo-what-if-simulate 发 POST:带鉴权头,body 含 tenantId、siteId、horizon 和一个 merge 动作(把两个相似页面合并)。预期收到 200 JSON,包含逐月 expected/low/high 点击区间、verdict、confidence、per-action breakdown 和 warnings,以及 AI 生成的管理层叙述。
测试失败路径与审计写入
分别发送:缺少鉴权头的请求(应被拒)、body 缺字段的请求(应返回结构化 400)、换一个没有快照的 tenantId(应返回 404)。然后查询 seo_simulation_runs,确认成功的那次运行已写入完整结果。
可直接复制的材料
建表 SQL(本站独立编写)
本站依据原文列出的字段名独立编写的练习建表语句,非原模板附带文件;原模板若对列类型或额外表结构有要求,以导入后节点报错提示为准。
CREATE TABLE seo_page_metrics (
id SERIAL PRIMARY KEY,
tenant_id TEXT NOT NULL,
site_id TEXT NOT NULL,
url TEXT NOT NULL,
clicks INTEGER NOT NULL DEFAULT 0,
impressions INTEGER NOT NULL DEFAULT 0,
avg_position NUMERIC(5,2),
backlinks INTEGER NOT NULL DEFAULT 0,
word_count INTEGER NOT NULL DEFAULT 0,
cluster_id TEXT,
primary_keyword TEXT,
internal_links_in INTEGER NOT NULL DEFAULT 0,
snapshot_date DATE NOT NULL DEFAULT CURRENT_DATE
);
CREATE TABLE seo_simulation_runs (
id SERIAL PRIMARY KEY,
tenant_id TEXT NOT NULL,
site_id TEXT NOT NULL,
request_json JSONB NOT NULL,
result_json JSONB NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);合成页面指标数据(4 行)
本站虚构合成数据,仅用于测试库;两个 cluster-crm 页面主题相近,适合用来测合并场景。
INSERT INTO seo_page_metrics
(tenant_id, site_id, url, clicks, impressions, avg_position, backlinks, word_count, cluster_id, primary_keyword, internal_links_in) VALUES
('tenant-demo', 'site-main', 'https://demo.example.com/crm-guide', 420, 9800, 6.2, 35, 2400, 'cluster-crm', 'crm 选型指南', 12),
('tenant-demo', 'site-main', 'https://demo.example.com/crm-compare', 260, 7200, 7.8, 18, 1800, 'cluster-crm', 'crm 对比', 8),
('tenant-demo', 'site-main', 'https://demo.example.com/lead-tips', 150, 4100, 9.5, 6, 1200, 'cluster-leads', '线索管理技巧', 5),
('tenant-demo', 'site-main', 'https://demo.example.com/pricing', 90, 2600, 12.1, 4, 900, 'cluster-commercial', 'crm 价格', 3);测试调用 curl 示例
本站编写的调用示例;X-Sim-Token 为隔离测试凭据,请替换为你在 Webhook 节点实际配置的头名和值;body 字段名以原模板校验节点的实际规则为准。
curl -X POST "https://你的n8n域名/webhook/seo-what-if-simulate" \
-H "Content-Type: application/json" \
-H "X-Sim-Token: test-only-123" \
-d '{
"tenantId": "tenant-demo",
"siteId": "site-main",
"horizon": 6,
"actions": [
{"type": "merge", "sourceUrls": ["https://demo.example.com/crm-guide", "https://demo.example.com/crm-compare"], "targetUrl": "https://demo.example.com/crm-guide"}
]
}'输入与输出示例
本站虚构演示输出,未实际运行工作流;具体数值由模板内部算法和 GPT-4.1 决定,此处仅为结构示意,不保证实际结果相同。
输入
POST /seo-what-if-simulate,头 X-Sim-Token: test-only-123,body 为 tenant-demo/site-main、horizon 6、一个 merge 动作:把 crm-compare 合并进 crm-guide对应输出
{"verdict": "proceed_with_caution", "confidence": "medium", "forecast": [{"month": 1, "expected": 905, "low": 830, "high": 990}, {"month": 2, "expected": 918, "low": 835, "high": 1010}], "actions": [{"type": "merge", "deltaClicksPerMonth": -12, "riskFlags": ["cluster_keyword_overlap"]}], "warnings": ["合并后预计每月损失约 12 次点击,主要来自长尾词排名重叠"], "narrative": "合并两个 CRM 主题页面后,站点月点击预计从 920 小幅下降至约 905,第二个月起随权重集中回升至 918。建议保留 crm-guide 为主页面并对 crm-compare 做 301 跳转,同时观察四周排名变化。"}做完检查这些
- 缺鉴权头的请求被拒绝,带错误头值的请求同样不进入模拟逻辑
- body 缺少 tenantId 或 actions 时返回 400 且响应为结构化错误说明
- 用无快照的 tenantId 调用返回 404 而不是 500 或空结果
- 成功调用后 seo_simulation_runs 新增一行,request_json 与 result_json 完整可追溯
- 响应 200 JSON 中 forecast 为逐月数组,每月含 expected、low、high 三个数且 low ≤ expected ≤ high
容易卡住的地方
- 原文只列出预期列名,未公开表结构 DDL 和模拟算法细节,列类型不匹配时 Postgres 节点会报错,需按报错逐项调整
- 原文明确使用 GPT-4.1,若你的凭据无权访问该模型,LLM 链节点会失败,可在节点内换成你有权限的兼容模型但叙述质量可能变化
- 基线快照为空时整个流程按 404 终止,务必先插入数据再调 API
- LLM 输出偶发不合规 JSON,原文说明有确定性回退,但若频繁回退应检查提示词与模型参数
- horizon 越大计算量越大,原文未给性能边界,不要假设任意长时间跨度都能快速返回
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Predict SEO traffic impact scenarios with Postgres and OpenAI GPT-4.1
- 原作者
- Oneclick AI Squad
- 原始发布日期
- 2026-09-24T04:20:55.632Z
- 来源
- https://n8n.io/workflows/19872