01
基本概念:爬取、索引、召回、粗排、精排、重排
爬取& 索引
搜索引擎爬取全网海量页面 → 进行基本的质量评分 → 过滤出小部分质量较佳的网页 → 创建倒排索引(能够通过关键词查询文档)
召回
用户发起搜索请求 → 搜索引擎先对关键词进行纠错处理 → 拆成多个词项 → 去索引中查找能够命中这些词项的文档,可能就是这个数
粗排
但是文档的实在数量太多了,一股脑的都推给用户显然很二逼,用户不可能都看完,只会看其中极小的一部分,另外也没法保证质量。
所以要从海量召回的文档中,删除其中内容高度重复的文档,并筛选与搜索词最相关的760个文档,展现给用户。
这个环节属于海选,需要大量计算,为了不让用户等待过长,一般用快捷优先且相对简单的处理方式,比如BM25、TF-IDF、LDA,具体还有啥咱也不知道。
精排
之后就是对760篇文档排序的过程,最终的目的是让排序结果最大概率符合用户预期的结果,这样用户才更有可能点进去了解详情,从而提升搜索的业务价值。
这部分比海选要复杂的多,涉及一大堆数据挖掘、机器学习、用户行为分析、用户意图识别等算法,大概包括:
通过用户搜索词和前N次搜索词,结合历史日志中其他搜索该词的用户浏览行为,来揣测用户可能的搜索意图
文档的更新时间
文档的历史点击率
文档浏览后终结搜索的比例
用户的网络维度特征(IP、网络类型、地域....)
与搜索词文本匹配度最高的TopN条文档
与搜索词潜在意图覆盖率最高的TopN条文档
....太多了咱也不知道
上述过程,对应着搜索引擎中,爬取、索引、召回、粗排、精排的几个阶段,属于搜索引擎系统入门级的常识。
重排
现在精排后面,还有重排,根据用户的搜索场景(网络、设备、近期点击行为等)和媒体热点,实时调整排序,比如:
你用wifi跟手机网络,搜索结果可能有所不同
今天上午点击的某个结果,下午再次搜索时排名就上去了
上午媒体爆料一个叫GoGo闯神秘人和迪丽热巴约会了,然后下午GoGo闯的搜索结果,就跟上午完全不同了
02
如何研究排名(一家之言)
研究收录 vs 研究排名
在16年以前,本渣觉得研究「排名」是最难的,后来搞了一堆单页站群、泛站群、资讯站群和少数几个单站,大概前后10万域名出头,发现「搞定收录」其实比「搞定排名」麻烦的多,甚至应付广告主没事总tm扣量、跑路不结算、域名被停止解析....,我觉得都比研究排名麻烦。
因为在16年以前,本渣接触的都是大站,日UV百万级的,所以收录的问题不大,一般就是某个目录收录率低,但不存在完全不收录,或收录极其缓慢的问题。
毕竟,大站参与760名排序的概率很大的,But一堆海量小站,参与召回的机会都没有。
研究大站 vs 研究小站
所以,本渣觉得,大站与小站,研究排名,是两种路线:
大站研究的是,做的词怎样上首页。
小站研究的是,做哪些词能上首页。
研究的方法有两种:正推 和 逆推
03
正推
正推就是假设一堆条件,挨个去测试,能否达到自己预期的结果。比如快排的开发,大部分都是正推的,需要大量测试
逆推就是通过分析已有的结果,找出其中共同的规律,需要大量观察
仅研究百度SEO排名规律上,正推的门槛极高。
比如,很久以前,本渣抓了1000个词(同一个词根)的搜索结果,把每个词的760个结果对应的网页全弄下来,最后我记得就不到40万篇,接近50%的搜索结果都是重复的。
然后我把这批网页导入到xunsearch(一个开源的搜索引擎,并不是说这个好,而是本渣当时只会这个,还不知道有elasticsearch这个东西)并建立倒排索引。
同时我还把默认词库整理了下,让这部分行业词分词更准确。
我的想法是:
第一步:在xunsearch和baidu,同时搜索一个词,通过调整xunsearch搜索参数,调整出跟百度很接近的结果,比如top10文档大部分一样,只是顺序略有差别。
第二步:我就修改自己网页的内容,推到xunsearch更新下索引,再次xunsearch搜索下,如果top10能出来,线上网页就按本次修改的上线。如果没出来,就修改其他地方,直到能在Top10出现。
理想丰满,现实骨感。
反正第一步始终没出来,毕竟商业搜索引擎,和开源搜索引擎,很多地方是不同的。
但是这只能代表百度,因为其他搜索入口,如研究微信搜一搜、知乎、小红书的排名规律就容易的多,首先这些平台不存在收录的问题,内容不违规即是收录,二是影响排序的因子比百度少很多。
anyway,正推我是放弃了
04
逆推
下面说说当时做的逆推的思路,相对来讲,逆推比正推省事很多。
长尾关键词
long long time ago,在做站群的时候,当时开发的还不是泛解析程序,能承载无限个关键词的。是库里有多少词,这个程序就生成多少对应数量的页面,或二级域名。
这意味着,如果库里面塞了一堆根本不可能排在首页的关键词,这是浪费系统资源的,毕竟新域名收录有限,自然希望收录的页面,都是大概率能上排名的页面。
一个流量词呢,在搜索结果表现,有4种特征:
Top10结果爱站权重很高(平均权重>7)
Top10结果爱站权重很低(平均权重<2)
搜索结果数很低(搜索结果数<1000)
有高有低(平均权重2-4)
第一种可能这个词竞争度很大,或者本身是比较敏感的词,比如医疗养生类的,所以百度特意分流给了一些信任度高的大站
第二种可能这个词是违禁的,但百度有没来得发现,也可能这个词还没被很多人发现。这个可以根据搜索结果的标题,是否完全命中关键词来判断,能命中是前者,不能命中是后者
第三种是这个词是违禁的,且已经被百度发现删除
第四种是正常的词,比如不算热门的小说、漫画名啥的
已排名优先的清洗关键词措施,是找出第1种和第3种词,然后删除掉。
所以当时找词,比如从爱站导出来的竞品网站关键词,会先按如上方法洗词,洗完之后在上线。同等域名数量的情况下,能多出25%的流量。
以上是研究长尾词能够大概率上首页的问题,下面来聊聊核心词的排名。
独立核心词排名
以前有一种刷词方法,比如核心词是「SEO」,会去同时刷创造出来的新词,比如「SEO流量贩子」,同时title也改成这个词。
经过 “恰如其分的刷量比例 & 时间拉长”,「SEO」与「SEO流量贩子」会产生关联,「SEO流量贩子」是「SEO」搜索意图中的一种
这样「SEO流量贩子」排名到首页后,在加大「SEO」的点击,这样核心词「SEO」上首页的概率,比直接硬点概率要大一些。
所以之前,SEO这个词,在百度指数的下拉,或百度搜索框的下来,总有一些烂七八糟的词
判断网页与核心词的真实相关性(排除点击加权)
当然,这个不是绝对,同时也跟百度认为网页本身与核心词有多大相关性有关。
比如很多刷快排的站,网页做的乱七八糟,可以说不符合SEO友好性,存在排名很大程度是点击加权,而非相关性,这样快排有点波动就容易被干。
识别这种情况,可以在搜索词后加个无关紧要的符号,比如「华为工资 。」
搜索引擎对用户的Query,会先纠错在分词召回,纠错过程就包含去除烂七八糟的符号,之后再排序。
but,「华为工资 。」这个词的排序没有点击加权因素在里面,因为没人点击这个词,同时这个符号对核心词“华为工资”相关性排序的影响很低,因为每篇文档都有一大堆句号。
所以你看「华为工资 。」与「华为工资」的排序,几乎一样的。但对比「seo 。」与「seo」的搜索结果,就非常奇妙了。
或者,也可以把主词拆开来搜索,比如「华为工资 华为 工资」,或者输入两次「华为工资 华为工资」
海量核心词排名
但如果有很多核心词怎么办?
比如某类词根,如:
关于XXX的作文
{城市}公司
{古诗名称}
....
long long time ago,本渣的做法是:
1)把这批词,全部扔到百度搜索框,依次提取下拉框的词
2)计算每个后缀的出现频次
3)选择频次最高&标题完全命中关键词搜索结果少的词缀,作为网页title的补充
举个例子,比如{城市}公司,标题只写「{XX}公司」,有些浪费,因为这个词后面有人搜:
{XX}公司大全
{XX}公司名录
{XX}公司黄页
{XX}公司排行
{XX}公司排名
{XX}公司代办
......
但是又不能所有后缀都加上,所以疑问是:添加哪个后缀,能大概率让「{XX}公司」和「{XX}公司{后缀}」都有排名?
全国300多个县级市,60%+城市,其下拉框都会出现“排名”,其实“名录”、“黄页”的出现频次也不少,跟“排名”差不多,但是这两个词缀做的人太多了,也就是搜索结果标题完全命中的数量比较多,所以最后用了“排名”,即title为:“北京公司排名”
结果是,二三线城市差不多都上去了。
一线城市没上去是因为,搜索需求太丰富,比如:代办、摇号、转让...