首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >四件事的操作步骤:零结果兜底、对比页结论、子类导语、问答追问

四件事的操作步骤:零结果兜底、对比页结论、子类导语、问答追问

原创
作者头像
用户3646678
发布于 2026-11-12 22:16:42
发布于 2026-11-12 22:16:42
1410
举报
文章被收录于专栏:建站日记建站日记

上一篇写的是踩了什么坑。这一篇只写怎么做,能抄的直接抄。

先说明一句:下面的数字和字段都是俺这站的,抄的时候必须换成你自己的。 提示词可以抄,阈值不行。

〇、开工前先备三样

  • 一个能跑脚本的地方(俺是 ssh 上去直接 node);
  • 一个稳定的模型接口(站内接的是美团 LongCat,换成任何一家都行);
  • 改库之前先备份。这条比什么都重要,后面会解释为什么。

一、零结果兜底,五步

第一步:先测你的检索到底会不会返零结果。

造 20 个词去搜:纯乱码、纯英文、生造的中文词、正常但冷门的需求。把每次的 total 记下来。

如果每个词都能返 20 条以上,说明你的检索也是模糊匹配,total === 0 这个条件基本用不上——这是俺踩的第一个坑。

第二步:定两级触发。

  • A 级:total === 0,一条都没有;
  • B 级:total > 0,但前 3 条跟查询没有一个共同二元词。

二元词的判断不长:

代码语言:javascript
复制
// 中文按两个字滑窗,英文按三个字母以上的单词
const cjk = (q.match(/[\u4e00-\u9fa5]/g) || []).length;
if (cjk >= 2) {
  for (let i = 0; i + 1 < q.length; i++) {
    if (hay.includes(q.slice(i, i + 2))) return true;   // 命中任一就算相关
  }
  return false;
}
return q.split(/[^a-z0-9]+/).some(w => w.length >= 3 && hay.includes(w));

B 级触发的时候,百度那块追加在站内结果下面,不替换。万一站内真有一两条对的,两块并存比误删安全。

第三步:接口别抓网页。

服务端去请求搜索结果页,会被跳到验证页(滑块),换 UA、加 Referer 都没用。用官方搜索接口,字段要五个就够:标题、链接、摘要、站点名、日期。

第四步:结果要过三刀。

  1. 标题像 URL、或者短于 6 个字 → 丢;
  2. 摘要像 base64 / 十六进制串 → 丢;
  3. 跟查询一个二元词都不共享 → 丢。

三刀砍完一条不剩,就整块不渲染,回到「去百度搜」的文字出口。宁可没有,也别挂一排附件下载页。

第五步:给兜底自己加护栏。

超时 2.2 秒、负缓存 6 小时(查过没结果的词不再问)、正缓存 30 天、每进程每小时最多 200 次外呼、同词并发只发一次。

搜索页是公开入口,不加这几条,一晚上就能被人拿随机词刷出账单。

二、对比页结论,四步

第一步:先重算页面数。 俺记的是 349,脚本算出来 401。差的 52 个页面此前只有规则句,没有结论段落。别用记忆里的数字开工。

第二步:提示词。 俺用的是这一版,可以直接抄:

代码语言:javascript
复制
给每对工具写一段 120-180 字的中文建议。硬约束:
1. 先场景后选择:先说"什么人什么情况下选 A",再说另一种情况选 B,
   场景要具体(写周报 / 给客户出方案 / 手机上随手问 / 处理几十页 PDF);
2. 只能引用下面给出的字段,不许出现价格数字、版本号、公司背景、用户量;
3. 不评判谁更好,只说谁更适合什么;
4. 不要"综上所述 / 各有千秋 / 建议根据实际需求选择";
5. 两者确实不是同类工具,返回空字符串 ""。

工具字段就给五样:一句话、主要用途、价格、适合谁、有没有免费层。给多了模型就开始编。

第三步:三道校验,缺一不可。

  • 字数 120–180;
  • 必须以句号、问号、感叹号收尾——这条最有用,能抓出「前者是」「如果你习惯」这种被截断的半句;
  • 正文里出现「选 A」「B 更」这种占位符的,打回。提示词里用 A/B 标注,模型真的会照抄进正文。

第四步:不合格就删。

单条重试五次还不行,直接删掉这一条,页面退回原来的规则句。

宁可这一页没有段落,也不能留半句话在页面上。

三、子类导语,五步

第一步:把旧稿的毛病列成黑名单。

「这一页」「这里收录」「这类产品」「本子类」「一是…二是…三是…」——这些词一个都不许出现在开头。

第二步:四类开头轮着用。

  • 场景式:用读者正在做的事开头;
  • 对象式:用「给谁用」开头;
  • 辨析式:用「容易混的两件事」开头;
  • 疑问式:用一个真问题开头。

一批四条,四种各来一个。同一批里重样,一眼就看出来是批量生成的。

第三步:长度 110–165,只写三句。 第一句是什么、第二句有哪几类差别、第三句怎么挑。

第四步:查重看开头四个字。

俺这 40 条跑完,同一个分类里有 3 组开头撞了(两个都是「想把脑子」)。加一行判断就能捞出来,别靠眼睛。

第五步:跑题和堆品牌名的单条重写。

有两类必须重写:一是把「设计素材」写成了建站(跑题),二是一段里点了六个产品名。导语里不写品牌——站点会下线、会改名,写死了第二年就是错的。

四、问答追问,五步

第一步:给候选表,不让模型编 URL。

每条问题配一张小表:同分类问答 10 条、跨分类热门 6 条、相关页面 4 个,全部带编号。

第二步:一次四条问题,每条出三个追问 + 目标编号。

代码语言:javascript
复制
只返回 JSON:{"1":[{"q":"追问句","to":3}, ...]}
追问 10-30 字,像读者接着问的下一个问题,不要照抄目标标题。
三条方向不同:深挖细节 / 换场景或人群 / 回到入口。
至少一条指向"页面:"开头的目标,三条不能指向同一个。

第三步:校验四件事。

三条都在、编号都合法、至少一条是页面(不是全在问答里打转)、不重复也不指向自己。

第四步:URL 归一。

子类页有两种写法,带不带前缀,两个都返回 200,但 canonical 只认一种。内链要是指到别名上,等于自己给自己造重复页面。

第五步:上线前逐页 curl。

110 条问答、330 条链接、111 个落点,跑一遍全部 200 才算完。别信「应该没问题」。

五、发布与验证

俺这次用到的脚本,按顺序:

干什么

脚本

对比页结论批量生成

gen-vs-pick-v2.js

对比页结论逐条修

fix-vs-picks.js

子类导语批量生成

gen-subcat-desc-v2.js

子类导语单条重写

fix-subcat-desc.js

问答追问生成

gen-qa-followups.js

上线前校验

validate-vs.js、validate-qa.js、check-vs-pages.js

四条纪律:

  1. 改 db.json 之前先停服务,否则进程退出时内存里的旧库会把你的修改整份盖回去;
  2. 派生数据(文案、追问、标签)单独放 data/ 下,按 mtime 热加载,改完不用重启;
  3. 发版走 build-release.sh,版本号、changelog、包、仓库一次做完;
  4. 发布后同步备机,server.js、version.json、几个数据文件的 md5 要逐项对上。

还有一条容易忘:清 nginx 的页面缓存。不然你改完了,自己刷新看到的是旧页面,会以为没生效。

六、抄的时候注意三件事

第一,数字全换。120–180 字是俺站的节奏,你的页面可能适合 80–120。

第二,提示词里的字段换成你库里真有的。俺这边有「适合谁」「有免费层」,你没有就别写进提示词,模型会替你编。

第三,先跑 5 条再全量。俺第一批就是直接跑 400 条,结果提示词里一个「A/B」把 60 多条写坏了,返工两轮。

真正省时间的不是生成,是校验。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 〇、开工前先备三样
  • 一、零结果兜底,五步
  • 二、对比页结论,四步
  • 三、子类导语,五步
  • 四、问答追问,五步
  • 五、发布与验证
  • 六、抄的时候注意三件事
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档