32 | 和搜索引擎的对话:SEO的原理和基础
下载APP
关闭
渠道合作
推荐作者
32 | 和搜索引擎的对话:SEO的原理和基础
2019-11-22 四火 来自北京
《全栈工程师修炼指南》
课程介绍
讲述:四火
时长19:01大小13.04M
你好,我是四火。
今天,我们来聊一聊搜索引擎和 SEO(Search Engine Optimization)。当网站发布上线以后,我们希望通过适当的优化调整,让它可以被搜索引擎更好地“理解”,在用户使用搜索引擎搜索的时候,网站的内容可以更恰当地暴露给用户。
作为程序员,和更擅长于与内容打交道的运营相比,我们的角度是不一样的,我们更关注工程实现而非网页内容,也更需要从原理的角度去理解 SEO。这一讲,就让我们从理解互联网搜索引擎的工作原理开始。
互联网搜索引擎
要说 SEO,我觉得我们需要先来简单了解一下互联网上的搜索引擎。
组成部分
对于 Google 和百度这样的巨型 Web 搜索引擎来说,这里面的机制很复杂,而它们之间又有很多区别。比如被搜索的数据是怎样产生的,权重是怎样分配的,用户的输入又是怎样被理解的等等,但是大体上,它总是包含这样三部分。
1. 爬取(Crawling)
搜索引擎会有若干个“爬虫”客户端定期地访问你的网站,如果数据有了变更,它们会将可访问的网页下载下来。搜索引擎发现网页的方式,和人是一样的,就是通过超链接。因此理论上,如果你建立了一个网站,但是你没有主动“告知”搜索引擎,也没有任何网站页面有超链接指向它,那么它是无法被搜索引擎的爬虫发现的。
2. 建立索引(Indexing)
3. 返回结果(Serving Results)
拆解用户的搜索条件,根据多种因素来决定返回哪些网页或其它资源给用户,也包括确定它们的展示顺序(Ranking)。
这三个大致的步骤协同合作并提供了如今互联网搜索引擎的服务,当然,实际过程会复杂得多。比方说,上述的第 2 步就要包含解析、分词、去重、去噪等等许多步的操作。
另外值得一提的是,搜索的数据现在确实都是增量更新的,可早些年其实并不是如此。Google 在 2003 年以前,爬虫完成不同的数据爬行需要不同的时间,其中最慢的需要几个月,之后的索引需要一周,数据分发也需要一周,在这以后才能被搜索到,因此人们往往也只能搜索到很早以前的数据(当然,那时候互联网的数据没那么大,变更也没那么频繁)。在一次重要更新 Fritz 以后,爬虫才每天都爬网页的数据,搜索数据也才做到了日更新。
PageRank
纵观上面所述的三个步骤,从功能实现的流程和工程上面说,它们各自看起来并没有太大的技术门槛,但是搜索质量却天差地别。其中重要的一项就是怎样对返回给用户的网页进行排名,对于 Google 搜索,这一系列算法中最核心的那个,就叫做 PageRank。
在 PageRank 以前,排序大多依靠对搜索关键字和目标页的匹配度来进行,这种排序方式弊端非常明显,尤其对于善于堆砌关键字“舞弊”的页面,很容易就跳到了搜索结果的首页。但是这样的页面对于用户来说,价值非常小。
PageRank 算法的本质,就是利用网页之间的关联关系来确定网页的影响力权重。而这个关联关系,就是网页之间的超链接,换言之,如果一个页面被各种其它页面引用,特别是被“重要”的网站和页面引用,这就说明这个页面的权重更高。
在实际搜索的时候,需要做到两个因素的平衡:一个是 Reputation,也就是上面说的这个影响力,它并不会因为用户单次搜索的关键字不同而改变;还有一个是 Proximity,也就是接近程度,这是根据用户搜索的关键字的匹配程度来确定返回网页的。
如果只考虑 Reputation,那么所有用户搜到的东西都是一样的,这就不是一个搜索引擎了,而是一个网页的有序列表;如果只考虑 Proximity,那么用户搜到的东西就是杂乱无章的匹配页面,而不是像现在这样,将“重要”的页面显示在前面。无论是百度还是 Bing,不同搜索服务的算法不同,但都是立足于做到这两个基本因素的制衡。
SEO 相关技术
下面我们再来从工程实现的角度一窥 SEO 技术。技术是要为业务目的服务的,我们最大的目的,是为了让网站的内容更真实、更合理地暴露在搜索引擎的搜索结果中。
1. 白帽和黑帽
当我们明确了上述的目的,遵循搜索引擎规则,通过正当和高效的技术途径来实现 SEO 的效果,这样的方法叫做白帽(White Hat)法。相应的,如果是通过作弊、欺骗这样的手段,就叫做黑帽(Black Hat)法。如果你了解过网络安全中的白帽和黑帽,那么这里的含义其实是一致的。
搜索引擎在评估网站前文所述的影响力的时候,有许许多多不同的“Ranking Signal”,它指的就是会影响返回的网页排序的“信号”,它们共同决定了一个页面的影响力,对于 Google 搜索来说 ,前面我们提到的 PageRank,只是其中之一。这里面大多数的信号,都可以应用相应的 SEO 规则来进行优化,我随便举几个例子:
网站的正常运行时间。比方说,如果一个站点,在爬虫爬取的时候总是遭遇 4xx、5xx 这样的错误,显然对影响力是一个负面的加权。
网站的年龄,网页内容的新鲜程度,好的原创内容总是最好的优化方式。
网站采用 HTTPS 还是 HTTP,显然 HTTPS 要更优。
HTML 代码的质量,是否存在错误。
网页在站点访问的深度。
当然,黑帽法我们也来简单了解几个。
关键字堆砌:说白了就是放置大量的甚至和网页内容无关的关键字,比方说在页面上放置一些无关的关键字,并将它们的样式设置为透明,这样用户看不见,但是搜索引擎就以为这个页面和这些额外的关键字有关,在一些本该无关的搜索中会增加曝光度。这其实就是给搜索引擎和用户看不同的页面,搜索引擎看的页面堆砌了大量的无关关键字,而用户看到的才是正常的网页,这种方法被称为 Cloaking。
还有一种方法叫做 Doorway Pages,这种技术则是创建一个堆砌关键字的临时页面,用户访问的时候,则自动转向正常的网页,或是主页。你可以看到这些黑帽技术,都是为了糊弄搜索引擎而添加了某些本不该出现在页面里的关键字。
链接农场(Link Farm):将网站链接放到很多本不该进行外链的其它网站页面上,比如花钱买一些不相关的内容,强行建立外链。不知道你有没有听说过“Google 轰炸”,它本质上就属于这种方法。当年人们搜索“more evil than Satan”(比撒但还邪恶)的时候,结果的第一条居然出现了微软的主页。
Article Spinning:这种技术将一些其它网站已有的内容拷贝过来,做一些用来欺骗搜索引擎的修改,让搜索引擎以为是一份新的内容。比如,替换一些特定的词语、句子,添加一些毫无意义的用户不可见的内容,等等。
2. 站内优化和站外优化
SEO 的优化方式,可以大致分为站内的和站外的。站内优化,其实指的就是在自己管理的网站内部做优化工作来实现 SEO。比如我们之前反复提到的关键字,现在,我们不妨动手来体会一下。
这就是极客时间网站的关键词,这些关键词会让搜索引擎用户在搜索的时候准确地找到这个网站。除了 keywords 的 meta 标签,还有一些其它起到帮助搜索引擎更准确地认识网站的 HTML 标签,比如 description 的 meta 标签,title 标签等等。对于 HTML 的正文,你也许还记得我们在 [第 17 讲] 介绍的 HTML 语义化标签,它们都可以帮助搜索引擎更好地理解内容。
正如其名,站外优化则和站内优化相反,优化工作是在目标站之外开展的,比如众所周知的“友情链接”,就是一种提供外链的站外优化方式。
3. roberts.txt
“roberts.txt”是网站根目录下直接能够访问到的文本文件,它是一个对于网络爬虫的规约,告诉它这个网站下哪些内容你是可以爬取的,哪些内容你是不能爬的。值得注意的是,roberts.txt 不是标准,也不是规范,而是一种“约定俗成”,几乎所有的搜索引擎都会遵守它。
这就好像你在你家门口贴了张条,哪些过路人可以敲你家的门,而哪些人不可以,那么路过的人大多会按这张纸条上的要求去做,但如果你不受欢迎而硬要去敲门(访问),那么也没有任何人可以阻止你,但至于主人开不开门(是否响应请求),或者给不给好脸色(是否返回正常结果),就是另一回事了。
这是说,对于默认的爬虫(User-agent 为 *),/search 和 /imgres 是不允许爬取的,但是 /search/about 和 /search/static 是可以爬取的,请注意 Allow 指令比 Disallow 有更高的优先级;对于 Twitter 和 Facebook 的爬虫,却是允许访问 /imgres 的。
你可以看到,这样的配置是运行配置默认值,然后通过特殊值来覆写的(不知这能否让你回想起 [第 28 讲] 中介绍的类似的“默认值 + 特殊值覆写”的配置方式)。最后一行是网站地图 sitemap.xml 的位置,我们下面会讲。
另外,如果你想让搜索引擎友好一点,就不要那么频繁地访问你的网站,你可以使用 Crawl-delay 参数,用来告知连续的请求之间至少间隔多少秒,比如:
同样的,你可以看看百度的 roberts.txt,访问 https://www.baidu.com/robots.txt,你会看到百度比较“特立独行”,它不允许 Google、有道、搜狗等多家搜索引擎的数据爬取。
除了全站的搜索引擎爬取设定以外,能够按页来设置吗?可以,这时候你需要使用一个名为 robots 的 meta 标签,这个标签在 HTML 的 head 内,用来告知该页的爬取策略。
除页面以外,HTML 的 a 标签(链接)也能够告诉搜索引擎不要进一步追踪爬取,方法就是使用 nofollow,如下:
因此,是否允许爬取的建议,是可以在网站、页面和链接这三个级别分别设置的。
4. 网站地图
网站地图就像前面提到的 roberts.txt 一样,是另一个和搜索引擎对话的途径。网站可能非常大,爬取一遍耗时长,但网站地图则可以清晰直接地告诉搜索引擎网站内“重要”的页面都有哪些(无论是否被链接指向),它们的更新习惯,包括最近一次是什么时候更新的,更新频率是多少,以及对于整个网站来说,不同页面的重要性比重是多少。
可以说一目了然,页面位置、上次修改时间,以及修改频率。这可以让搜索引擎有目的和有条件地扫描和爬取页面数据。
对于网站地图,除了被动等待爬虫的抓取,搜索引擎服务往往还提供另一种方式来报告网站地图的变更,那就是允许网站管理员主动去提交变更信息,这种方式和爬虫来爬取比较起来,类似于我们从第一章就开始讲的 pull 和 push 的区别,这种方式对于网站管理员来说更麻烦,但是显然可以更为及时地让搜索引擎获知并收录最新数据。
5. 统计分析
在进行 SEO 的改动调整之后,我们需要一些方式来跟踪和评估效果。像 Google Analytics 和百度统计,就提供了这样的功能。
原理上很简单,以 Google Analytics 为例,它会为你的网站生成一段 JavaScript 代码,你就可以把它嵌入每一个你希望得到跟踪的网页。这样,在页面访问时,这段代码会收集相关信息,并向页面嵌入一个大小为 1 像素的 gif 图片,而这个图片的 URL 带有当前浏览器、操作系统等等客户端的不同类型的信息。这样,Google Analytics 就可以捕获这些信息来完成数据统计了。
下面给出了我在 Mac 上访问极客时间的页面时,网页向 Google Analytics 服务器发送的统计信息 URL(别看这个 URL 没有 gif 字样,但这个请求返回的就是一个 gif 图片,这一点可以从响应的 Content-Type 中看出来):
通过收集这样的信息,可以获得很多网站用户的情况统计,比如访问量、页面停留时间、地区分布、电脑访问或手机访问的比例等等,并能观察这样的统计信息基于时间的走势。
总结思考
今天我们学习了一些互联网搜索引擎的工作机制,并结合例子从工程的角度了解了几个常见的 SEO 相关技术。今天我们就不放具体的思考题了,但 SEO 本身是一个可以挖掘很深的领域,我在扩展阅读中放置了一些资料,供你延伸。
好,到今天为止,“寻找最佳实践”这一章就接近尾声了,你是否有所收获、有所体会,欢迎你在留言区分享。
扩展阅读
对于 PageRank 算法,互联网上其实有很多学习材料,比如维基百科的词条,再比如科普作家卢昌海的文章——谷歌背后的数学。这个算法的来源,是 The Anatomy of a Large-Scale Hypertextual Web Search Engine 这篇 Sergey Brin 和 Lawrence Page 最早写的关于 Google 搜索引擎原理的论文,当然,它并非这一讲的学习周期内要求的阅读材料,而仅供感兴趣且有余力的你阅读。
单页应用(Single Page Application)的搜索引擎优化,专栏第三章已经介绍了 SPA 的优势,但是 SPA 网站并不是一个擅长将喜怒哀乐表现出来的孩子,他对擅长察言观色的搜索引擎颇不友好,因此要对 SPA 网站进行有效的 SEO,是需要一些特殊技巧的,推荐阅读。
分享给需要的人,Ta购买本课程,你将得18元
生成海报并分享
赞 5
提建议
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
31 | 防人之心不可无:网站安全问题窥视
下一篇
33 | 特别放送:聊一聊程序员学英语
精选留言(6)
- 💢 星星💢2020-03-31老师你好,关于反爬虫,除了使用roberts.tx文件以及网站、页面和链接这样的软性规定。还有什么有效手段么?怎么识别它是爬虫呢?
作者回复: 识别爬虫,就是要识别出爬虫访问和人访问的不同。 比方说,可以设置一个token,如果爬虫访问,这个token无法被准确和顺利地生成,那么请求就可以屏蔽。 比方说,人访问的点击都是符合某些特征的,比如过高频率的点击,可以认为是爬虫所为。 一些大厂甚至会采用机器学习的方法来识别爬虫,以提高识别率和准确率。
2 - Geek_74d3ac2020-09-16老师不进一步不讨论一下单页应用的seo 问题,以及实际上的竞价排行问题 和让 seo 或者搜索引擎本身逐渐失去意义的移动应用生态圈封闭问题么?
- Long2019-12-14老师你好,请问 在白帽子做法中的,网页在站点访问的深度,这句话是什么意思, 可以理解为网站本身的构造有多深吗?
作者回复: 这里的深度,指的是从首页开始,最短通过几次跳转(超链接)可以到达。
- 丁丁历险记2019-11-28百度已成为了一家广告公司。
- 四喜2019-11-27像淘宝京东等电商网站,都不能容许流量池子被别人撕开口子。搜索只能在站内,竞价排名也只能在自家站内买。 那么除了搜索引擎的爬虫本身主动被动的遵守robots.txt,是不是电商网站也绞尽脑汁做了各种反爬虫的手段呢?
作者回复: 对的。据我所知,电商网站也确实是做了各种反爬虫的手段的,特别是竞争对手的爬虫。(我以前在 Amazon 工作,所以知道)
- 許敲敲2019-11-22老师你好,我想了解下,我自己在github上搭建一些静态博客,使用google analytic就可以分析我网站的一些被浏览信息是嘛? 不知道配置这个麻烦吗,今天下班去翻个墙研究下。
作者回复: 对你说的这几个组合起来,我没有尝试过,但是技术上看,配置 Google Analytics 应该是非常简单的,一小段脚本就可以了。
共 4 条评论