分面导航的详细操作方案

最近群里讨论的比较火热的就是分面导航如何处理,在这里我说说我自己的一些想法吧。丑话说在前面,民工不常写文章,文笔是差点,大家能看懂多少就看多少吧。
首先,什么是分面导航相信各位都清楚吧,例如中关村的报价库索引页就是采用的分面导航。
像太平洋的报价库
http://product.pconline.com.cn/mobile/samsung/p3269/
 

说一下制作分面导航需要注意的地方。
一、分面导航因为可以通过不同条件的组合,从而产生非常多URL,如果不加以限制,一方面会大量的消耗蜘蛛的抓取,另一方面由于多条件的组合页面需要多条件组合查询数据库,随着组合的条件越来越多,对数据库服务器的消耗的就越厉害,在遇到像360或soso这种流氓爬虫的时候很容易把你服务器给爬死。
二、因为产品的数量其实是有限的,但是各种条件的组合方式却是非常多的,这就导致了大量的空白页面。大量空白页面会导致网站的评级降低,甚至K站也是经常见的。

假如我要做一个分面导航,我会怎么做?
我的思路是robots.txt + 组合条件控制
一,首先是robots.txt
因为各种不同的条件组合是可以在一定程度上命中关键词,但是随着条件的增多,命中关键词(命中用户搜索需求)的几率会大大降低,页面质量也会越来越难控制,所以控制只要蜘蛛抓取一定层级的页面能大大降低风险。那么既然要用到robots.txt,我们制定的URL就必须是有一定的规律的。
首先来看看下面2种URL,哪种会更好呢?
太平洋 : http://product.pconline.com.cn/mobile/samsung/p3269/c4927/
某基友网站的链接 : http://www.xxxxx.cn/cartype/28-6 ... order-ASC-grid.html
哪种更好呢?
此处省略一万个换行













答案是2种都不好,哈哈哈!
太平洋的URL方式少了分面导航URL的标示符,不方便写robots.txt,容易错封。
第二个链接有标示符,但是太长了,组合了多少个条件没有体现。
理想的方式:
www.xxxx.com/list_s423_s524_s842.html

robots.txt
添加4条记录
disallow: /list*.html
allow: /list_*.html
allow:/list_*_*.html
allow:/list_*_*_*.html

就可以达到只让蜘蛛爬3级组合的页面了。
这时候程序员可能会说,这样的URL没办法实现啊,参数不知道怎么传。
这里我也说说这种URL结构传参数的原理吧。
www.xxxx.com/list_s423_s524_s842.html
首先这个是个伪静态的URL,原始动态的URL可能是这样的。
www.xxxx.com/list.php?tag=s423_s524_s842
这样list其实拿到的是 tag参数对应的值是s423_s524_s842
这时候可以将tag参数的值按 "_"切分成数组,变成下面的数组
array("s423","s524","s842")
再对数组的每个元素进一步解析,每个元素取前2个字符作为参数,其余的作为值。
就变成
s3=23
s5=24
s8=42

s3,s4,s5分别对应着产品的不同属性,23,24,42分别对应着产品的不同属性值。
这样这个URL的解析就完成了。

二,组合条件控制
大家可以去看看太平洋报价库的分面导航,没有结果的条件是不可点的。中关村采用的是没有结果的URL采用nofollow标签nf掉。但是民工觉得NF还不够彻底,直接不要让搜索引擎知道有个链接是最好的。
那么怎么实现这一个效果呢,这里就要判断哪些条件组合是没有结果的。民工想了一个办法,在产品数不是很多的情况下可以实现,像淘宝那样级别的就另当别论了。
首先,当我们选择第一个条件的时候,我们需要把所有符合条件的商品全部查询出来,SQL语句想当简单,select * from XXX where XXX = XXX
假如,这个类产品有三个属性 aa bb cc ,那么就遍历结果集,把所有商品的aa bb cc属性都放到3个数组里
假如只有4个商品,数据可能是下面这样的
aa=[1,1,2,4]
bb=[2,2,4,2]
cc=[g,w,g,r]
对3个数组去重可以得到
aa=[1,2,4]
bb=[2,4]
cc=[g,w,r]
因为假如增加条件,等同于对现有的结果做进一步的筛选。所以,只有用户选择了上面的几个属性值之一才可能会有结果,这样我们就可以判断出哪些选项是可以继续筛选的,哪些选项是没有结果的。

但是有人会说,这样要遍历所有符合前面条件的商品啊。首先,这一个过程只做了一次的数据库查询,只是计算量会比较大,只要配合缓存我觉得问题不会很大。像代理缓存:如nginx,还有数据库缓存如mencached,一个能减轻web服务器压力,一个能减轻数据库查询压力,这样能保证页面访问速度。

好了,上面是我对分面导航怎么实现的一些想法,还没有真正上过,不知道效果会怎么样。
扯了一大堆,发现外链还没发完,赶紧先发外链去了……

注:本文章只供ITSEO内部交流,禁止转载!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值