— Project · Growth Engine —

🤖

AutoMarketing

NihaoLife 的辅助项目:一台只跑在本机的内容工厂 —— 选题、写稿、配图、发布、看数据,一条链路自动化。

Node.js Vue 3 Playwright SQLite DeepSeek Umami SEO / GEO

本机工具,没有公开可访问的站点 —— 这一页是它唯一的对外说明。

NihaoLife 是我做的一个全栈项目:帮外国人来中国旅行和生活的 AI 助手。它上线之后,问题不在产品, 在于没人知道它存在 —— 一个新站在 Google 上的平均排名是第 34 位,也就是第四页, 自然增长基本等于零。

AutoMarketing 就是给它配的那台发动机:一个只监听 127.0.0.1 的社媒内容工厂 + 定时发布机器人 + 流量回看面板。 它不解决“内容好不好”,它解决“每天都有内容、按时发出去、不重复、不出事”。

一、系统长什么样

层用了什么
前端面板Vue 3 + Element Plus(内容任务、平台登录、数据看板)
服务端Node 18 + Express,同时托管前端静态文件
数据SQLite(任务 / 日志 / 设置),全部留在本机
浏览器自动化Playwright,每个平台一个独立的持久化 Profile
内容生成DeepSeek(OpenAI 兼容接口),提示词集中在一个文件里
配图Pexels 按主题关键词检索
数据回看自建 Umami 的只读 API

发布器按平台拆成独立包,目前六个:

packages/publishers/
├── core         公共层:持久化 context、截图、停止型错误
├── x            X (Twitter)
├── instagram    Instagram
├── threads      Threads
├── facebook     Facebook
├── pinterest    Pinterest
└── reddit       Reddit

每个发布器把页面选择器集中在自己的 selectors.js 里。 平台改版的时候只改这一个配置文件,不动业务逻辑 —— 这是被现实教育出来的设计。

二、内容工厂:同一个主题,六种母语

最容易做错的一件事,是把一段文案复制到六个平台。所以这套系统里, 平台风格是第一等公民:所有提示词集中在 packages/ai/src/prompts.js, 要提高内容质量就改这一个文件,绝不让提示词散落进业务代码。

Reddit 那条最反直觉:提示词里明确禁止破折号、禁止项目符号列表、禁止工整的排比句, 要求“像真人随手打的,稍微不完美更好”。因为很多 subreddit 会自动删掉看起来像 AI 写的帖子。 为了让内容活下来,得主动把 AI 的笔迹擦掉。

自动驾驶

全自动那条链路是这样跑的:抓当天与中国旅行相关的新闻标题 → 交给模型挑一个当日选题 → 按各平台风格生成文案 → 用模型顺带产出的图片关键词去 Pexels 找配图 → 排期 → 到点发布。 选题的约束写在提示词里:必须转成对旅行者有用的角度、不许复述标题、不许和最近用过的主题重复、 政治敏感话题直接跳过。开机自启由一个 supervisor 脚本守着,无人值守。

三、几条不能碰的红线

社媒自动化最贵的错误不是发得少,是重复发帖和被判定成机器人。所以可靠性这块花的心思比功能多:

四、成果:Umami 怎么说

以下为自建 Umami(stats.liloulou.cn)在 nihaolife.com 上的真实读数, 窗口为 2026-09-04 往前 90 天;同比一栏为近 28 天 vs 再往前 28 天。

2,861
页面浏览
90 天
669
独立访客
922 次会话
+35.7%
浏览量同比
1,122 vs 827
2:29
人均停留
分:秒

流量从哪来(90 天 · 按会话)

来源会话
Facebook(含 m. / l. 跳转)66
Naver(含移动端搜索)28
Google27
X / t.co12
Instagram7
Threads5
Yandex3
ChatGPT2
Bing1

访客在哪(90 天 · 前十)

国家 / 地区会话国家 / 地区会话
中国403爱尔兰11
美国129新加坡9
韩国37英国 / 瑞典7 / 7
法国14德国 / 俄罗斯6 / 6

来了之后做了什么(自建埋点)

页面浏览由 Umami 脚本自动上报,这几个事件是自己埋的 —— 没有它们就分不清“没人来”和“来了没用”:

事件次数说明
lang_switch71切换界面语言 —— 所有事件里最高
quiz_result_view46旅行者性格测试结果页(含被分享出去后别人看的)
quiz_start → complete18 → 16完成率 89%
kb_read_deep16知识条目读到底
assistant_ask8向 AI 助手提问

设备构成:移动端 346 / 笔记本 264 / 台式机 55 —— 移动端过半。

三个能直接拿来做决定的读数:
① 韩国是第三大来源国,Naver 是仅次于 Facebook 的引荐来源、并且超过了 Google —— 而当时韩语只上线了 9 个页面。这是投入产出比最高的一块地。
② lang_switch 是所有事件里最高频的 —— 人来了第一件事是换语言。多语言不是锦上添花,是入口本身。
③ ChatGPT 已经开始往这边送人。2 次,小得可以忽略,但它证明 GEO 那条链路是通的。

五、韩区:用 9 个页面试出来的判断

做技术审计的时候发现一件事:站点有 11 种界面语言,但只有英 / 俄 / 法 / 西四种有独立 URL 前缀。 其余的(韩、德、日、阿、印地…)只能在客户端切换 —— 搜索引擎完全看不见它们。 用户问“sitemap 里为什么没有韩语”,答案不是漏做了,是那些语言根本没有可被收录的地址。

做法:试点,不是铺开

为什么不一次铺满?因为翻译质量还没有人审过。在有人把韩语自然度过一遍之前, 批量上线几百个机翻页面只会拖累整站权重。先放少量高质量入口,拿信号,再决定要不要扩。

上线后实测

还没做的一步是找韩语母语者审一遍试点页 —— 过审之前不提交 Naver Search Advisor。 Naver 的收录逻辑比 Google 更看重站内的“像不像韩国人写的”,用机翻去敲门是负分。

六、俄区:URL 铺满了,语言没有本地化

俄语的处境和韩语正好相反 —— 技术层全做了,内容层没跟上:

结果呢?90 天里俄罗斯只有 6 次会话,Yandex 引荐 3 次。

这个反差本身就是结论:URL 前缀和 hreflang 只负责让你“可被发现”,能不能“被点开”取决于标题和正文是不是用母语想出来的。 /ru 的首页和大部分知识条目目前还是运行时翻译的产物 —— 读起来没错,但没有一句是为俄语读者写的。

待办很清楚:/ru 首页原生化、给 KB 加逐语言的人工文案覆盖、找俄语者审校。这件事没有捷径, 它是内容工作,不是配置工作。

七、GEO:给 AI 搜索引擎准备的那一层

传统 SEO 争的是排名,GEO(Generative Engine Optimization)争的是被引用。 做法上有重叠,但优先级不一样:

监测手段很土但有效:

grep -E 'OAI-SearchBot|Claude-SearchBot|PerplexityBot' /var/log/nginx/access.log

再加上每月手测 5 个固定问题,看生成式回答里有没有引用到 NihaoLife。

八、这件事教给我的

曝光和排名是两个问题。28 天曝光从 165 涨到 1536,靠的是索引覆盖变大 —— 技术层的活儿见效很快。但平均排名一直卡在 34.5,因为盘点下来 81% 的知识条目正文不到 130 词。一个 150 字符的页面,标题写得再好也不可能排进有竞争的查询前列。

自动化有它的边界。AutoMarketing 能保证“每天有内容、按时发出去、不重复、不违规”, 但它保证不了“这一篇值得排第一”。想明白这点之后,重心从多发挪到了写深: 先合并 8 组自我竞争的重复条目(免签、买药、牙医、必备 App、上网、饮食、买菜、医院各有两篇在互抢排名), 再把景点实名预约、护照买高铁票这类“通用大模型一定答旧、答错”的题目写成长文。

最有用的一个埋点:assistant_ask 记录用户真实提问, assistant_answer 里 sources=0 的那些, 就是知识库没接住的问题。这份清单比任何关键词工具都准 —— 它不是推测需求,它就是需求本身。

九、还没做完的