先给结论:总体增长而核心页面下降,通常说明“平均数被非核心流量抬高了”,不能直接拿全站平均判断核心页面的健康度。正确做法是按页面分组、按检测来源分层,再决定对核心页面是保留原状、改写模板还是退出该版块。直接照搬全站平均数的结论,往往会让真正出问题的核心页面继续被掩盖。
网站恶意代码检测的统计口径通常有两种:一种是全站扫描汇总,另一种是按URL或目录分组。全站汇总里,如果新增了大量低风险或未命中页面的样本,平均值就会被拉平甚至抬高。核心页面即使命中率或异常率在恶化,也可能被大量正常页面稀释。
这里的关键不是“平均数错了”,而是它回答的问题变了。全站平均回答的是“整站当前总体状态”,而核心页面下降回答的是“重点页面是否在变差”。两者可以同时成立,并不矛盾。把前者当作后者的证据,是拆分时最常见的误判。
拆分的第一步不是算更多平均数,而是把页面分成三类,分别看它们对总体增长的贡献:
如果总体增长主要来自长尾和新增页面,而核心页面在下降,那么平均数上升并不能证明检测策略有效。此时应把核心页面单独拉出来,按同一时间窗口、同一检测规则重新比对。
拆分之后要做的不是继续统计,而是决定对核心页面怎么处理。三种取舍各有前提:
适用前提:核心页面的下降来自检测口径变化,而不是页面本身出现新异常。例如检测规则升级后,旧规则下的“正常”被重新标记,导致核心页面命中数上升。此时应保留页面,先修正检测规则或基线,而不是动页面。
适用前提:核心页面的下降与模板、公共组件或第三方脚本的改动时间吻合。例如某个公共脚本更新后,多个核心页面同时出现同类异常,而长尾页面因为未加载该脚本没有变化。此时改写应针对公共组件,而不是逐页修补。
适用前提:核心页面本身已不再承担主要作用,且持续检测成本高于其价值。退出不是删除页面,而是把它从核心监控清单中移出,降低检测频率或改为抽样。这个决定需要明确记录,避免以后又把它的下降误读为整站问题。
假设某站有100个页面,核心页面10个,长尾页面90个。上一周期核心页面异常数为20,长尾为10,全站平均异常率为30/100=0.3。本周期核心页面异常数升到30,长尾降到5,全站平均为35/100=0.35,看起来总体增长。但核心页面异常数从20升到30,实际在恶化。
这个例子说明:总体增长可以同时伴随核心页面下降,只要非核心页面的改善幅度更大。验证方法是把分子分母按组拆开,而不是只看合并后的比率。如果拆分后核心页面的分子在上升、分母基本不变,就应优先处理核心页面,而不是庆祝全站平均上升。
拆分完成后,至少要做一次“按核心页面重跑检测并记录前后差异”。具体动作是:选定同一批核心页面,用同一套检测规则,在改动前后各跑一次,记录命中页面、命中类型和命中位置。这个动作的结果会直接影响下一步:如果命中集中在公共组件,下一步是改写组件;如果命中分散且与改动无关,下一步是保留并复核检测规则;如果命中持续且页面已无核心价值,下一步是退出核心监控清单。
需要说明的是,第三方估算流量、搜索引擎报告与站内统计的口径不同,不能单靠某一个指标还原搜索算法或恶意代码的全部来源。请求量或抓取量归零,也不能单独证明处理正确,它还可能来自统计口径调整、访问拦截或样本减少。拆分平均数的意义,是让核心页面的变化不被总量掩盖,而不是用一个新的平均数替换旧的结论。