SEO入门,如何提高关键词排名详解(二)
seo深入解析
上一篇文章我们讲解了seo的元素标签的影响与如何规划网页的布局以提高关键词排名,现在我们来聊一聊百度的核心算法pageRank
pageRank算法
谷歌长期以来一直是世界上最成功的互联网搜索引擎,但目前的搜索引擎巨无霸并不是最早的互联网搜索引擎。在谷歌出现之前,有许多通用或
专用搜索引擎。谷歌最终击败了所有竞争对手,主要是因为它解决了困扰其前身的最大问题:按重要性对搜索结果进行排名。解决这个问题的算法
是pagerank。毫不夸张地说,pagerank算法使谷歌今天处于低位。为了理解为什么解决这个难题如此重要,让我们看看搜索引擎
的核心框架。
搜索引擎的核心框架
虽然搜素引擎发展了很多年,但是他们的核心算法并没有太大的变化。本质上,搜素引擎是一个数据检索系统。一般是搜素引擎爬虫采集网页的内容并存储进数据库。用户提交检索的条件(如关键词),搜素引擎返回满足查询条件的数据列表。理论上,检索调价可能非常负责。简单起见,我们将检索条件设置为1到多个由空格分割的单词,并且检索条件表示的是同时包含这些单词的数据。
事实上,搜索引擎都有分词的机制。(例如市面上的jieba分词)假如输入"小明的博客"作为搜索关键词,搜索引擎会将其分解为三个单词[ "小明", "的","博客" ],而 "的" 作为停顿无意义词(stopword)被过滤掉。分词和单词权重评估算法(TF-IDF算法,textrank算法等)做出分析。
这样,建立搜索引擎变成了简单的:1.建立数据库,2.建立一个数据结构,根据关键词找到包含单词的页面。
如何建立数据库
通常是通过一个名为spider的特殊程序实现的(当然,专门的领域搜索引擎,如学术会议的论文检索系统,可以直接从数据库中构建数据
库)。简而言之,蜘蛛从一个页面(例如新浪的主页)开始,通过http协议通信获得该页面的所有内容。记录此页面的网址和内容(记录在数据
库中),然后分析页面中的链接,然后分别获得这些链接链到页面的内容。在数据库中记录后,分析该页面的链接…重复这个过程,整个互联网的所有页面都可以获得
(当然,这是一个理想的情况。要求整个网络是强
连接的,并且所有页面的机器人协议允许爬行器爬行页面。为了简单起见,我们仍然假设网络是一个强连通图,不考虑机器人协议。如果你看看
,你可以把数据库看作一个巨大的键值结构,其中键值是页面的网址,值是页面的内容。
如何建立数据结构
第二个问题是通过称为倒排索引(倒排
索引)的数据结构实现的。抽象地说,倒排索引也是一组键值结构。关键字是一个关键字,值是一组页码(假设数据库
中的每一页都有一个唯一的数字),表示这些页包含该关键字。本文将不详细讨论倒排索引的建立方法。
通过以上分析,我们可以简单解释搜索引擎的核心动作:搜索引擎获得“小明·
博客”的查询标准,并将其分为两个词:“小明”和“博客”。然后,假设{1,3,6,8,11,
15},分别从倒排索引中找到对应于“小明”的集合;相应的“博客”集是{1,6,10,11,12,17,20,
22},两个集的交集导致{1,6,
11}。最后,从数据库中找到对应于1、6和11的页面并将其返回给用户就足够了。
搜索引擎的核心挑战
以上描述了一个非常简单的搜索引擎工作框架。尽管现代搜索引擎的详细原理要复杂得多,但它们的本质与这个简单的模型没有什么不同。事实上,谷歌在上述两点上并不比它的前辈好。它最大的成功是解决了第三个也是最困难的问题:如何对查询结果进行排序。
我们知道网页的数量非常大,所以搜索结果项的数量也非常大。例如,上面的“小明·
博客”搜索返回了260多万个结果。用户不可能从如此多的结果中找到有用的信息,所以一个好的搜索引擎必须找到方法把“高质量”的
页面放在前面。事实上,直觉上,我们也能感觉到,当使用搜索引擎时,我们不太关心页面是否满了(数百万个结果,有什么区别?事实上,搜索引擎都占据首位,
并没有真正返回所有结果。),并且非常关心前一页或两页的质量是否更高,是否能够满足我们的实际需要。
因此,根据搜索结果的重要性对搜索结果进行合理排序成为搜索引擎的最大核心,也是谷歌最终成功的突破点。
早期搜索引擎的实践
无评估
这可能看起来有点可笑,但事实上,许多早期的搜索引擎(甚至今天许多专业领域的搜索引擎)根本没有评估结果的重要性,而是直接以自然顺序(如时间顺序
或编号顺序)返回结果。即使结果集相对较小,这也是有意义的,但是一旦结果集变大,用户就会不停地抱怨。想想看,让你从成千上万个质量参差不齐的页面中找到你需要的东西,
简直就是一场灾难,这也注定了这种方法对于现代通用搜索引擎来说是不可能的。
基于搜索词的评估
后来,一些搜索引擎引入了基于搜索关键词评估搜索结构重要性的方法。事实上,tf-idf算法等方法仍在现代搜索引擎中使用,但它们不再是评估质量的唯一指标。完全描述tf-idf是相当乏味的。这里,使用一个更简单的抽象模型来描述这种方法。
基于搜索项评估的想法非常简单:与搜索项的匹配度越高,页面的重要性就越高。“匹配度”是要定义的具体度量。最直接的想法之一是关键词出现得越多,页面匹配
的程度就越高。这也是搜索“小明博客”的一个例子:假设第一页有“小明”5次,“博客”10次;“张洋”在第二页出现两次,“博客”出现八次。因此,A页的匹配度为5 +
10 = 15,B页的匹配度为2+8 =
10。因此,人们认为网页的重要性高于网页的重要性。许多朋友可能意识到这里的不合理性:内容较长的页面比内容较短的页面更有可能有更多的关键词。因此,我们
可以通过将关键词出现的次数除以页面上的总字数,即通过使用关键词比例作为匹配度来修改算法,从而克服上述不合理性。
一些早期的搜索引擎确实基于类似的算法评估了网页的重要性。这种评估算法似乎是有根据的,并且易于实现,但是它非常容易受到称为“术语垃圾邮件”的攻击。
术语垃圾邮件
事实上,自从搜索引擎出现的那天起,垃圾邮件发送者和搜索引擎就从未停止过与作弊的斗争。垃圾邮件发送者(Spammer)是一群试图通过搜索引擎算法中的漏洞来提高目标页面(通常是一些广告页面或垃圾页面)的重要性,从而使目标页面在搜索结果中排名靠前的人。
现在让我们假设谷歌只使用关键词比率来评估页面的重要性,我希望我的博客在搜索结果中排名更高(最好是第一)。然后我可以这样做:在页面中添加一个隐藏的
隐藏的html元素(比如一个div),然后重复内容“小明”10,000次。这样,当搜索引擎计算“小明·
博客”的搜索结果时,我的博客关键词占很大比例,从而达到排名靠前的效果。此外,我甚至可以干扰其他关键字的搜索结果。例如,我知道欧洲杯非常受
欢迎,我在博客的隐藏部分增加了10,000个“欧洲杯”。当用户搜索欧洲杯时,我的博客将出现在搜索结果的顶部。这种行为被称为“
垃圾邮件”。
早期的搜索引擎深受这种作弊方法的困扰,基于关键词的评价算法本身也不是很合理,所以经常会发现很多低质量的结果,这大大降低了用户体验。正是在这种背景下,
谷歌提出了pagerank算法并申请专利保护。此举充分保护了当时相对较弱的谷歌,也使谷歌成为
的领先搜索引擎。
pagerank算法
如上所述,pagerank用于评估网页的重要性,作为对搜索结果进行排名的重要基础之一。事实上,为了抵御垃圾邮件,每个搜索引擎的具体排名算法
都是保密的,pagerank的具体计算方法也不同。本节介绍基于页面链接属性的最简单的pagerank算法。虽然这个算法很简单,但它可以揭示
pagerank的本质。事实上,链接属性确实是主要搜索引擎计算pagerank的重要指标之一。
简单pagerank计算
PageRank算法是一种网页排名算法,其基本思想有两条:
1)链接数量。一个网页被越多的其他网页链接,说明这个网页越重要。
2)链接质量。一个网页被一个越高权值的网页链接,也能表明这个网页越重要。
基于上述思想,一个网页的PageRank值计算公式为式
S(Vi) = ∑j∈In(Vi)(|Out(Vj)| / 1 * S(Vj))
In(Vi)为Vi的入链集合,同理,Out(Vj)为Vj的出链集合,|Out(Vj)|则是出链的 数量。因为每个网页要将它自身的分数平均地贡献给每个出链,则|Out(Vj)| / 1 * S(Vj) 为vj贡献给vi的分数。将vi的所有入链贡献给他的分数全部加起来,就是vi自身的得分。
当然,以这种方式来计算每个网页的分数就会有一个问题:每个网页的得分都与其 链接网页的分数有关,那么其链接网页的分数又该怎么确定呢?为了解决这个问 题,算法开始时会将所有网页的得分初始化为1,然后通过多次迭代来对每个网页的 分数进行收敛。收敛时的得分就是网页的最终得分。若不能收敛,也可以通过设定 最大迭代次数来对计算进行控制,计算停止时的分数就是网页的得分。
处理死胡同
上面的pagerank计算方法假设网络是强连接的,但是实际上,网络不是强连接的(甚至不是连接的)。让我们看看pagerank是如何处理一个叫做死胡同的案件的。
死角是没有外部链的节点。它是一个死的
末端。上述算法能够收敛到非零值的原因在很大程度上取决于转移矩阵的性质:每列之和为1。在这个图中,m的第四列都是0。在没有死
结束的情况下,向量v的项的总和在每次迭代后总是保持为1,而在死
结束的情况下,迭代结果最终将返回到零(为了解释为什么是这种情况,需要一些矩阵理论的知识,这是相当无聊的,在此省略)。
处理死端的方法如下:迭代移除图中的死端节点和与死端节点相关的边(迭代移除的原因是在移除当前死
端之后,可能会出现一批新的死端,直到图中没有死端为止。为其余部分计算秩,然后以相反的顺序将死端的秩推回,并移除死
端。
以上述数字为例。首先得到与D和D相关的边。得到D后,C变成一个新的死
endis。然后去掉C,最后只剩下A和B。此时,很容易计算出a和b的pagerank是1/2。然后我们需要颠倒死亡
的等级。最后删除的是C,我们可以看到C之前的节点有A和B,A和B的度数分别是3和2,所以C的秩是1/2 * 1/3+1/2
- 1/2 = 5/12;最后,d的等级是:1/2 * 1/3+5/12 * 1 = 7/12。所以最后一页是(1/2,
1/2,5/12,7/12)。
蜘蛛陷阱和平滑
可以预测,如果真正的网络被组织成一个转移矩阵,它将是一个极其稀疏的矩阵。从矩阵理论知识可以推断,极稀疏的转移矩阵迭代乘法可能会使向量V非
经常不平滑,即一些节点具有大的秩,而大多数节点具有接近于0的秩值。一个叫做蜘蛛陷阱的节点的存在加剧了这种不均匀性。
主题敏感的pagerank
事实上,上述讨论回避了这样一个事实,即“网页的重要性”没有标准答案,不同用户之间甚至有很大的差异。例如,当搜索“苹果”时,数字发烧友
可能想要看到iphone信息,果农可能想要看到苹果的价格趋势和种植技巧,而孩子可能正在寻找苹果的棒状图。理想情况下,应为每个用户维护一组
专用向量,但这种方法显然不适用于大量用户。因此,搜索引擎通常会选择一种叫做主题敏感的折衷方案。话题-
敏感的
pagerank的方法是预定义几个话题类别,如体育、娱乐、科技等。,分别为每个主题维护一个向量,然后找到一种方法来关联用户的主题倾向,并根据用户的主题将
倾斜到排名结果。
主题敏感页面排序分为以下步骤:
1. 确定主题分类
一般来说,您可以将开放式
目录(dmoz)的一级主题类别称为主题。目前,dmoz的顶级主题包括艺术、商业、计算机、游戏、健康、家庭、儿童和儿童、新闻、娱乐、参考、区域、科学
技术、购物、社会、体育。
2. 网页主题归属
这一步要求将每一页分类到最合适的类别。有许多特定分类的算法。例如,tf-idf可以用于基于语素的分类,或者可以在聚类后执行手动分类,并且特定的分类将不会扩展。这一步的最终结果是每个网页被分成一个主题。
3. 确定用户的主题倾向
在提交搜索时确定用户的主题倾向,以便选择合适的排名向量。有两种主要方法。一种是列出所有主题,供用户选择感兴趣的
项目。这种方法经常在一些社交问答网站上使用。另一种方法是通过某种方式(如cookie跟踪)跟踪用户的行为,并进行数据分析来判断用户的倾向。这个
也是一个非常有趣的话题。这个主题超出了本文的范围,不会详细讨论。
针对pagerank 的垃圾邮件攻击和反作弊
如上所述,垃圾邮件发送者和搜索引擎反作弊工程师之间的斗争从未停止过。事实上,只要是算法,就一定有垃圾邮件方法,也没有无懈可击的排名算法。让我们看看pagerank的垃圾邮件。
链接垃圾邮件
回到文章开头的例子,如果我希望我的博客在搜索“张洋博客”时排名靠前,那么在pagerank算法下使用术语
垃圾邮件显然是不可能实现的。但是,由于我知道pagerank主要依赖于内部链接的数量来计算页面权重,我可以考虑建立很多链接到我的博客主页
的空网站,从而提高我的博客主页的pagerank吗?不幸的是,这种方法不起作用。看看pagerank算法,一个页面会将权重平均分配给链接的网站,
所以除了内部链接的数量之外,上游页面的权重也非常重要。然而,我赤裸上身的网站本身没有重量,所以它们的内部链不能提高我博客主页的页面排名。这个
样本只是为了自我娱乐。
因此,垃圾网页排名的关键是想办法添加一些高权重网页的内部链。让我们看看垃圾邮件链接的作用。
首先,页面被清楚地分为几种类型:
1. 目标页面
目标页面是垃圾邮件发送者想要提高排名的页面,这是我博客的第一页。
2. 支持页面
支持页面是垃圾邮件发送者可以完全控制的页面,例如垃圾邮件发送者自己创建的站点中的页面。这就是我上面所说的空书架页。
3. 无障碍网页
可访问页面是垃圾邮件发送者无法完全控制的页面,但垃圾邮件发送者可以通过界面发布链接,例如天涯社区、新浪博客和用户可以发布的其他社区或博客站点。
4. 无法访问的页面
这些是垃圾邮件发送者根本无法发布链接的网站,如政府网站、百度主页等。
作为垃圾邮件发送者,我可以使用的资源是支持页面和可访问页面。如上所述,没有办法仅仅通过支持页面来发送垃圾邮件,所以我想做的第一件事是尝试找到一些
排名较高的可访问页面,并在我的博客首页添加一个链接。例如,我可以去天涯、茅埔等地回复这样的帖子:“主持人的帖子很好!亮点:seo教程网站https://juejin.im/post/5e13fe775188253aad5c7a5b”。我认为每个人都不能在主要社区看到这样的帖子。这是有人在做垃圾邮件。
然后,通过将每个支持页面与目标页面互锁,在大量支持页面中扩大排名,每个支持页面只有一个链接。
链接垃圾邮件反作弊
搜索引擎的反作弊工程师需要找到检测垃圾邮件发送者的链接垃圾邮件行为的方法。一般来说,检测链接垃圾邮件有两种方法。
网络拓扑分析
一种方法是通过分析网页的图形拓扑来找出可能的垃圾邮件场。然而,随着网络规模的不断扩大,这种方法非常困难,因为图的特定结构搜索是一种时间复杂度很高的算法,不可能完全依靠这种方法来对抗作弊。
trustrank
一种更有可能的反作弊方法叫做信任等级法。
事实上,trustrank的数学本质上是主题敏感的
等级,除了这里定义的“可信网页”虚拟主题。所谓的可信网页就是上面提到的无法到达的网页,或者不能是垃圾邮件的网页。例如,政府网站(被黑客攻击的[/h/)不算)、新浪、网易门户主页等。一般来说,一个“可信网页”集合是通过人工或其他方式选择形成一个主题,然后通过上面的主题-
敏感算法对该主题进行排名计算,结果称为信任排名(trustrank)。
trustrank的想法非常直观:如果一个页面的正常排名比一个可信页面的主题排名高得多,那么该页面很可能是垃圾邮件。
如果页面的正常等级为p,信任等级为t,则定义页面的垃圾邮件量为:(p–t)/p。
垃圾邮件数量越大,此页面越有可能成为垃圾邮件目标页面。