朝花夕拾|勿忘初心 朝花夕拾|勿忘初心

白帽SEO的一些理解及搜索引擎大体的工作流程

in 安全研究 read (457) 5178汉字 站长Lucifaer 文章转载请注明来源!

这篇文章其实还没有写完(就算写完了也只能发出来这么一点),因为涉及到一些其他因素吧,只是点到为止,大体上总结了一下白帽SEO优化的目的及搜索引擎的原理。后面可能还会根据搜索引擎的原理来整理一下黑帽在其中可能利用到的点吧。

0x00 对SEO的理解

SEO所追求的是能带来盈利的流量

SEO的研究对象是搜索引擎结果页面上的自然排名部分(我们所看到的百度排名等),而这些都是SEO效果的表现之一。

0x01 搜索引擎原理

1.1 搜索引擎是什么

搜索引擎指的是由蜘蛛程序沿着链接爬行和抓取网上的大量页面,存进数据库,经过预处理,用户在搜索框输入关键词后,搜索引擎排序程序从数据库中挑选出符合搜索关键词要求的页面。指数的爬行、页面的收录及排序都是自动处理。

1.2 搜索引擎面对的挑战

1. 页面抓取需要快而全面——页面抓取

现在主流引擎都已经能在几天之内更新重要页面,权重高的网站上的新文件几小时甚至几分钟之内就会被收录。不过,这种快速收录和更新也只能局限于高权重网站。很多页面几个月不被重新抓取和更新,也是非常常见的。

搜索引擎需要解决的问题:

一些网站并不利于搜索引擎蜘蛛爬行和抓取,注入网站链接结构的缺陷、大量使用Flash、JavaScript脚本,或者把内容放在用户必须登录以后才能访问的部分,都增大了搜索引擎抓取内容的难度。

2. 大量的数据存储——抓取存储

就像标题所说的一样,一些大型网站单是一个网站就有百万千万个页面,也已想象网上所有网站的页面加起来是一个什么数据量。搜索引擎蜘蛛抓取页面后,还必须有效存储这些数据,数据结构必须合理,具备极高的扩展性,写入及访问速度要求也很高。

我们经常在搜索结果中看到,排名会没有明显原因的上下波动,甚至可能刷新一下页面,就看到不同的排名,有的时候网站数据也可能丢失。这些都可能与大规模数据存储的技术有关。

3. 索引处理快速有效,具有可扩展性——索引处理

搜索引擎将页面数据抓取和存储后,还要进行索引处理,包括链接关系的计算、正向索引、倒排索引等。由于数据库中页面数量大,进行PR之类的迭代计算也是耗时费力的。要想及时提供相关又及时的搜索结果,仅仅抓取没有用,还必须进行大量索引计算。由于随时都有新数据、新页面加入,因此索引处理也要具备很好的扩展性。

4. 查询处理快速准确

查询是普通用户唯一能看到的所有引擎工作步骤。表面简单的过程,实际上涉及非常复杂的后台处理。最重要的难题是怎样在不到一秒钟的时间内,快速从几十万、几百万,甚至几千万包含搜索词的页面中,找到最合理、最相关的1000个页面,并按照相关性、权威性排列。

5. 判断用户意图及人工智能

搜索引擎目前正在致力于基于用户搜索习惯及历史数据的了解上,判断搜索意图,返回更相关的结果。今后搜索引擎是否能达到人工智能水平,真正了解用户搜索词的意义和目的?

1.3 搜索引擎工作原理简介

1.3.1 概述

搜搜引擎的工作过程大体上可以分成三个阶段。

  • 爬行和抓取:搜索引擎蜘蛛通过跟踪链接访问网页,获得页面HTML代码存入数据库。
  • 预处理:索引程序对抓取来的页面数据进行文字提取、中文分词、索引等处理,以备排名程序调用。
  • 排名:用户输入关键词后,排名程序调用索引库数据,计算相关性,然后按一定格式生成搜索结果页面。

1.3.2 爬行和抓取

爬行和抓取是搜索引擎工作的第一步,完成数据收集的任务。

  1. spider

    爬虫访问网站页面时类似于普通用户使用的浏览器。spider发出页面访问请求,服务器返回HTML代码,spider把收到的代码存入原始页面数据库。为了提高爬行和抓取速度,都使用多个spider并发分布爬行。

    robots.txt会限制爬虫爬取的内容。

    搜索引擎的spider也有表名自己身份的代理名称,站长可以在日志文件中看到搜索引擎的特定代理名称,从而辨识搜索引擎。

  2. 跟踪链接

    为了抓取网上尽量多的页面,spider会跟踪页面上的链接,从一个页面爬到下一个页面。

    spider有两种最基础的爬行遍历算法:

    • 深度优先算法:“不到南墙不回头”——纵向的遍历
    • 广度优先算法:水平遍历

    通常两种算法都是混合使用的,这样做可以充分发挥两种算法的优势:

    • 水平获取尽量多的网站——广度优先
    • 垂直照顾到一部分网页的内页——深度优先
  3. 吸引蜘蛛

    受这几方面的影响:

    • 网站和页面权重。质量高、资格老的网站被认为权重比较高。
    • 页面更新度。spider每次爬行都会把页面数据存储起来。如果第二次爬行发现页面与第一次收录的完全一样,说明页面没有更新,spider也就没有必要经常抓取。如果页面内容经常更新,sipder就会更加频繁地访问这种页面,页面上出现的新链接,自然会被spider更快地跟踪,抓取到新页面。
    • 导入链接。无论是外部链接还是同一个网站的内部链接,要被spider抓取,就必须有导入链接进入页面,否则spider根本没有机会知道页面的存在。
    • 与首页点击距离。一般来说网站上权重最高的是首页,大部分外链是指向首页的,spider访问最频繁的也是首页。离首页点击距离越近,页面权重越高,被spider爬行的机会也越大。
  4. 地址库

    为了避免重复爬行和抓取网址,搜索引擎会建立一个地址库,记录已经被发现还没有抓取的页面,以及已经被抓取的页面。

    地址库中的URL有几个来源:

    • 人工录入的种子网站。
    • spider爬取页面后,从HTML中解析出新的链接URL,与地址库中的数据进行对比,如果是地址库中没有的网址,就存入待访问地址库。
    • 站长通过搜索引擎网页提交表格提交进来的网址。

    spider按重要性从待访问地址库中提取URL,访问并抓取页面,然后把这个URL从待访问地址库中删除,放进已访问地址库中。

    搜索引擎收录的绝大部分页面时spider自己跟踪链接得到的。可以说提交页面基本上是毫无用处的。

  5. 文件存储

    spider抓取的数据存入原始页面数据库。其中的页面数据与用户浏览器得到的HTML是完全一样的。每个URL都有一个独特的文件编号。

  6. 爬行时的复制内容检测

    检测并删除复制内容通常是在下面介绍的预处理过程中进行的,但现在的spider在爬行和抓取文件时也会进行一定程度的复制内容检测。遇到权重很低的网站上大量转载或抄袭内容时,很可能不再继续爬行。

1.3.3 预处理

预处理中最主要的步骤是“索引”。在搜索引擎蜘蛛抓取的原始页面,并不能直接用于查询排名处理。需要将原始页面中的关键词等标志性的信息索引出来,再进行排名。

  1. 提取文字

    现在的搜索引擎还是以文字内容为基础的。搜搜引擎预处理首先要做的就是从HTML文件中去除标签,提取出可以用于排名处理的网页文字内容。

    除了可见文字,搜索引擎也会提取出一些特殊的包含文字信息的代码,如Meta标签中的文字、图片替代文字、Flash文件的替代文字、链接锚文字等。

  2. 中文分词

    分词是中文搜索引擎特有的步骤。搜索引擎存储和处理页面及用户搜索都是以词为基础的。英文等语言单词与单词之间有空格分隔,搜索引擎索引程序可以直接把句子划分为单词的集合。而中文分词方法基本上有两种:

    • 基于词典匹配

      将待分析的一段汉字与词典中的词条进行匹配,若匹配成功的话,就说且分出一个单词。
    • 基于统计

      分析大量文字样本,计算出字与字相邻出现的统计概率,几个字相邻出现越多,及越可能形成一个单词。基于统计的方法的又是是对新出现的词反应更快速,也有利于消除歧义。

    搜索引擎对于页面的分词取决于词库的规模、准确性和分词算法的好坏,而不是取决于页面本身如何,所以SEO人员对分词所能做的很少。唯一能做的是在页面上用某种形式提示搜索引擎,某几个字应该被当做一个词处理,尤其是可能产生歧义的时候,比如在页面标题、h1标签及黑体中出现关键词。

  3. 去停止词

    实际上就是去除中英文中对内容没有任何影响的助词、感叹词、副词或者介词。搜索引擎在索引页面之前会去掉这些停止词,使索引数据主题更为突出,减少无谓的计算量。

  4. 消除噪声

    绝大部分页面上还有一部分内容对页面主题也没有什么贡献,比如版权声明文字、导航条、广告等。

    搜索引擎需要识别并消除这些噪声,排名时不适用噪声内容。消噪的基本方法是根据HTML标签对页面分块、重复度,区分出噪声部分。对页面进行消噪后剩下的才是页面主体内容。

  5. 去重

    去重的基本方法是对页面特征关键词计算指纹,也就是说从页面主体内容中选取最有代表性的一部分关键词(经常是出现频率最高的关键词),然后计算这些关键词的数字指纹。

    这里的关键词选取是在分词、去停止词、消噪之后。通常选取10个特征关键词就可以打到比较高的计算准确性,再选取更多词对去重准确性提高的贡献也就不大了。

    典型的指纹计算方法如MD5算法。这类指纹算法的体电视,输入(特征关键字)有任何微小的变化,都会导致计算出的指纹有很大差距。

  6. 正向索引

    经过以上步骤之后得到相应的以词为单位的内容后,接下来搜索引擎索引程序就可以提取关键词,按照分词程序划分好的词,把页面转换为一个关键词组成的集合,同时记录每一个关键词在页面上的出现频率、出现次数、格式、位置。这样每一个页面都可以记录为一串关键词集合,其中每个关键词的词频、格式、位置等权重信息也都记录在案。

    最后,每个文件都对应一个文件的ID,文件内容被表示为一串关键词的集合。实际上在搜索引擎索引库中,关键词也已经转换为关键词ID。这样的数据结构就称为正向索引。

  7. 倒排索引

    正向索引还不能直接用于排名。假设用户搜索关键词2,如果只存在正向索引,排名程序需要扫描所有索引库中的文件,找出包含关键词2的文件,再进行相关性计算。这样的计算量无法满足实时返回排名结果的要求。

    所以搜索引擎会将正向索引数据库重新构造为倒排索引,把文件对应到关键词的映射,转换为关键词到文件的映射。这样用户搜索某个关键词时,排序程序在倒排索引中定位到这个关键词,就可以马上找出所有包含这个关键词的文件。

  8. 链接关系计算

    链接关系计算也是预处理中很重要的一部分。现在所有的主流搜索引擎排名因素中都包含网页之间的链接流动信息。搜索引擎在住抓取页面内容后,必须事前计算出:页面上有哪些链接指向哪些其他页面,每个页面有哪些导入链接,链接使用了什么锚文字,这些复杂的链接指向关系形成了网站的页面的链接权重。

    Google PR值就是这种链接关系的主要体现之一。

  9. 特殊文件的处理

    除了HTML文件外,搜索引擎通常还能抓取和索引以文字为基础的多种文件类型,如PDF、WORD、WPS、XLS、PPT、TXT等。

1.3.4 排名

经过搜索引擎spider抓取页面,索引程序计算得到倒排索引后,搜索引擎就准备好可以随时处理用户搜索了。用户在搜索框填入关键词后,排名程序调用索引库数据,计算排名显示给用户,排名过程是与用户直接互动的。

  1. 搜索词处理

    搜索引擎接收到用户输入的搜索词后,需要对搜索词做一些处理,才能进入排名过程。搜索词处理包括如下几方面:

    • 中文分词。与页面索引时一样,搜索词也必须进行中文分词,将查询字符串转换为以词为基础的关键词组合。分词原理与页面分词相同。
    • 去停止词
    • 指令处理。查询词完成分词后,搜索引擎的默认处理方式是在关键词之间使用“与”逻辑。另外,用户输入的查询词还可能包含一些高级搜索命令,如加号、减号等,搜索引擎都需要做出识别和相应处理。
    • 拼写错误矫正
    • 整合搜索触发。某些搜索词会触发整合搜索。哪些词触发哪些整合搜索,也需要再搜索词处理阶段计算。
  2. 文件匹配

    搜索词经过处理后,搜索引擎得到的是以词为基础的关键词集合。文件匹配阶段就是找出含有所有关键词的文件。在索引部分提到的倒排索引使得文件匹配能够快速完成。

  3. 初始子集的选择

    找到包含所有关键词的匹配文件后,还不能进行相关性计算,因为找到的文件会有很多。要对这么多文件实时进行相关性计算,需要的时间还是非常长的。

    我们都知道实际上用户并不需要知道所有匹配的页面,所以搜索引擎只需要计算前n个结果的相关性,就能满足。

    但是在没有计算相关性时,搜索引擎怎么知道哪一千个文件是最相关的?所以用于最后相关性计算的初始页面子集的选择,必须依靠其他特征而不是相关性,其中最主要的就是页面权重。由于所有匹配文件都已经具备了最基本的相关性(这些文件中所包含的所有查询关键词),搜索引擎通常会用非相关性的页面特征选出一个初始子集。初始子集的数目并不清楚,不过可以肯定的是,当匹配页面数目巨大时,搜索引擎不会对这么多页面进行计算,而必须选出页面权重较高的一个子集,再对子集中的页面进行相关性计算。

  4. 相关性计算

    选出初始子集后,对子集中的页面计算关键词相关性。计算相关性是排名过程中最重要的一步。相关性计算是搜索引擎算法中最令SEO感兴趣的部分。

    影响相关性的主要因素包括下面几个方面:

    • 关键词常用度。经过分词后的多个关键词,对整个搜索字符串的意义贡献并不相同。越常用的词对搜索词的意义贡献越小,越不常用的词对搜索词的意义贡献越大。可以理解为不常用的词加权系数高,常用词加权系数低。
    • 词频及密度。一般认为在没有关键词堆积的情况下,搜索词在页面中出现次数多,密度越高,说明页面与搜索词越相关。但是随着搜索引擎的发展,出现频率及密度只是因素的一部分,而且重要程度越来越低。
    • 关键词位置及形式。页面关键词出现的格式和位置都被记录在索引库中。关键词出现在比较重要的位置,如标题标签、黑体、H1等,说明页面与关键词越相关。这一部分就是页面SEO所要解决的。
    • 关键词距离。(影响比较小)
    • 链接分析及页面权重。除了页面本身的因素,页面之间的链接和权重关系也影响关键词的相关性,其中最重要的就是锚文字。页面有越多以搜索词为锚文字的导入链接,说明页面的相关性越强。
  5. 排名过滤及调整

    选出匹配文件子集、计算相关性后,大体排名就已经确定了。之后搜索引擎可能还有一些过滤算法,对排名进行轻微调整,其中最主要的过滤就是施加惩罚。一些有作弊嫌疑的页面,虽然按照正常的权重和相关性计算排到前面,但搜索引擎的惩罚算法却可能在最后一步把这些页面调到后面去。

  6. 排名显示

    排名确定后,排名程序调用原始页面的标题标签、说明标签、快照日期等数据显示在页面上。

  7. 搜索缓存

    用户搜索的关键词有很大一部分是重复的。按照2/8定律,20%的搜索词占到了总搜索次数的80%。按照长尾理论,最常见的搜索词没有占到80%那么多,但通常也有一个比较粗大的头部,很少一部分搜索词站到了所有搜索次数的很大一部分。

    如果每次搜索都重新处理排名,可以说是很大的浪费。搜索引擎会把最常见的搜索词存入缓存,用户搜索时直接从缓存中调用,而不必经过文件匹配和相关性计算,大大提高了排名效率,缩短了搜索反应时间。

  8. 查询及点击日志

    搜索用户的IP地址、搜索的关键词、搜索时间,以及点击了哪些结果页面,搜索引擎都记录形成日志。这些日志文件中的数据对搜索引擎判断搜索结果质量、调整搜索算法、预期搜索趋势等都有重要意义。

seo
最后由Lucifaer修改于2017-07-31 09:15

此处评论已关闭

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
PREVIOUS NEXT
雷姆
拉姆