本文由 莫潇羽@源码七号站(www.fuyuan7.com)撰写,转载请注明出处。
快速摘要
搜索引擎的链接评估从未跳出三大经典框架——PageRank 看链接图的全局重要性,HITS 看「枢纽—权威」的双向印证,Hilltop 看主题领域里的「专家投票」。这三套算法不是历史名词,而是 Google 和 Bing 当下排名体系的底层骨架。
2024 年 5 月那次震动整个 SEO 圈的 Google 内部文档外泄,清清楚楚地列出了 RawPageRank、PageRank2、PageRank_NS、FirstCoveragePageRank 等多个 PageRank 变体仍在线上运行;Google Director Elizabeth Tucker 在 2025 年也明确把 PageRank 称为「Google 经典排名信号之一,最贴近权威性」。HITS 的「枢纽—权威」思想活在内链规划与支柱页面里;Hilltop 的「专家文档」概念则演化为 E-E-A-T 中「专题权威」的判定逻辑。
Bing 那边的口味有点不一样:更看重域名年龄、.edu/.gov 后缀、精确锚文本、社交信号。同一个网站要在 Google 和 Bing 两边都吃到自然流量,就得明白这三套算法的精神在两个引擎里被翻译成了不同的偏好。
这篇长文会把原理、公式、随机游走、阻尼系数、专家集合、双分数迭代,以及对应到内链规划、外链获取、内容建设、网站架构的实操办法,挨个讲清楚。想看完整拆解,往下翻。
一、链接为什么是搜索引擎的命门
要把这三个算法看明白,得先回到一个最朴素的问题:搜索引擎到底在为什么排序而焦虑?
互联网的本质是一张超文本网络。早期搜索引擎的做法很笨,把网页内容抓回来,做个倒排索引,谁的关键词密度高、谁的标题里包含查询词,就把谁排在前面。这种纯文本匹配的玩法,在网页数量没几万的时候还能凑合,但很快就崩了。因为只要懂一点 HTML 的人都能往页面里堆砌关键词,把无关页面伪装成相关页面——这就是搜索引擎史上最早的「关键词作弊时代」。
我自己刚开始研究搜索原理的时候,最大的困惑就是:既然内容可以被作者任意控制,那搜索引擎凭什么相信任何一段文字是真实有价值的?答案后来想通了:不能只听一个人说什么,要看其他人怎么评价他。
这就是「链接」被发现的意义。一个网页指向另一个网页的超链接,本质上是一次「公开背书」。如果 A 站愿意把自己的访客往 B 站引导,意味着 A 站站长在某种程度上认可 B 站这一页的价值。这种「外部背书」是难以伪造的——你可以在自己的页面里写一万次「我是世界第一」,但你没法逼别人在他们的页面里也这样推荐你。
斯坦福那两个研究生,Larry Page 和 Sergey Brin,在 1996 年前后正是因为看穿了这层关系,才有了 PageRank 的思想原型。差不多同一时间,康奈尔大学的 Jon Kleinberg 在 IBM Almaden 研究所做访问学者的时候,提出了 HITS 算法。再加上 1999 到 2000 年期间在加州的 Krishna Bharat 提出了 Hilltop。这三个算法是搜索引擎链接分析时代的三大支柱,它们的提出时间几乎踩在同一个三年窗口里,这不是巧合,而是当时整个学术圈对「如何用图结构给海量文档排序」这个问题集中爆发的回应。
1.1 链接的三种属性
在往下走之前,把「链接」这个东西的属性摆清楚,后面看算法才不会绕。任何一条超链接至少携带了三种信息:
- 结构信息:谁指向谁,形成有向图。
- 文本信息:锚文本本身就是源页面对目标页面的「标签描述」。
- 上下文信息:链接所处段落、所在主题、所在站点的整体调性。
PageRank 主要吃的是结构信息,几乎不看主题。HITS 在结构信息基础上引入了角色区分(枢纽 vs 权威)。Hilltop 则把主题与锚文本的相关性直接嵌进了筛选机制。三种算法本质上是从三个不同维度去解读同一张链接图——这是后面所有比较的起点。
1.2 为什么链接信号在 AI 时代仍然没死
很多人以为大模型时代了,谁还看链接。这是天大的误解。Google 2024 年那批被外泄的内部文档里,关于链接的字段密密麻麻:siteAuthority、anchorMismatchDemotion、linkScore、homePageInfo,各种维度都在用。Bing 那边更直白,微软在公开的 Webmaster Guidelines 里就明说:「the number, quality, and relevance of links pointing to your pages will continue to be a strong signal」。
为什么?因为大模型本身也需要一个「可信源排序」机制,才能决定引用谁。而当下最成熟、最难作弊的可信源排序逻辑,恰恰还是基于链接图的那一套。链接不再是唯一信号,但它依然是「最难伪造的群体共识表达」。这个底层属性,在 AI 时代反而更稀缺。
我做站这么些年的体会是:文本可以被 AI 批量生成,流量数据可以被刷,但要让一堆真实存在的、互不相干的高质量站点同时主动指向你,这个事 AI 没法替你完成。链接的稀缺性反而被强化了。
二、PageRank:链接图的奠基性算法
PageRank 是这三个算法里名气最大的,也是被误解最深的。市面上大量博客把它描述成「数链接数量」,这是非常表层的理解。真正想用好 PageRank 的思想,得搞懂它的三个核心要素:随机游走模型、迭代收敛、阻尼系数。
2.1 PageRank 的核心思想:随机游走
设想这样一个场景:互联网上有个虚拟的「随机冲浪者」,他打开一个页面,然后在这个页面上的链接里随便点一个跳走,到了新页面再随便点一个,如此往复。经过足够长的时间之后,这个冲浪者出现在某个页面上的概率,就是这个页面的 PageRank 值。
这个模型的精妙之处在于:它把「网页的重要性」直接定义成了一个概率分布。概率高的页面,意味着无论你从哪里开始游走,最终都更容易落到它上面——这恰恰对应了我们直觉上的「重要」二字。
但这里有两个工程上的坑必须填:
- 死胡同:有些页面没有任何出链,冲浪者走到这里就卡死了。
- 小圈子:有几个页面互相链接,但不指向外面,冲浪者一旦进入就出不来,整个游走概率会被这个小圈子吸干。
为了解决这两个问题,Page 和 Brin 引入了一个工程化的修正:阻尼系数(damping factor)。
2.2 阻尼系数与 PageRank 的标准公式
阻尼系数通常记作 d,经典取值是 0.85。它的意义是:冲浪者在每一步,有 85% 的概率沿着当前页面的链接跳走,有 15% 的概率「腻了」,直接跳到全网随机一个页面重新开始。这个「腻了就随机跳」的机制叫 teleportation,它保证了整张图永远是连通的,游走永远不会卡死。
加入阻尼系数后,PageRank 的递推公式长这样:
PR(p) = (1 - d) / N + d * Σ [ PR(i) / OutLinks(i) ]
参数解释:
- PR(p):页面 p 的 PageRank 值。
- d:阻尼系数,经典取 0.85。
- N:全网页面总数。
- i:所有指向页面 p 的源页面。
- OutLinks(i):源页面 i 的总出链数量。
- Σ:对所有指向 p 的源页面求和。
这个公式的核心要义可以翻译成大白话:一个页面的重要性,等于所有指向它的页面的重要性,按这些源页面的出链数量平均分配后,再加上一个固定的"基础保底分"。出链多的源页面,每条链分到的权重就小;出链少的源页面,每条链都金贵。
2.3 迭代计算:为什么它能收敛
PageRank 是一个递归定义——要算 A 的分数得知道 B 的分数,而 B 的分数又依赖于 C、D、E……怎么解?
答案是迭代。给每个页面赋一个初始值(通常是 1/N),然后用上面的公式算一轮新值,再用新值算下一轮,反复迭代。数学上可以证明,只要图是强连通的(阻尼系数刚好保证了这一点),这个迭代过程一定会收敛到一个唯一的稳定分布。这个稳定分布就是最终的 PageRank。
实际工程中,Google 早期的实现差不多迭代 50 到 100 轮就能拿到一个足够稳定的解。换算到现在的全网规模,这个计算量大得吓人——这也是为什么 Google 早期投入了那么多基础设施去做分布式图计算。
下面这段伪代码可以更直观地表达迭代过程,新手对照着看就懂了:
def pagerank(graph, d=0.85, max_iter=100, tol=1e-6):
N = len(graph.nodes)
PR = {node: 1.0 / N for node in graph.nodes} # 初始化
for iteration in range(max_iter):
new_PR = {}
for node in graph.nodes:
# 基础保底分
rank_sum = (1 - d) / N
# 来自所有入链的贡献
for source in graph.in_neighbors(node):
out_count = len(graph.out_neighbors(source))
if out_count > 0:
rank_sum += d * PR[source] / out_count
new_PR[node] = rank_sum
# 判断是否收敛
delta = sum(abs(new_PR[n] - PR[n]) for n in graph.nodes)
PR = new_PR
if delta < tol:
break
return PR
这段代码不是给你拷贝去跑生产环境的,但它把 PageRank 的本质骨架交代得很清楚——一个不停传递权重的迭代过程,直到全网每个页面的得分稳定下来。
2.4 阻尼系数为什么是 0.85
很多人对 0.85 这个数字有种神秘崇拜,觉得是天书。其实它就是 Page 和 Brin 在原始论文里做实验定的一个经验值。后来有不少学术研究讨论过这个值的合理性——有人提出 0.7 在某些场景下更合理,因为当下用户更容易「跳出」一条阅读路径;有人觉得 0.9 更适合学术引用网络。但对于通用网页排序,0.85 至今仍然是工业界的事实标准。
阻尼系数小,意味着 teleportation 的成分大,结果会更倾向于把权重均匀地分给所有结点,链接图结构的影响被稀释。阻尼系数大,意味着冲浪者更愿意一路顺着链接走,结果会更突出那些处于链接图核心位置的「权威结点」。0.85 是这两种倾向的折中。
记住这层物理意义,后面你看待自己网站的内链结构就会多一个视角:你站内每个页面的「冲浪者跳出概率」越低(也就是出链质量越高、相关性越强),网站的 PageRank 越容易在内部高效流动。
2.5 PageRank 在 Google 内部的多个变体
很多人以为 Google 早就把 PageRank 扔了。这是被「绿条消失」误导得最深的一群人。2016 年 Google 公开关掉了工具条上显示的 PageRank 数字,大量 SEO 从业者就此宣布「PageRank 已死」。
事实根本不是这样。
2024 年 5 月,Google 内部一份本来应该保密的 Content API Warehouse 文档意外公开,SEO 圈炸了锅——里面赫然列着多个 PageRank 的变体字段:
|
字段名 |
解释 |
|
RawPageRank |
原始 PageRank 计算结果 |
|
PageRank2 |
PageRank 的第二代变体 |
|
PageRank_NS |
Nearest Seed PageRank,基于种子结点的变体 |
|
FirstCoveragePageRank |
首次发现页面时的 PageRank 快照 |
|
PageRank0 |
基础版本 |
|
ToolbarPageRank |
那个被「废弃」的工具条 PageRank 居然还活着 |
这意味着 Google 内部至少同时跑着 5 到 6 个不同口径的 PageRank,分别服务于不同子任务:有的用于初步抓取调度,有的用于规范化(canonical)选择,有的用于种子信任评估。所谓「PageRank 已死」就是个误读——它只是不向公众显示了,但底层还在不停转。
更有意思的是,2025 年 Google 产品管理总监 Elizabeth Tucker 在公开场合点名说:「PageRank 是 Google 的经典排名信号之一,最贴近权威性这个维度」。能把这种话从内部讲出来,说明它在排名体系里的份量从未真正下降过。
2.6 reasonable surfer:PageRank 的进化版
原始 PageRank 有一个被诟病已久的缺陷:它假设冲浪者在当前页面上的所有链接里等概率随机点一个。但真实世界根本不是这样——人会更倾向点正文里的链接,而不是页脚的版权链接;会更愿意点醒目的导航,而不是被隐藏在角落里的次级链接。
为了修正这一点,Google 在 2004 年申请了一项专利,把它叫做 Reasonable Surfer Model(合理冲浪者模型)。这个模型在原始 PageRank 的基础上,给不同位置、不同形式、不同语境下的链接赋予了不同的「被点击概率」。
下面这张表是我自己整理的一些经验性的概率倾向,不是 Google 官方给出的数值,但能帮你理解模型的精神:
|
链接位置 |
相对点击概率 |
传递的 PageRank 权重 |
|
正文首段内的上下文链接 |
高 |
高 |
|
正文中后段嵌入的链接 |
中等偏高 |
中等偏高 |
|
侧边栏推荐链接 |
中等 |
中等 |
|
文末「相关阅读」列表 |
中等偏低 |
中等偏低 |
|
页脚的网站地图、版权链接 |
低 |
低 |
|
被 nofollow 标记的链接 |
仅作弱提示 |
几乎为零 |
这就是为什么同样是 DA 80 的网站给你一条链接,放在正文段落里和放在页脚版权链接里,价值能差出几十倍。你做外链建设的时候,如果不看链接出现的具体位置就只看「链接数量」或「域名权重」,等于把 reasonable surfer 这个进化层完全无视了。
莫潇羽@源码七号站 自己操作过的多个站点都验证过这一点:从同一个高权重站点拿到两条链接,一条嵌在正文长段落里,一条挂在页脚资源列表里,几个月后通过实验工具回测,前者对目标页排名的拉动效果至少是后者的 5 倍以上。这就是 reasonable surfer 在背后干活的结果。
2.7 站内 PageRank 流动:被严重低估的内部资产
P