【干货】如何利用shingle算法布局网站内链和聚合页生成

当站外的优化越来越难的时候,站内的优化就成为了seoer的必备技能,也是检验seo能力的体现。特别是在大型网站,站内优化尤为重要。

我之前有说过,内链的作用除了提升收录,那么就是提升用户的点击以及页面的投票等。

那么如何合理的分配和布局内链就是一个很有意思的研究了。

常用内链调用套路

所谓的内链调用,就是我们网站的内页(包括列表页、详情页以及其它聚合页面)的链接模块上的链接调用啦。

比如:最新文章、相关文章、站长推荐、tag标签云以及其它的链接模块,由于每个站都不一样,这里就不一一展开讲。

我们一般的方式就是,最新文章是调用N条最新发布的文章,相关文章也是调用最新的tag相关的文章,还有站长推荐可能就是调用那些在后台选的推荐位的内容,tag标签云也是调用最新的N条标签链接。

但是我们很快就发现以上的调用方式存在很大的问题,我们没有合理的分配内链的资源。比如最新文章,比如调用20,30条。那么这30条内容会一下子获得全站的链接推荐,但是很快又会被其它新发布的链接给替换掉了。还有就是很多当天发布的新文章,可能展示的机会都没有1秒钟就被后来发布的新文章给替换掉了(如果我们每天发布很多的文章的话)。

对于相关文章以及tag标签也存在同样的问题。而且由于这种分布的不平等,很容易导致很多的页面的层级会很深得不到很好的推荐。那么就会非常的影响蜘蛛对于整站内容的抓取。

解决不了抓取的问题,那么对于后续的提升排名什么的都是无用的。因为蜘蛛没有发现你的链接就没法计算权重获取内容啥的。

那么如何解决这种分配不均匀的问题呢?

一种很简单的方法就是随机调用,这样看起来会好很多。但是随机调用对于网站数据库的性能是很大的挑战。

因此又进行了升级,对页面进行缓存,或者生成静态页面。

但是这种方法看起来是不错,但是可控性太差了,我们没法很好的控制每个页面的链接分配。

如何解决这个问题呢?这就是我们今天的主题,shingle算法!

shingle算法介绍

shingle在英文中表示相互覆盖的瓦片。基本概念:

  • shingle 由N个字组成一个shingle,比如可以用5个字组词一个。

shingle算法其实是搜索引擎用来计算内容的相似度的,其原理是:

从文档开始位置取,每隔N个字取一个shingle,直到取完,然后计算每个shingle的签名(hash)。最后将记录完全一致的shingle数除以两个文档的shingle总数减去一致的shingle数(就是简单的集合运算)。这种算方法计算出来的数值称为jaccard系数。计算公式如下:

J = A∩B / A∪B

算法结论:对于长度L的文档,每隔N个汉字取一个shingle,这样一共取到L-N+1个shingle。可见N的取值对于效率和效果的影响是非常大的。

实例说明一下吧,比如我们这里有两篇文档:文档1:

9月3日,林心如出席了某品牌的发布会,面对媒体的群访,她与大家分享了家人的近况。

文档2:

9月3日,林心如出席了某品牌的发布会,在采访环节的时候,她也和大家分享了自己和家人的近况。

那么如何计算呢,比如我们取5个字作为一个shingle的话,那么文档1和文档2的shingle分别是:

# 文档1的shingle

['9月3日林', '月3日林心', '3日林心如', '日林心如出', '林心如出席', '心如出席了', '如出席了某', '出席了某品', '席了某品牌', '了某品牌的', '某品牌的发', '品牌的发布', '牌的发布会', '的发布会面', '发布会面对', '布会面对媒', '会面对媒体', '面对媒体的', '对媒体的群', '媒体的群访', '体的群访她', '的群访她与', '群访她与大', '访她与大家', '她与大家分', '与大家分享', '大家分享了', '家分享了家', '分享了家人', '享了家人的', '了家人的近', '家人的近况', '人的近况']

# 文档2的shingle
 ['9月3日林', '月3日林心', '3日林心如', '日林心如出', '林心如出席', '心如出席了', '如出席了某', '出席了某品', '席了某品牌', '了某品牌的', '某品牌的发', '品牌的发布', '牌的发布会', '的发布会在', '发布会在采', '布会在采访', '会在采访环', '在采访环节', '采访环节的', '访环节的时', '环节的时候', '节的时候她', '的时候她也', '时候她也和', '候她也和大', '她也和大家', '也和大家分', '和大家分享', '大家分享了', '家分享了自', '分享了自己', '享了自己和', '了自己和家', '自己和家人', '己和家人的', '和家人的近', '家人的近况', '人的近况']

可以算出文档1的shingle数量是32,文档2的shingle数量是37。jaccard值是0.278。那么如果在搜索引擎里面jaccard值大于0.2就算是相似文档的话,这两个文档就是相似文档啦。

说了那么多,这个跟我们做内链有啥关系??

在内链上的应用

假如我们想让每个页面都获得10条或20条或30天的内链推荐,那么应该怎么做呢?

那么是不是就可以从 id为1的文章开始,每隔N条取出来作为本文的最新文章就行啦。

如果你要每个页面都获取20条的推荐,那么就是取当前id后的20条作为最新文章就行了。

这种方法的好处就是,除了前后20篇文章获得的推荐数少于20之外,其余所有的链接都获得相等的内链推荐数。

当然了,这个其实并没有很好的利用shingle这个算法的优势,而是借鉴了一下它这个shingle的定义。

那么还有没有其他方面的运用呢?

在聚合页上的应用

假如你有100万的商品要做成聚合页,我们假定jaccard值大于0.2是重复页面。那么这100万的商品可以生成多少聚合页呢?

假如我们每个页面展示10个商品,我们由jaccard的计算公式可以得出:n/(10+10-n)=0.2 其中n是相同产品的数量,这样就可以算出n=3.34,那么我们就可以得出,一个id的重复调用次数不能超过3次,这样100万的页面就可以生成1000000/10*3=300000 30万个聚合页了。那如果是每页调用20个商品呢?依据n/(20+20-n)=0.2得出n=6.67,那么每个产品就不能重复调用超过6次,100万的页面就可以生成1000000/20*6=300000 哈哈,还是30万,发现了么。这个生成的数量取决于jaccard值。

好啦,今天的文章就分享到这里。如果你有更好的想法和建议,欢迎留言讨论。

最后,不来一波三连么?

关注我,一起学习更多的SEO技术

【干货】如何利用shingle算法布局网站内链和聚合页生成

THE END
分享
二维码
海报
【干货】如何利用shingle算法布局网站内链和聚合页生成
当站外的优化越来越难的时候,站内的优化就成为了seoer的必备技能,也是检验seo能力的体现。特别是在大型网站,站内优化尤为重要。 我之前有说过,内链的作……
<<上一篇
下一篇>>