
1. 先厘清「网页重要性」到底指什么做SEO的人几乎都会遇到同一个尴尬场面老板或者产品经理丢过来一句「我们站有三千个页面你排个优先级出来」你打开后台看到一堆曝光、点击、排名、外链数据却发现这些数字互相打架——曝光高的页面没转化转化好的页面没流量老页面外链一堆但内容已经过时新页面内容扎实但一点数据都没有。这时候如果只靠感觉拍板排出来的优先级表基本等于许愿清单。我理解的「衡量一个网页的重要性」本质上是在回答一个资源分配问题在人力、预算、抓取配额都有限的前提下站内这几千上万个URL哪些值得优先改写、优先加内链、优先做结构化、优先投放推广资源。所以网页重要性不是学术意义上的「权威度排名」而是一个可计算、可复现、能支撑决策的排序结果。这套东西适合三类人看一是刚接手站点优化、手里只有后台导出表的新人需要一套不至于跑偏的框架二是做了几年、习惯凭经验判断的老手可以拿来校准自己的直觉三是负责内容排期的运营同学需要一套能跟SEO对齐的语言。文中给的指标口径、权重算法和代码片段都可以直接改参数套用数据源换成你自己站点的即可。需要提前说明一点我自己在实操里从不追求「一个绝对正确的分数」只追求「排序稳定且能被解释」。分数本身会随数据更新波动但只要同一批页面在不同月份的排序不大幅跳动这套模型就是可用的一旦出现某页面从上个月的20名冲到第1名我第一反应不是窃喜而是去查数据是不是出了问题。2. 衡量体系的整体设计与思路拆解2.1 为什么单一指标一定会失真先说最常见的三种「单指标思维」以及它们各自会翻车在哪。第一种是只看流量。用点击量或者曝光量排序结果往往是资讯类、热点类页面霸榜而真正带来询盘的产品参数页、报价页、对比页排在后面。这类页面搜索量小但搜索意图极其明确一个访问的商业价值抵得上几十个泛流量访问。只按流量排序会把预算全砸在「看着热闹」的页面上。第二种是只看外链。外链数量作为重要性信号确实有效但它是历史的沉淀带有强烈的路径依赖。老页面躺着几十条外链哪怕内容早就该重写了分数依然很高新做的、结构更清晰的页面因为没有外链积累永远排不上号。更麻烦的是外链数据在第三方工具里通常有几个月延迟用它做月度决策等于用后视镜开车。第三种是只看站内结构。按点击深度、内链数量排序逻辑干净、数据好拿但它衡量的是「你希望搜索引擎认为谁重要」而不是「用户真的需要谁」。我曾经见过一个站点把页脚的公司简介链接当成高重要性页面因为它是全站每个页面都链过去的——这种由模板产生的链接如果不剔除整个模型直接废掉。所以我在设计这套体系时定的第一条原则是至少覆盖结构、需求、行为、商业四个互不重叠的维度任何一个维度单独拿出来都不足以定论但四个维度同时指向同一个页面时这个页面的优先级基本没有争议。2.2 分层设计把「重要性」拆成四个可采集的层拆层的目的不是把事情搞复杂而是让每个指标都能对应到明确的数据来源和明确的业务含义。我一般是这么分的结构层回答「站点自己怎么表态」。包括页面在站点层级中的位置首页一级栏目还是五级深层、有效内链入链数、是否出现在主导航或面包屑、是否在站点地图中、被搜索引擎抓取的频次。这一层的数据全部来自站内可控性最强也最容易被模板链接污染需要重点清洗。需求层回答「市场有多想要这个页面」。包括目标关键词的搜索需求规模、页面在搜索结果中的曝光量、平均排名位置、点击率、以及搜索结果页上出现的特殊模块比如是否有图片区、问答区、视频区。这一层是判断「值不值得投入」的关键因为一个排在20名开外但曝光基数很大的页面优化空间远大于一个稳定第1名但月搜索量只有几十的页面。行为层回答「用户进来之后认不认」。包括停留时长、滚动深度、跳出情况、站内二次点击、回访比例。这一层的坑最多因为不同页面类型的行为基线完全不同——工具页天然停留短长文页天然停留长拿同一把尺子量所有页面结论一定是错的。我的做法是按页面模板分组组内做归一化不做全站横向比较。商业层回答「这个页面离钱有多近」。包括转化次数、表单提交、询盘、加购、成交金额、毛利贡献。这一层的数据往往不在SEO手里需要跟数据团队或者业务系统对接但恰恰是这一层让SEO的优先级表能跟业务方对话。没有商业层的排序你在评审会上很难说服任何人。四层之间不是简单相加的关系。我的经验是结构层决定「下限」一个结构上被判死刑的页面内容再好也很难排上去需求层决定「天花板」需求规模决定了这个页面的最大可能收益行为层决定「当前效率」商业层决定「值不值得破例」。比如某些页面行为数据很差、需求也不大但商业价值极高比如退换货政策页、企业采购流程页这种页面我会手动给它一个「保护权重」不让它被模型排到末尾去。2.3 权重怎么定别用拍脑袋的百分比权重设计是这套体系里最容易变成玄学的地方。我见过直接写「结构30%、内容30%、流量40%」的方案问为什么是30答不上来。虽然最终权重多少带点主观但至少要有推导过程让别人能质疑、能修改。我常用两种方法按团队成熟度选方法一两两比较打分适合小团队快速落地。把四个维度两两对比谁更重要给2分一样重要给1分不重要给0分最后按总分归一化。比如结构对需求我认为需求更重要给2结构对行为结构稍重要给2结构对商业商业更重要给0需求对行为给2需求对商业给1行为对商业给0。汇总后结构4分、需求5分、行为3分、商业4分总分16得到权重0.25、0.31、0.19、0.25。这套方法粗糙但快而且因为是自己打分后面调整起来没有心理负担。方法二用结果反推权重适合有历史数据的站点。拿过去半年已经做过优化的页面做样本记录优化前后的流量或转化变化用简单的线性回归拟合各维度指标对「优化收益」的解释力回归系数归一化后就是权重。这个方法更硬但需要至少50到100个样本且要控制住外部变量比如同期算法更新、季节波动小站点做不了。不管是哪种方法有几个原则我一直在守权重之和必须是1任何一个维度不得超过0.4超过就意味着其他维度形同虚设权重每季度复核一次业务阶段变化了权重就该变比如新站期结构权重可以调高成熟期商业权重调高权重表要写进文档并且版本化不然后面没人说得清去年那份优先级表是怎么算出来的。2.4 评分表长什么样一份可以直接照抄的字段清单把上面的思路落成表格大概是这样。这张表我会放在一个共享文档里每次跑完数据直接输出一版附上计算日期和数据口径说明。层级指标数据来源归一化方式初始权重结构有效内链入链数剔除导航和页脚自建爬虫 / 站内链接表对数压缩后 min-max0.10结构点击深度爬虫抓取层级反向 min-max0.08结构是否在主导航 / 栏目页站点配置0 / 0.5 / 1 分档0.07需求目标词月搜索需求关键词工具对数压缩后 min-max0.12需求曝光量站长平台对数压缩后 min-max0.10需求点击率相对位置站长平台组内百分位0.09行为停留时长模板内相对值前端埋点组内百分位0.10行为滚动深度或阅读完成率前端埋点组内百分位0.08行为站内二次点击率前端埋点组内百分位0.07商业转化次数业务系统对数压缩后 min-max0.10商业单次转化价值业务系统分档赋值0.09注意这里每个子指标的权重先给定四个层级的权重由子指标相加得出这样调整起来只需要动子项层级权重自动跟着变。我在实际使用中会把这张表分成「基础版」和「进阶版」基础版只留七八个字段适合刚起步、数据不全的站点进阶版加上页面新鲜度、内容覆盖子问题数、结构化数据完整度这些适合内容量大的站点。3. 核心指标的计算细节与实操要点3.1 内链权重怎么算从链接图里挖出「站点自己认为重要的页面」内链是结构层里最硬的信号但直接用「入链数量」排序会出大问题——导航、页脚、侧边栏这些模板链接会让每个页面都平等地获得几百条入链真正有区分度的正文内链被淹没了。所以第一步永远是剔除模板链接。我的做法是给每条链接打两个标记is_template是否来自公共模板区域和is_nofollow是否被禁止传递权重。公共模板的判定方式很土但有效如果某个链接出现在超过80%的页面上基本可以判定为模板链接。用SQL跑一遍就能筛出来-- 统计每条链接在多少个页面上出现占比过高的视为模板链接 SELECT target_url, COUNT(DISTINCT source_url) AS src_cnt, COUNT(DISTINCT source_url) * 1.0 / (SELECT COUNT(*) FROM pages) AS coverage FROM internal_links GROUP BY target_url HAVING coverage 0.8 ORDER BY src_cnt DESC;筛完之后剩下的就是正文内链。这时候再算入链数才有意义。但入链数本身是个长尾分布头部页面几百条尾部页面0到1条直接做 min-max 归一化会把所有尾部页面压成0失去区分度。所以要先做对数压缩log(1 in_links)再做 min-max。这一步很关键我见过太多人跳过这步结果模型对中长尾页面完全失效。更严谨一点可以算页面级别的链接权重传递也就是大家常说的链接图迭代。原理不复杂一个页面把权重平均分给它链出去的页面迭代若干轮后收敛。自己实现一个简化版大概二十行def simple_pagerank(edges, n_pages, damping0.85, iters30): edges: [(source, target), ...]返回每个页面的权重分 out_deg {} in_edges {} for s, t in edges: out_deg[s] out_deg.get(s, 0) 1 in_edges.setdefault(t, []).append(s) score {i: 1.0 / n_pages for i in range(n_pages)} for _ in range(iters): new_score {} for i in range(n_pages): incoming sum( score[s] / out_deg[s] for s in in_edges.get(i, []) if out_deg.get(s, 0) 0 ) new_score[i] (1 - damping) / n_pages damping * incoming score new_score return score这段代码适合页面量在几万以内的站点跑起来几十秒。页面量大的话建议用稀疏矩阵或者直接交给图计算库。实测下来这个分数跟「人工判断哪个栏目页更重要」的吻合度相当高因为它天然惩罚了那些「只进不出」的孤岛页面——只被链、不往外链的页面权重传递会断掉这跟真实站点的结构问题是对得上的。注意算出来的分数不要直接拿去跟别站比。每个站点的链接图规模不同分数绝对值没有意义只在站内做相对排序。3.2 曝光和排名数据怎么用需求层的三个陷阱站长平台导出的曝光、点击、排名数据是需求层最省事的数据源但直接拿来用会踩三个坑。第一个坑是曝光口径包含了大量无关展现。有些页面因为标题里带了一个高频词在完全不相关的搜索结果里也拿到了曝光这些曝光数很好看但点击率极低属于噪音。我的处理方式是给曝光加一个「相关性过滤」只统计目标关键词命中的那部分曝光或者用点击率做反向筛选把点击率低于同组中位数三分之一的页面标记为「疑似无关展现」在计算时降权。第二个坑是平均排名会掩盖分布。一个页面平均排名8.3可能是稳定第8名也可能是第3名和第14名各占一半——后者的优化空间完全不同。所以我会额外拉一版排名分布看落在前三页、第二页、第三页以后的比例只有「有相当比例曝光落在第2页」的页面才是短期最值得投入的优化对象。这类页面通常离首页只差一步改个标题、补一段内容、加几条内链位置就可能翻上去。第三个坑是点击率不能跨页面比较。品牌词的点击率天然高信息类词的点击率天然低长尾词可能只有零点几个百分点却已经是正常水平。我一般按「词类型 × 排名区间」分组组内算百分位再拿百分位进模型。这样处理之后一个点击率0.8%的长尾词页面可能在它那一组里排在前20%而一个点击率5%的品牌词页面反而排在组内中游这个结论跟直觉是对得上的。需求层还有一个隐藏价值它能帮你识别「有需求但站内没有对应页面」的空白区。我习惯把关键词库和站内URL做一次匹配匹配不上的词单独拉一张表这张表往往比优化老页面更有价值——因为它对应的是新增内容的机会而不是存量修补。3.3 行为数据怎么用才不冤枉页面分组归一化是底线行为数据是四个层里最容易误伤页面的。工具类页面停留30秒很正常一篇三千字长文停留3分钟也算正常但如果全站混在一起排序长文页永远赢工具页永远输最后模型会得出「应该多做长文少做工具」的荒谬结论。我的处理流程固定三步第一步按模板分组。把全站页面按模板打标签比如文章页、产品详情页、列表页、工具页、政策页。分组之后同一个组内的页面才具有可比性。第二步组内做百分位。每个指标在组内计算百分位分数0到1之间这样不同指标的量纲就统一了而且天然抗异常值——一个页面停留时长异常长比如用户开着标签页去吃饭了在百分位体系里最多也就是1分不会把整个分布带歪。第三步设置最小样本量。访问量太小的页面行为数据不可靠比如一个月只有20次访问的页面停留时长波动极大。这类页面我直接给行为层赋一个组内中位数不参与百分位排序避免小样本噪音污染排序结果。import pandas as pd # df 需包含url, template, pv, avg_dwell, scroll_rate, second_click df df[df[pv] 100].copy() # 过滤小样本 df[dwell_pct] df.groupby(template)[avg_dwell].rank(pctTrue) df[scroll_pct] df.groupby(template)[scroll_rate].rank(pctTrue) df[click2_pct] df.groupby(template)[second_click].rank(pctTrue) df[behavior_score] ( df[dwell_pct] * 0.4 df[scroll_pct] * 0.3 df[click2_pct] * 0.3 )这段代码很短但解决的是核心问题让不同模板的页面在同一把尺子下被公平比较。跑完之后你会发现很多你以为「用户不喜欢」的页面其实只是在错误的组里被比较了。提示行为数据的采集一定要在优化动作之前完成埋点并留下基线否则事后无法归因。我踩过这个坑——优化了三个月才想起来看停留时长结果发现没有基线数据等于白干。3.4 商业价值怎么量化把「重要」翻译成「值钱」商业层是让SEO主导权变强的关键。没有这一层优先级表在业务评审会上就是一张技术报告有了这一层它就变成了资源申请书。落地方式取决于站点的转化路径。电商类站点相对简单直接取订单数据按落地页归因即可注意要区分「直接成交」和「辅助成交」——有些页面用户看了三四个才下单它自己不产生订单但影响决策这种页面如果只看直接成交会被严重低估。我的处理是给辅助转化的页面按「参与路径次数」折算一个系数通常取直接成交价值的0.3到0.5。线索类站点比如B端服务麻烦一点因为转化是表单提交质量差异很大。我的做法是让销售团队给线索打质量标签高意向、中意向、无效然后按加权计算页面价值高意向算1中意向算0.3无效算0。这样算出来的页面价值比单纯统计表单提交数靠谱得多。内容类站点最麻烦因为没有直接成交。这时候我会用替代指标注册转化、内容订阅、页面广告收益按页面PV和RPM折算、以及站内搜索关键词的商业价值如果这个页面被大量站内搜索命中说明用户明确需要它。虽然不如直接成交精确但至少有一个可比的货币化数值能进模型。我这里要强调一个观点商业层的数据不需要绝对精确只需要相对顺序正确。一个页面的转化价值算成12块还是15块不重要重要的是它能区分出「价值几十块」和「价值几百块」两个档位。为了追求精确而放弃整个模型是本末倒置。4. 完整实操给一个站点跑一遍重要性评分4.1 数据采集与清洗先把脏数据挡在门外假设手上是一个内容站页面量在八千左右有站长平台数据、前端埋点、以及一个历史积累的链接表。整个流程我拆成五步走。第一步是拉全量URL清单。从站点地图、爬虫抓取结果、服务器日志三条路各拉一份做并集。只信站点地图不行会因为配置漏掉页面只信爬虫也不行孤立页面永远抓不到。三份并集之后通常能比站点地图多出百分之五到十的页面这部分往往就是被遗忘的「孤儿页」。第二步是拉结构数据。用自建爬虫或者站点地图导出拿到每个页面的抓取层级、内链入链数、是否在导航中。这一步的关键是剔除模板链接方法上一节说过了。第三步是拉需求和行为数据。站长平台导出按页面聚合的曝光、点击、排名埋点系统导出停留、滚动、二次点击。这一步要注意时间窗口对齐——所有数据都取最近完整自然月不要一个取30天一个取90天否则同比根本对不上。第四步是拉商业数据。按落地页聚合转化次数和转化价值跟前面的页面清单做左连接。匹配不上的页面转化填0但不能简单填0了事要区分「确实没有转化」和「因为归因缺失导致没匹配上」后者我一般标记出来单独处理。第五步是数据清洗。这一步最枯燥也最重要通常要处理掉这些问题URL 参数导致同一页面重复计数、大小写不一致、结尾斜杠不统一、分页页面被误当成独立页面、测试页面混进正式清单。我习惯写一个清洗脚本把所有规范化规则集中在一处每次跑数自动执行避免手工操作遗漏。import re from urllib.parse import urlparse def normalize_url(u: str) - str: u u.strip().lower() p urlparse(u) path re.sub(r/, /, p.path).rstrip(/) or / return f{p.scheme}://{p.netloc}{path} df[url_clean] df[url].map(normalize_url) df df.drop_duplicates(subset[url_clean], keepfirst)这段代码看着简单但在八千个页面的清单上光这一步就能合并掉几百条重复记录。合并之后做聚合不会出现同一个页面两条记录、分数被拆成两半的情况。4.2 算分归一化、加权、输出清洗完的数据进入算分环节。我习惯把所有指标先统一到0到1之间再加权求和。归一化方式按指标分布特点选择长尾分布指标内链数、曝光量、转化次数先log1p再 min-max避免头部页面把分布拉爆。有明确方向的指标点击深度、加载时间反向 min-max数值越小分越高。分档指标是否在导航、是否有结构化数据直接映射成 0、0.5、1。行为类指标用上一节的组内百分位。import numpy as np def norm_log_minmax(s): x np.log1p(s.fillna(0).clip(lower0)) return (x - x.min()) / (x.max() - x.min() 1e-9) def norm_reverse(s): x s.fillna(s.median()) return (x.max() - x) / (x.max() - x.min() 1e-9) df[s_link] norm_log_minmax(df[in_links_valid]) df[s_depth] norm_reverse(df[crawl_depth]) df[s_nav] df[in_nav].map({True: 1.0, False: 0.0}).fillna(0) df[s_demand] norm_log_minmax(df[impressions]) df[s_ctr] df.groupby(kw_type)[ctr].rank(pctTrue) df[s_biz] norm_log_minmax(df[conv_value]) W { s_link: 0.10, s_depth: 0.08, s_nav: 0.07, s_demand: 0.12, s_ctr: 0.09, behavior_score: 0.25, s_biz: 0.29, } df[final_score] sum(df[k].fillna(0) * w for k, w in W.items()) df[rank] df[final_score].rank(ascendingFalse, methodmin).astype(int)跑完这一步你会得到一张带分数的表。但不要直接按分数排序就交付还有两件事要做。第一件是分层抽样校验。从排名前50、50到200、200以后各抽10个页面人工看一遍判断分数跟直觉是否一致。如果发现某个明显应该靠前的页面排在很后面去查它哪个指标拖了后腿往往是数据问题而不是判断问题。我做过七八次这样的校验几乎每次都能揪出一两个数据口径错误。第二件是做敏感性分析。把权重上下浮动20%看头部50名的排序变化有多大。如果某个页面在权重微调后就从前10掉到100名开外说明它的分数高度依赖单一指标这种页面在交付时要单独标注提示「排序不稳定建议人工复核」。实测下来真正稳定的高价值页面在权重怎么调都稳在前列。4.3 结果怎么解读分数只是起点动作才是目的分数出来的下一步是转化成动作清单。我一般按分数分四档每档配不同的处理策略分数档位页面特征建议动作投入节奏前10%结构好、需求大、商业价值高重点维护补内链、做结构化、定期更新每月复盘一次10%–30%有需求但结构偏弱或有结构无转化优化标题描述、补充内容、加导航入口每季度集中处理30%–60%长尾页面需求分散合并同类内容、做聚合页半年一次批量处理后40%低需求、低转化、结构孤立评估是否下线、合并或设置规范化按季度清理这里有个反直觉的经验后40%的清理收益往往比优化前10%更大。原因很实际——大量低质量页面会稀释站点的整体质量信号也会浪费抓取资源。我做过一次对比某站点清理了约1200个低价值页面之后剩下的核心页面平均收录速度和排名都有可感知的提升。当然清理要谨慎先做规范化或者设置跳转观察一个月再决定是否彻底移除别一上来就批量删。另外分数表要跟业务方共享但不要共享分数本身共享分档结果和对应的动作建议。业务方看到「0.734分」没有感觉看到「这个页面属于第一档建议每月维护一次」才知道要配合什么。沟通口径的统一比模型精度重要得多。5. 常见问题与排查技巧实录5.1 数据口径类问题八成错误出在这里问题一曝光和点击对不上。站长平台的曝光统计和埋点的PV统计差了三四倍很多人第一反应是数据不准。实际情况通常是口径差异曝光统计的是搜索结果页展现次数一次访问可能在多个关键词下各算一次曝光PV统计的是页面被打开的次数同一用户刷新也算。这两个数本来就不该相等。我的处理是只用其中一个作为需求层指标不做交叉验证避免自我怀疑。问题二内链数量虚高。模型跑出来发现首页入链数三万条其他页面只有个位数归一化之后其他页面全变成0。这就是模板链接没剔干净。排查方法随机抽五个页面的HTML搜一下那些高分链接是不是出现在导航或页脚里。如果超过一半是说明链接表根本没做模板标记。问题三转化数据匹配率低。商业层数据连上来之后只有20%的页面能匹配到转化其余全是0。这时候不要急着把0填进去跑先看归因逻辑——很多站点的转化归因只记最后一次点击导致中间环节的页面全部丢数据。改成「首次点击 末次点击」双归因匹配率通常能提到60%以上。问题四同一个页面在清单里出现多次。带参数的URL、不同大小写、结尾斜杠差异都会导致重复。跑之前务必做URL规范化跑之后再检查一遍是否有重复的title或者重复的正文指纹。5.2 模型类问题分数看起来合理其实不能用问题一新页面永远排不上。新页面没有外链、没有历史行为数据、商业数据也是0四个维度全输分数自然垫底。这不是模型错了是模型缺了「潜力和时效」维度。我的解决办法是给上线90天内的页面加一个「新页面保护系数」把它的最终分数乘以1.2到1.5或者单独建一张新页面清单用内容完整度、目标词需求、结构位置三个指标单独排序不走全量模型。问题二分数通胀。每次跑完都有一批页面接近1分看起来都完美。这通常是归一化方式的问题——min-max 对极值敏感如果有个页面内链数特别夸张其他页面都会被压到接近0反过来如果所有页面都差不多又会被拉开。解决办法是把 min-max 换成百分位排名分布更均匀也更抗极值。问题三排序月度大幅波动。这个月排第5下个月掉到第80再过一个月又回到第10。先查数据量和数据延迟很多波动来自数据本身不稳定而不是页面变化。如果排除数据问题后仍然大幅波动说明权重设计有问题——某个指标权重过高且波动大需要降低它的权重或者做平滑处理比如取三个月移动平均。问题四行为和商业指标互相矛盾。有的页面用户停留很久但转化极低有的页面停留很短但转化高。这时候不要强行调权重让它们统一而是分开看停留长转化低通常是内容吸引力够但转化路径有阻碍按钮不明显、表单太长、价格不透明停留短转化高通常是决策路径短、意图明确比如直接搜型号来比价。这两类页面都应该排在前面只是后续动作不同。5.3 落地类问题模型对了推不动问题一没人认这个分数。最典型的情况是SEO自己算得很开心内容和产品完全不买账。根源在于模型用了太多他们看不懂的指标。我的做法是输出两套视图一套给SEO内部看指标齐全一套给业务方看只保留「流量潜力、商业价值、维护成本」三个维度用高/中/低三档表达。同一份数据两种语言。问题二优化了但没效果。优先级排出来了内容也改了三个月过去排名没动。这时候要回查两件事一是这个页面的问题到底是不是内容问题有些页面是技术问题比如渲染、加载、规范化改内容当然没用二是优化动作有没有覆盖真正的瓶颈模型告诉你这个页面结构分低但你只改了正文内链一条没加那分数涨了排名也不会动。我的习惯是在动作清单里明确写「本次优化针对哪个指标」事后按指标复盘而不是只看最终排名。问题三模型维护成本过高。一开始设计了二十个指标跑了两个月发现数据更新要花三天最后没人愿意跑。这几乎是所有自建模型的通病。我的建议是从七个指标起步跑顺了再逐步加宁可粗糙但能持续也不要精致但跑一次就废。下面这张表是我这几年踩坑总结出来的速查清单遇到问题可以先对照着看现象最可能的原因快速验证方法处理方式头部页面分数异常高模板链接未剔除抽查HTML中高分链接位置加模板标记后重算中长尾页面分数全为0未做对数压缩看指标分布直方图log1p 后归一化新页面全垫底缺少时效维度看前50名中有无90天内页面加保护系数或单独排序月度排序剧烈波动单指标权重过高权重±20%敏感性测试降权或做移动平均转化匹配率低于30%归因模型单一对比不同归因方式结果改双归因或路径归因行为指标误伤工具页未按模板分组按模板看指标中位数组内百分位归一化业务方不认可排序指标过于技术化问对方看得懂哪几个输出简化三档视图除了上面这些还有两个我个人很在意但很少被提到的细节。一个是指标的时间衰减。外链、历史流量这些指标反映的是过去而页面重要性是要指导未来的。对于内容型站点我会给指标的统计窗口加一个衰减系数越久远的数据权重越低比如最近30天权重0.530到90天0.390天以上0.2。这样模型对近期变化的响应会更灵敏。另一个是人工干预的留痕。任何手动调整分数的操作都要记录调整人、调整原因、调整幅度。我见过一个站点三个人各自手动改过权重最后没人说得清某页面为什么排第一模型彻底失去可信度。留痕不是为了追责是为了让模型能持续演进——半年后回看这些干预记录你会发现自己当初的很多判断是对的也有很多是错的这正是权重校准的最好素材。6. 我在这套体系上的一些实际体会这套评分模型我从最早的三四个指标慢慢迭代到现在十来个字段中间推翻重来过两次。第一次推翻是因为发现分数跟转化完全对不上查下来是商业层数据根本没接进来模型在优化「看起来重要」而不是「真的重要」的页面第二次推翻是因为维护成本太高指标太多导致没人愿意每月跑最后变成一份躺在共享盘里的过期表格。这两次教训让我确定了一件事能持续跑起来的粗糙模型价值远高于跑不起来的精密模型。如果让我给刚开始搭这套东西的人一句建议那就是先把「结构层 需求层」这六个指标跑通用两三个月时间验证排序结果跟实际优化效果的相关性再逐步加行为层和商业层。别一上来就追求全维度覆盖数据没准备好加进去的维度只会变成噪音。还有个小技巧值得分享每次跑完分数不妨把排名前20和最后20的页面各打印出来贴在显示器旁边看一个月。你会对「什么页面在这个站真的重要」形成非常具体的直觉这种直觉在数据缺失或者指标打架的时候比任何模型都管用。模型是给团队用的直觉是给自己用的两者都需要养。