浅谈SEO的原理和基础

背景

当网站发布上线以后,我们希望通过适当的优化调整,让它可以被搜索引擎更好地“理解”,在用户使用搜索引擎搜索的时候,网站的内容可以更恰当地暴露给用户。

像Google这样的大型商用搜索引擎,有成千上万的工程师,十年如一日地对它进行优化改进,所以,它所包含的技术细节非常多。很难、也没有这个能力,通过一篇文章把所有细节都讲清楚。所以在这里说下基本的过程。

也许读了这篇文章会更好的理解:为什么要做外链,为什么要做关键词优化,长尾效应...

互联网搜索引擎

先来简单了解一下互联网上的搜索引擎。

  • 组成部分

对于 Google 和百度这样的巨型 Web 搜索引擎来说,机制很复杂,而它们之间又有很多区别。比如被搜索的数据是怎样产生的,权重是怎样分配的,用户的输入又是怎样被理解的等等,但是大体上,它总是包含这样三部分。

  • 爬取

搜索引擎会有若干个“爬虫”客户端定期地访问你的网站,如果数据有了变更,它们会将可访问的网页下载下来。搜索引擎发现网页的方式,和人是一样的,就是通过超链接。理论上,我们建立了一个网站,但是没有主动“告知”搜索引擎,也没有任何网站页面有超链接指向它,那么它是无法被搜索引擎的爬虫发现的。

  • 建立索引

将前面爬取的结果,经过解析和处理以后,会以一种有利于搜索的方式归类存放起来。最主要的就是倒排索引机制。

  • “倒排”,指的是存储的结构不再是先定位到文章,再去文章中找寻关键字;而是反过来,先定位到关键字,再去看关键字属于哪些文章。
  • “索引”,指的是关键字,是被索引起来的,因此查询的速度会比较快。
  • 返回结果

拆解用户的搜索条件,根据多种因素来决定返回哪些网页或其它资源给用户,也包括确定它们的展示顺序。

三个大致的步骤协同合作并提供了互联网搜索引擎的服务,当然,实际过程会复杂得多。比方说,上述的第 2 步就要包含解析、分词、去重、去噪等等许多步的操作。

  • PageRank

如果我们写过爬虫就可以很清楚知道:上面三个步骤。从功能实现的流程和工程上面说,它们各自看起来并没有太大的技术门槛,但是搜索质量却天差地别。其中重要的一项就是怎样对返回给用户的网页进行排名,这一系列算法中最核心的那个,就叫做 PageRank。

在 PageRank 以前,排序大多依靠对搜索关键字和目标页的匹配度来进行,这种排序方式弊端非常明显,尤其对于善于堆砌关键字“舞弊”的页面,很容易就跳到了搜索结果的首页。但是这样的页面对于使用者来说作用不大。

PageRank 算法的本质,就是利用网页之间的关联关系来确定网页的影响力权重。而这个关联关系,就是网页之间的超链接,换言之,如果一个页面被各种其它页面引用,特别是被“重要”的网站和页面引用,这就说明这个页面的权重更高。

在实际搜索的时候,需要做到两个因素的平衡:一个是 Reputation,也就是上面描述的影响力,它并不会因为用户单次搜索的关键字不同而改变;还有一个是 Proximity,也就是接近程度,这是根据用户搜索的关键字的匹配程度来确定返回网页的。

如果只考虑 Reputation,那么所有用户搜到的东西都是一样的,这就不是一个搜索引擎了,而是一个网页的有序列表;如果只考虑 Proximity,那么用户搜到的东西就是杂乱无章的匹配页面,而不是像现在这样,将“重要”的页面显示在前面。无论是百度还是 谷歌,不同搜索服务的算法不同,但应该都是在这两个基本因素之间权衡的。

最后简述一下PageRank的基本原理。PageRank算法认为,如果一个网页里包含了某个网页的超链接,那么就表示该网页认可某个网页,或者说,该网页给某个网页投了一票。如下A、B、C、D四个网页,箭头指向的方向就是表示超链接的方向,B的箭头指向A,表示B网页包含A网页的超链接,也就是B网页给A网页投了一票。

开始的时候,所有网页都初始化权重值为1,然后根据超链接关系计算权重。比如B页面包含了A和D两个页面的超链接,那么自己的权重1就被分成两个1/2分别投给A和D。而A页面的超链接包含在B、C、D三个页面中,那么A页面新的权重值就是这个三个页面投给它的权重值之和:1/2 + 1/3 + 1 = 11/6。

经过一轮PageRank计算后,每个页面都有了新的权重,然后基于这个新的权重再继续一轮计算,直到所有的网页权重稳定下来,就得到最终所有网页的权重,即最终的PageRank值。

通常,在一个网页中包含了另一个网页,是对另一个网页的认可,认为这个网页质量高,值得推荐。而被重要网页推荐的网页也应该是重要的,PageRank算法就是对这一设想的实现,PageRank值代表了一个网页受到的推荐程度,越受推荐越重要,就越是用户想看到的。基于每个网页的PageRank值对倒排索引中的文档列表进行排序,排在前面的文档通常也是用户想要看到的文档。

SEO 相关技术

从工程实现的角度简单谈下 SEO 技术。技术是为业务目的服务,最大的目的,是为了让网站的内容更真实、更合理地暴露在搜索引擎的搜索结果中。

白帽和黑帽

遵循搜索引擎规则,通过正当和高效的技术途径来实现 SEO 的效果,这样的方法叫做白帽法。相应的,如果是通过作弊、欺骗这样的手段,就叫做黑帽法。

搜索引擎在评估网站影响力的时候,有许许多多影响网页排序的指标,它们共同决定了一个页面的影响力,前面提到的 PageRank,只是其中之一。有很多参考标准,都可以应用相应的 SEO 规则来进行优化,举几个例子:

  • 网站的正常运行时间。比方说,如果一个站点,在爬虫爬取的时候总是遭遇 4xx、5xx 这样的错误,显然对影响力是一个负面的加权。
  • 网站的年龄,网页内容的新鲜程度。
  • 网站采用 HTTPS 还是 HTTP,显然 HTTPS 要更优。
  • HTML 代码的质量,是否存在错误。
  • 网页站点访问的深度。
  • ...

黑帽也有很多种,比如:

  • 关键字堆砌。
    • 放置大量的甚至和网页内容无关的关键字,比方说在页面上放置一些无关的关键字,并将它们的样式设置为透明,这样用户看不见,但是搜索引擎就以为这个页面和这些额外的关键字有关,在一些本该无关的搜索中会增加曝光度。这其实就是给搜索引擎和用户看不同的页面,搜索引擎看的页面堆砌了大量的无关关键字,而用户看到的才是正常的网页。
    • 还有一种方法,比如我们有时候下载某个网站的资源,它会先跳转到另外一个网页。这种方式则是创建一个堆砌关键字的临时页面,用户访问的时候,则自动转向正常的网页,或是主页。你可以看到这些黑帽技术,都是为了糊弄搜索引擎而添加了某些本不该出现在页面里的关键字。
  • 链接农场
    • 将网站链接放到很多本不该进行外链的其它网站页面上。如用户注册一些域名,并且让所有链接都链接到一个有“好看美剧”文字的站点。这样当用搜索引擎搜“好看美剧”的时候,目标站点排名就会提高,即使此站点并不含那个关键字。
  • ...

站内优化和站外优化

站内优化。在自己管理的网站内部做优化工作来实现 SEO。比如我们之前反复做的SEO关键字优化,现在,我们不妨来体会一下。

在浏览器地址栏中输入 http://ainicheng.com,打开爱你城的页面,右键点击页面空白处并查看网页源代码,你会看到这样的 meta 标签:

<meta name="keywords" content=",爱你城 ">

这就是爱你城的关键词,这些关键词会让搜索引擎用户在搜索的时候准确地找到这个网站。显然这个地方存在很大的改进空间。除了 keywords 的 meta 标签,还有一些其它起到帮助搜索引擎更准确地认识网站的 HTML 标签,比如 description 的 meta 标签,title 标签等等。对于 HTML 的正文, 语义化标签,它们都可以帮助搜索引擎更好地理解内容。

站外优化则和站内优化相反,优化工作是在目标站之外开展的,比如众所周知的“友情链接”,就是一种提供外链的站外优化方式。

roberts.txt

“roberts.txt”是网站根目录下直接能够访问到的文本文件,它是一个对于网络爬虫的规约,告诉它这个网站下哪些内容是可以爬取的,哪些内容是不能爬的。值得注意的是,roberts.txt 不是标准,也不是规范,而是一种“约定俗成”,但是几乎所有的搜索引擎都会遵守它。

网站地图(sitemap)

网站地图就像前面提到的 roberts.txt 一样,是另一个和搜索引擎对话的途径。网站可能非常大,爬取一遍耗时长。但网站地图则可以清晰直接地告诉搜索引擎网站内“重要”的页面都有哪些(无论是否被链接指向),它们的更新习惯,包括最近一次是什么时候更新的,更新频率是多少,以及对于整个网站来说,不同页面的重要性比重是多少。我们网站很多都是基于VUE写的,即对于使用 SPA (单页应用)的网站应用来说,由于缺乏页面跳转,搜索引擎无法正确理解页面的关系、更新、指向等等,网站地图就显得更为重要。现在,我们不妨来体会一下。

如 B 站,访问 https://www.bilibili.com/sitemap.xml,你会看到如下的内容:

可以说一目了然,页面位置、上次修改时间。这可以让搜索引擎有目的和有条件地扫描和爬取页面数据。

对于网站地图,除了被动等待爬虫的抓取,搜索引擎服务往往还提供另一种方式来报告网站地图的变更,那就是允许网站管理员主动去提交变更信息,这种方式对于网站管理员来说更麻烦,但是显然可以更为及时地让搜索引擎获知并收录最新数据。

这种方式从实现上说,就是由搜索引擎服务的提供商开放了一个 Web API,网站在内容变更的时候调用,去通知搜索引擎

统计分析

在进行 SEO 的改动调整之后,我们需要一些方式来跟踪和评估效果。像百度统计,就提供了这样的功能。

原理很简单,以百度统计为例,它会为你的网站生成一段 JavaScript 代码,你就可以把它嵌入每一个你希望得到跟踪的网页。这样,在页面访问时,这段代码会收集相关信息,并向页面嵌入一个大小为 1 像素的 gif 图片,而这个图片的 URL 带有当前浏览器、操作系统等等客户端的不同类型的信息。这样,百度统计 就可以捕获这些信息来完成数据统计了。

下面给出了我在 电脑 上访问天天美剧的页面时,网页向 百度统计 服务器发送的统计信息 URL(别看这个 URL 没有 gif 字样,但这个请求返回的就是一个 gif 图片,这一点可以从响应的 Content-Type 中看出来):

https://hm.baidu.com/hm.gif?cc=1&ck=1&cl=30-bit&ds=1792x1120&vl=913&et=0&ja=0&ln=zh-cn&lo=0&lt=1604884323&rnd=1217770557&si=09a9233992b3e2ca228192ea84886a54&v=1.2.77&lv=3&sn=63260&r=0&ww=592&ct=!!&u=http%3A%2F%2Fwww.gttmj.com%2F&tt=%E5%A4%A9%E5%A4%A9%E7%BE%8E%E5%89%A7-%E7%88%B1%E7%BE%8E%E5%89%A7%E5%B0%B1%E4%B8%8A%E5%A4%A9%E5%A4%A9%E7%BE%8E%E5%89%A7%E7%BD%91

通过收集这样的信息,可以获得很多网站用户的情况统计,比如访问量、页面停留时间、地区分布、电脑访问或手机访问的比例等等,并能观察这样的统计信息基于时间的走势。

补充

单页应用(Single Page Application)的搜索引擎优化,可以吧SPA 理解成一个不是擅长将喜怒哀乐表现出来的人,他对擅长察言观色的搜索引擎颇不友好,因此要对 SPA 网站进行有效的 SEO,是需要一些特殊技巧的,不妨读一读。

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容