核心做法是把每条经验拆成“触发条件、默认动作、例外分支、失败信号”四段,其中例外分支必须写成可判定的布尔条件,而不是“视情况而定”。如果缺少完整数据或接口权限,最小可执行动作是先用现有日志和页面快照手工标注一批样本,把例外情况枚举出来,再交给脚本;这只能验证规则是否可判定,不能推出脚本上线后排名一定变化。
两种条件对应两种描述方式,选错会让脚本在边界样本上乱改页面。
选择依据是:例外条件能否在脚本运行前被稳定判定。能判定就用A,不能判定就用B,不要用“看起来不对劲就跳过”这种无法执行的描述。
人工经验常写成“这种页面别动”,脚本无法理解“这种”。改成下面结构后,开发和审核都能对照检查。
status_code == 200 且 正文长度 < 800。一个假设例子:需求写“正文过短的页面不改标题”。脚本无法执行“过短”,改成“正文长度小于800字符时,不修改标题,并写入待确认列表”。假设一批50个页面里有12个被写入列表,下一步不是直接放行,而是先人工看这12个是否属于同一模板,再决定是补规则还是扩大抽样。
没有抓取日志或后台数据时,不要编造字段名。可执行的最小动作是:用页面快照和公开可见信息,对同一模板的页面做人工分类,记录每类页面的共同特征,再把这些特征翻译成脚本可读取的条件。
此时例外只能覆盖你能观察到的部分。例如你只能看到标题、正文开头和发布时间,那么例外条件就限定在这三项内,不要写“排除低质量页面”这类无法判定的描述。做完这一步,你能得到的是“规则是否覆盖了已观察到的样本”,不能得到“未观察到的页面也适用”。
脚本运行后,先看被例外拦下的页面数量和分布,而不是直接看排名。如果拦下的页面集中在某一模板或某一时间段的更新,说明规则可能过宽;如果拦下的页面分散且数量很少,可以保留规则继续观察。
一次改动前后的比较要考虑季节和搜索需求变化,不能把某天的波动单独归因于脚本。可用的动作是:记录改动日期、例外命中列表和同期未改动页面的对照样本,等下一批数据出来后再判断是收紧、放宽还是维持例外。这个判断只说明规则在当前样本下的表现,不承诺固定见效时间。