写在文章前面:
前段时间接到一个企业官网站内优化的任务。为了完成它,只能赶鸭子上架,从零开始系统地去学习 SEO 知识。经过几天的学习后,也算是入了门。才意识到 SEO 它的意义与重要性,觉得 SEO 对于做个人站点(博客也算是个人站点)的意义与重要性不言而喻。可能有人会反驳在如今自媒体、微信公众号及知乎、掘金、sf等各种垂直网站盛行的年代,再去研究 SEO,对博客做 SEO 是否有必要。我的看法是,如果你想长期坚持维护自己的博客,那么学习必要的 SEO 知识的收益是一件半衰期很长的事情,是一件坚持就会事半功倍的事情。

因为你只需花费不多的精力对博客进行站内优化,然后保持一定的文章更新频率(如果有需要的话,还可以进行站外优化)。就能提高你的博客在搜索引擎排名,为自己的博客带来更多的访问量。无论你是想提高知名度还是想让你的文章能够帮助到更多的人,访问量多了才能到达你的目的。

接下来的内容完全是一个 SEO 初学者的学习总结,如果 SEO 大神看到,请轻喷,还望指出不足之处。

搜索引擎

可能有些人还不了解什么是 SEO。所谓 SEO 指 Search Engine Optimization(搜索引擎优化)。通过对网站进行优化,来提高网站在搜索引擎中的排名,为网站带来更多的访问。
在介绍 SEO 优化要素及技巧之前,我们需要先对搜索引擎的工作原理有个了解。才能更好的理解 SEO 具体操作的意义。

基本原理简介

搜索引擎过程非常复杂,我们这里只能以最简单的流程来介绍搜索引擎是怎么实现网页排名的。
搜索引擎的工作过程大体可以分为三个阶段:

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

第一步:爬行和抓取

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

spider

搜索引擎用来爬行和抓取页面的程序叫做也就是我们熟知的蜘蛛(spider),也称为机器人(bot)。spider访问网站页面类似于普通用户使用的浏览器。spider 发出页面访问请求后,服务器返回 HTML 代码,spider 把收到的程序存入原始页面数据库。为了提高爬行和抓取速度,搜索引擎通常或多个spider并行爬行。

spider 访问任何一个网站时,都会先访问该网站根目录下的 rotbots.txt 文件。该文件可以告诉 spider 哪些文件或目录可以抓取或者禁止抓取。
和不同的浏览器 UA 不同一样,不同厂商的 spider 也带有特定代理的名称。

跟踪链接

为了抓取网上尽可能多的页面,spider 会跟踪网页上的链接,从一个页面爬到下一个页面,就好像蜘蛛在蜘蛛网上爬行一样。
爬行遍历有两种策略:

  • 深度优先:spider 沿着页面的链接一直爬取,直到该页面没有其他链接为止
  • 广度优先:spider 在一个页面发现多个链接,先把这页面的所有第一层链接都遍历完,再继续第二层链接遍历

程序猿肯定对这两个遍历算法很熟悉啦。
理论上无论是深度优先还是广度优先,只要给 spider 足够的时间,总是能把互联网上所有的页面链接都爬取完。但实际情况并不是这样,由于各种资源的限制,搜索引擎也只是爬行和收录互联网的一部分。

所以通常 spider 都是深度优先和广度优先混合使用

吸引蜘蛛

通过上面的介绍可以知道,spider 不可能将所有的页面都收录,因此 SEO 就是要通过各种手段,吸引 spider 爬行收录自己网站更多的页面。既然不能所有页面都收录,那么 spider 肯定是尽量抓取重要页面。那么 spider 是如何判断哪些页面重要?有几个影响因素:

  • 网站和页面权重。质量高,资格老的网站权重高。
  • 页面更新度。更新频率高的网站权重高。
  • 导入的链接。无论是外部链接还是内部链接,要被 spider 抓取,就必须要有导入链接进入页面。高质量的导入链接也经常使页面上的导出链接被爬行深度增加。
  • 与首页的点击距离。一般来说,网站最高的权重就是首页,大部分外链都是指向首页,spider 访问最频繁的也是首页。所以离首页越近的页面,权重也相对更高,被 spider 爬行的机会也越大。
地址库

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

  • 人工录入的种子网站
  • spider 爬取页面后,解析出网址,与地址库对比。如果不存在,则存入
  • 站长通过搜索引擎网页提交网址(一般个人博客或网站都采用这种方式)
文件存储

spider 抓取的数据存入原始页面数据库。其中的页面数据与用户浏览器得到的 HTML 是完全一样。

爬行时的复制内容检测

检测并删除复制内容是在预处理的步骤处理掉。不过 spider 在爬行的时候也会进行一定程度的复制内容检测。权重低,而大量抄袭复制内容的网站,spider 可能就不再继续爬行了。这也是为什么说一个网站需要原创内容的原因。

第二步:预处理

预处理有时候也称为索引。因为索引是预处理中最主要的步骤。预处理有几个步骤:

  1. 提取文字。搜索引擎会提取页面的可见文字以及特殊的包含文字信息的代码,如 Meta 标签、图片Alt属性、超链接锚文字等。
  2. 分词,不同的语言有不同的分词如中文分词,英文分词。对第一步提取的文字进行分词。不同的搜索引擎使用的分词算法不同,会有差异。
  3. 去停止词。无论中文还是英文,都会有一些频率高,对内容没有影响的词。如语气词、感叹词,介词、副词等。搜索引擎会在索引页面之前去除这些词。
  4. 消除噪声。绝大部分页面还有一部分内容对页面主题也没有贡献。比如版权声明文字,导航条等。以博客为例,每个页面几乎都会有的文章分类,历史导航等信息,都是与页面主题无关的。这些都是属于噪音,需要消除掉。
  5. 去重。同一篇文章经常会重复出现在不同的网站及同一个网站的不同网址,搜索引擎并不喜欢这种重复的内容,所以搜索引擎会对这部分内容进行去重。
  6. 正向索引。也称索引。经过前面文字提取、分词、消噪、去重后,搜索引擎得到的就是独特的,能反映页面主体内容,以词为单位的内容。接下来搜索引擎索引程序就可以提取关键词,按照分词程序划分好的词,把页面转换为一个关键词组成的集合,同时记录每一个关键词在页面上的出现频率、出现次数、格式、位置。然后把这些页面及关键词形成的结构存储进索引库。
  7. 倒排索引。正向索引还不能直接用于关键词排名。搜索引擎还需要把正向索引数据库重新构造为倒排索引,把文件对应到关键词的映射转换为关键词到文件映射。这样在搜索关键词的时候,排序程序就在倒排索引中定位到这个关键词,就可以马上找出这个关键词所有的文件。
  8. 链接关系计算。链接关系计算也是预处理重要的一部分。搜索引擎在抓取页面内容后,必须事前计算出:页面上有哪些链接指向哪些其他页面,每个页面都有哪些导入链接,链接使用了什么锚文字。这些复杂的链接指向关系形成了网站和页面的链接权重。Google PR 值就是这种链接关系的最主要体现之一。其他搜索引擎也都进行类似技术,虽然并不称为 PR。
  9. 特殊文件计算。除了 HTML 文件之外,搜索引擎还能爬取抓取和索引以文字为基础的多种文件类型,如 PDF,Word,PPT,TXT等。

第三步:排名

到了这一步就是处理用户输入,然后根据用户输入的关键词,排名程序调用索引程序,计算排名,显示给用户。
这个过程也分为下面几个步骤:

搜索词处理

对用户输入的关键词进行分词、去停止词、指令处理等处理。

文件匹配

根据关键词找出所有匹配关键字的文件。

初始子集选择

由于文件匹配阶段出来的文件数量巨大,不可能全部显示。因此需要根据页面权重计算出一个子集。

相关性计算

选完子集后,就需要对子集中的页面进行相关性介绍。计算相关性是排名过程最重要的一步。
影响相关性主要因素有几点:

  1. 关键词常用程度。越常用的词对搜索词的意义贡献越小。越不常用则越大。
  2. 词频与密度。在没有堆积关键词的情况下,页面的关键词出现次数越多,密度越高,则相关性也越大。不过该因素的重要程序越来越低了。
  3. 关键词的位置与形式。在前面索引提到的,页面的标题标签,黑体,H1都是比较重要的位置。
  4. 关键词的距离。切分后的关键词完整匹配地出现,说明与搜索匹配最相关。比如你搜索 hexo博客SEO,如果在页面上连续完整出现 hexo博客SEO,说明相关性最高。
  5. 链接分析与页面权重。除了页面本身的因素,页面之间的链接和权重关系也影响关键词的相关性,其中最重要的就是锚文字。页面有越多以搜索词为锚文字的导入链接,说明页面的相关性越强。
排名过滤及调整

经过上面的步骤之后,已经得到大体的排名。之后搜索引擎可能还会有一些过滤算法,对排序进行轻微调整,其中最重要的过滤就是施加惩罚。一些有作弊的页面会被降低权重。

排名显示

所有排名确定后,排名程序就调用原始页面的标题、Description Meta 等信息显示在页面上。

搜索缓存

用户搜索很大一部分是由重复的。所以有一部分的搜索是会被缓存下来的。

查询及点击日志

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

通过上面的三个步骤,你就能对搜索引擎的工作原理有了更深的理解。这对接下来要写的站内优化内容及博客优化实践能更好的理解。