当前位置: 首页 > news >正文

我用 n8n + SerpBase 搭了一套自动 SEO 监控系统,每月成本不到 40 块

之前我每个月花 800 多块订阅一个 SEO 排名监控工具。功能确实全,每天早上发邮件告诉我 30 个关键词排第几。但说实话,我根本用不了那么多功能——我要的其实就是一个定时任务 + 一个数据库 + 一个告警,结果被包装成了 SaaS 按月收我钱。

上个月我把这套东西拆了,自己用 n8n + SerpBase 重搭了一套。现在监控 150 个关键词,每天自动跑,数据存在我自己的 Postgres 里,成本从 800 块降到 40 块不到。这篇帖子把完整方案放出来,给想省钱的独立开发者参考。

先说说之前为什么觉得亏

Ahrefs、SEMrush 这些工具对 agency 来说确实值那个价。但独立开发者或者小 SaaS 创始人,很多时候是在为 90% 用不到的功能买单。

我的需求其实很简单:

  1. 每天查 150 个关键词在 3 个国家的排名
  2. 排名掉 3 位以上,或者竞品冲进前十,通知我
  3. 数据能存下来,方便我查历史

就这三点。之前那个工具月费 119 美金(折合人民币 850+),套餐是 500 个关键词起步。我只用了 150 个,剩下的额度纯浪费。

新架构:n8n + SerpBase + Postgres

  • n8n:跑在一台 Hetzner VPS 上(1核 2G,月付 5.35 美金,约 38 块人民币),负责定时触发、逻辑判断、发通知。
  • SerpBase:提供 Google 搜索结果。我用的是 Starter Boost(3 美金买 1 万次搜索),另外充了 10 美金的 Starter Pack(2 万次,永不过期)。
  • Postgres:存关键词配置和每天的排名快照,和 n8n 跑在同一台机器的 Docker 里。

每月固定成本就是 38 块的服务器费。搜索是按量消耗的,150 个词 × 30 天 = 4500 次查询。3 美金的 Starter Boost 够跑两个月,常规价 $0.50/千次的话也就 15 块一个月。

工作流怎么搭的(可直接抄)

第一步:关键词库

建了一张简单表:

CREATETABLEkeywords(idSERIALPRIMARYKEY,keywordTEXTNOTNULL,countryTEXTDEFAULT'us',languageTEXTDEFAULT'en',target_urlTEXT,alert_thresholdINTDEFAULT3);

塞了 150 个词。target_url是我要追踪的页面(比如定价页),alert_threshold是排名下降多少位才告警。

第二步:n8n 工作流

每天早 6 点(UTC)触发,节点链如下:

1. Schedule Trigger
Cron 表达式:0 6 * * *

2. Postgres 节点
查所有关键词:SELECT * FROM keywords

3. Split In Batches
每批处理 10 个词。别问我怎么知道的——我第一次直接并发 150 个 HTTP 请求,SerpBase 返回 1029(rate limit),直接限流了。分批是必须的。

4. HTTP Request 节点(调 SerpBase)

注意,SerpBase 的搜索接口是POST,不是 GET。配置如下:

  • Method: POST
  • URL:https://api.serpbase.dev/google/search
  • Headers:
    • Content-Type:application/json
    • X-API-Key:{{ $env.SERPBASE_API_KEY }}
  • Body(JSON):
{"q":"{{ $json.keyword }}","gl":"{{ $json.country }}","hl":"{{ $json.language }}","page":1}

平均延迟 1.4 秒。我设了 10 秒超时,失败自动重试 2 次。

重要:SerpBase 即使出错也可能返回 HTTP 200,必须在 JSON 里检查status字段。0是成功,1020是余额不足,1029是触发限流,1504是上游超时。

5. IF 节点(校验响应)

判断{{ $json.status }} === 0,不是就记录错误跳过。我早期有个 bug,请求体写错了但 HTTP 状态是 200,我没检查status,结果白白烧了好几块钱额度才发现。

6. Code 节点(提取排名)

constorganic=$input.first().json.organic||[];consttarget=$input.first().json.target_url;constmatch=organic.find(r=>r.link&&r.link.includes(target));constposition=match?match.rank:0;constpageTitle=organic[0]?.title||'无结果';return[{json:{position,page_title:pageTitle}}];

注意 SerpBase 返回的字段名:rank(不是position),link(不是url)。我第一次搭的时候写错了字段名,所有排名都返回 0,排查了半天。

如果前 100 条里没有我的页面,position 记为 0。

7. Postgres 节点(存快照)

INSERTINTOrankings(keyword_id,position,checked_at)VALUES({{ $json.id }},{{ $json.position }},NOW());

8. Postgres 节点(对比昨天)

SELECTpositionFROMrankingsWHEREkeyword_id={{ $json.id }}ORDERBYchecked_atDESCLIMIT1OFFSET1;

9. IF 节点(判断要不要告警)

排名跌幅 >= threshold,或者竞品 URL(单独一张表维护)冲进前十,就走告警分支。

10. Telegram 节点

给我发消息:

“ALERT:‘affordable serp api’ 在美国从第 4 掉到第 8,竞品 serpapi.com 现在排第 3。”

11. Merge

批次合并,流程结束。没异常就静默执行,我不会被打扰。

第三步:看数据

我没搭可视化面板。直接用 psql 查,或者丢进 Metabase(本来就在跑)。比如查最近 7 天趋势:

SELECTkeyword,position,checked_atFROMrankings rJOINkeywords kONr.keyword_id=k.idWHEREchecked_at>=NOW()-INTERVAL'7 days'ORDERBYkeyword,checked_at;

需要图表就导出 CSV 贴 Google Sheets,30 秒搞定,零成本。

实际花了我多少钱

第一个月(搭环境 + 大量测试):

  • VPS:38 块
  • SerpBase Starter Boost:22 块(3 美金)
  • SerpBase Starter Pack:73 块(10 美金,永不过期)
  • 合计:133 块

第二个月(稳定期,4500 次查询):

  • VPS:38 块
  • SerpBase:0(用上月余额)
  • 合计:38 块

第三个月(新上了落地页,扩到 220 个词):

  • VPS:38 块
  • SerpBase:22 块(又买了 Starter Boost)
  • 合计:60 块

三个月平均每月 77 块。之前的工具一个月 850+。一年下来差将近一万块。对 Bootstrap 的独立开发者来说,这是一笔不小的现金流。

为什么 SerpBase 适合搭这种系统

我试了三个 SERP API,最后锁死 SerpBase,几个原因:

价格没有套路。有些 API 表面单价低,实则最低充值 50 美金,或者强制月付。SerpBase 3 美金就能买额度,而且常规 Pack 永不过期,不用怕月底清零。

地理定位准。我追踪美、英、澳三个市场。POST body 里设gl=usgl=gb,返回的结果很稳定,不会串区。之前用另一家,英国结果时不时混入美国条目,数据直接废掉。

JSON 结构干净。organic数组里每条结果都有ranktitlelinkdisplay_linksnippet,不用写正则扒 HTML,也不用维护 headless browser。n8n 里四行 JS 就能定位到我的页面排第几。

抗封能力强。四个月来没有一次因为 CAPTCHA 或反爬导致请求失败。SerpBase 自己管会话轮换。我以前自己搭代理池抓 Google,一个月代理费 300 块还要天天修。砍掉这部分比取消 rank tracker 还爽。

状态码清晰。返回 JSON 里的status字段告诉你具体发生了什么:0成功,1020余额不足,1029限流,1502上游解析出错,1504上游超时。这比只看 HTTP 状态码有用多了。

这套方案的缺点(必须诚实说)

自己搭的,自己修。某天早上某个词返回 position 0,我得自己排查。通常是 SerpBase 超时(status 1504),或者我 target_url 填错了。没有工单系统可以提,只能看 n8n 执行日志、检查 JSON、改数据、重跑节点。

功能不如企业工具全。Featured snippet 监控、本地搜索结果、图片轮播这些,除非我自己写解析逻辑,否则拿不到。也没有竞品流量预估、关键词难度这些衍生指标。你需要这些就买 Ahrefs,这套方案只解决"我的词排第几"这个问题。

n8n 有学习成本。我第一版没做分批,150 个并发请求出去直接被限流(1029)。改成分批要搞懂 Split In Batches 节点,折腾了 40 分钟。Zapier 会自动处理限流和重试,自托管就得自己解决。

Starter Boost 月底过期。3 美金/1 万次的特价包当月有效,忘了用就没了。我设了日历提醒。常规额度永不过期,我会保持 10 美金左右的余额,确定要用得多的时候再买 Boost。

什么人适合搞这套?

如果你是 agency,管着 50 个客户站,去买专业工具。报表功能和白标面板值那个钱。

如果你是独立开发者、技术创始人,或者开发者出身的人,想监控 50~500 个词又不想被月费绑架,这套方案非常合适。每月不到 40 块固定成本,数据存在自己手里,扩容只需要买预付额度,不用升套餐。

真正的价值不只是省钱。因为 SerpBase 返回的是干净 JSON,n8n 又能把数据路由到任何地方,我现在用同一套搜索数据源搭了三个新工作流:自动生成内容简报、监控竞品页面变动、每周检查我的页面有没有抢到 featured snippet。

一个 API,一个工作流引擎,组合出无数用法。这才是我想要的灵活性。

30 分钟最小试错方案

不确定要不要投入?按这个来:

  1. 去 SerpBase 注册,领 100 次免费搜索,不用绑卡。
  2. 本地跑 n8n:docker run -it --rm --name n8n -p 5678:5678 n8nio/n8n
  3. 搭一个最小工作流:定时触发 → HTTP Request(POST 到https://api.serpbase.dev/google/search,Header 带X-API-Key)→ Telegram(把第一条结果的 title 发给自己)。
  4. 跑一遍,检查返回 JSON 的status是否为0,看看organic[0].title长什么样。顺手就继续,不顺手也就亏了一晚上。

我当初就是这么开始的。一个词,一条通知,一个周末。现在 150 个词每天早上静默跑完,我喝咖啡的时候扫一眼 Telegram,就知道昨天排名有没有异动。

(有用 n8n 或者 SerpBase 的同学吗?你们搭了什么好玩的工作流?欢迎交流。)

http://www.jsqmd.com/news/766007/

相关文章:

  • 基于学员数据的教育机构优选分析:从考试分数看职教机构选择策略 - 品牌策略师
  • YOLO-Master:基于MoE的动态目标检测框架优化实践
  • Lumafly:空洞骑士玩家的终极模组管理器,跨平台一键安装告别复杂配置
  • 你的大容量U盘别再只存文件了!用Ventoy把它变成随身系统工具箱(含WinPE+Linux Live)
  • XA分布式事务
  • 面向低轨卫星的高精度载波同步高动态【附代码】
  • DoL-Lyra:智能构建系统,轻松打造个性化游戏体验
  • 别再只调曝光了!Dalsa Linea Color线阵相机平场校正(FFC)保姆级实操指南,告别图像伪影
  • Python 爬虫数据处理:数据库分库分表存储海量爬取数据
  • 3步搞定Zotero文献去重:告别杂乱,专注科研
  • 用STM32F103C8T6的模拟I2C驱动AD5593R DAC模块:一个完整可用的工程代码分享
  • 3步搞定STM32 I2C LCD 1602驱动:从零到显示
  • 第112篇:AI在供应链金融中的应用——智能风控、动态定价与资产穿透(项目实战)
  • 从化工反应器到生物质气化:Fluent流化床欧拉模型在新能源领域的实战应用拓展
  • 告别臃肿AWCC:AlienFX Tools终极轻量级Alienware控制指南
  • 基于深度学习的草莓成熟度检测系统(YOLOv12完整代码+论文示例+多算法对比)
  • TegraRcmGUI深度解析:Nintendo Switch系统注入与高级应用实战指南
  • 对比接入前后感受 Taotoken 在 API 调用延迟方面的优化体感
  • Wecom酱终极指南:3步免费搭建企业微信消息推送服务
  • 2025届最火的六大AI辅助写作助手推荐
  • Hanime1Plugin:如何在Android上打造终极纯净的动漫观影体验
  • Arduino中断模式全解析:从RISING到ONLOW_WE,你的ESP32到底支持哪些?
  • 5分钟掌握HS2-HF_Patch终极指南:游戏体验全面升级的完整解决方案
  • 曹娥万象・古庙迎福|曹娥里・十三弄开街周年庆,焕新启幕嗨玩五一
  • CH32V208评估板开箱:除了点灯,如何快速验证它的蓝牙和网口?
  • 别再问你的手机能不能玩AR了!手把手教你用ARCore官方Demo快速验证设备兼容性
  • Python新手必看:别再被‘TypeError: can‘t multiply sequence by non-int of type ‘float‘’卡住了,3种场景下的实战解法
  • 指针与数组深度解析:掌握C/C++核心内存操作技巧
  • w3x2lni:魔兽地图格式转换架构深度解析
  • 如何快速配置Android动画观影插件:Hanime1Plugin完整使用指南