4.8.1 为什么静态化
现在的网站绝大多数是数据库驱动,页面由程序实时生成,而不是真的在服务器上有一个静态HTML文件存在。当用户访问一个网址时,程序根据URL中的参数调用数据库数据,实时生成页面内容。因此动态页面相对应的URL原始状态也是动态的,包含问号、等号及参数,如下面这种典型论坛的URL:
http://www.domain.com/viewthread.php?tid=70376&extra=page=1
搜索引擎在发展初期(其实也就是10年前而已)一般不太愿意爬行和收录动态URL,主要原因是可能陷入无限循环或收录大量重复内容,造成资源极大浪费。最典型的无限循环就是某些网站上出现的万年历,很多博客有按时间存档,一些宾馆、航班查询网站也经常出现万年历形式,如图4-10所示。
图4-10 万年历使蜘蛛可以无限点击下去
搜索引擎蜘蛛碰到万年历,如果一直跟踪上面的链接,可以不停地点击下一月、下一年,无穷无尽陷入无限循环,每一个日期对应的页面内容也没什么区别。真实用户一眼就能看出这是个日历,但搜索引擎蜘蛛面对的只是一串代码,不一定能判断出其实这是个万年历。前面提到的电子商务网站各种条件过滤、筛选页面也可能组合出数量庞大的页面,弄不好会近乎于无限循环。
有时就算不存在无限循环,动态URL也可能造成大量复制页面。比如URL:
http://www.domain.com/product.php?color=red&cat=shoes&id=12345
和URL:
http://www.domain.com/product.php?cat=shoes&color=red&id=12345
及URL:
http://www.domain.com/product.php?color=red&id=12345&cat=shoes
很可能是完全一样的内容,都是型号为12345的红色鞋子。URL中参数顺序不同就是不同的网址,但调用参数一样,因此页面内容是一样的。如果CMS系统设计不周全,这些URL都可能出现在网站上。
更麻烦的是,有时某些参数可以是任意值,服务器都能正常返回页面,虽然内容全是一样或非常相似的。例如,上面URL中的参数12345改为6789或其他什么数字,服务器很可能也返回200状态码。
所以以前的搜索引擎对动态URL敬而远之,要想网站页面被充分收录,站长需要把动态URL转化为静态URL。