我们经常会看到 , 在地址栏里有一些网址特别长,而且还带有 “?”, 这样的链接一般是动态链接,其所对应的页面就是动态页面 。
在技术上,动态页面具有这些特征:
1 ,动态页面是以 ASP 、 PHP 、 JSP 、 ASP.net 、 Perl 、或 CGI 等编程语言制作的;
2 ,动态页面实际上并不是独立存在于服务器上的网页文件,只有当用户请求时服务器才返回一个完整的网页;
3 ,动态页面上的内容存在于数据库中,根据用户发出的不同请求,其提供个性化的网页内容;
4 ,动态页面内容不是存在于页面上,而是在数据库中,从而大大降低网站维护的工作量;
5 ,采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、订单管理等等; 静态页面 则无法实现这些功能。
SEO 的角度,动态页面有这些弊端:
1 ,由于动态页面的生成是采用数据库的内容,所以网页内容主题的永恒性不能保证。这样造成了搜索引擎的阅读困难,即搜索引擎抓不住一个永恒的主题,因此不能输入到搜索引擎中的缓存( cache )中。
2 ,动态网址里往往包含 “ ? ” 和很多参数,这让目前技术条件下的搜索引擎在判断和识别造成了很大的困难。
3 ,动态链接,存在一个信任问题,用户以及搜索引擎都无法确定这个页面会一直存在。
搜索引擎对于静态链接更友好,所以,把动态网址进行 URL 重写优化 使其静态化,是一个非常重要的 SEO 技巧。 SEO 十万个为什么 是全站动态的,目前这么合理和简洁规范的 URL 就是经过 URL 重写( URL-rewrite )技术处理的。
动态页面和静态页面的 seo 优缺点
网页的 url 地址可以分为动态和静态,动态页面并非实际存在于服务器当中,根据用户发出的请求提供相应的内容,对服务器运作来说压力较小,静态页面的地址是真实存在的,路径当中不含有? &% 之类的变量符号,所以对搜索引擎来事更友好更容易得到信任,为了追求动态页面和静态页面的优点又回避缺点产生了 “ 伪静态 ” ,在动态页面的基础上通过 url 重写技术把转移参数插入到 url 地址中达到迷惑蜘蛛的作用。
那么看似百利而无一害的伪静态页面是否就是最好的呢?结合动态页面和静态页面的优缺点对比看看。
动态页面
在 服务器端运行的程序组件和网页都属于动态网页,根据用户的要求返回页面,交互性很好,但是存在着很大的安全隐患,动态网站页面的信息必须从数据库中读取, 每打开一个页面造成一次读取命令,如果人数过多会增加服务器的工作量,从而影响这个网站的运行速度,动态网站的变量链接很容易造成死循环,使蜘蛛深陷其 中,所以对搜索引擎很不友好。
静态页面
静态页面实际存在于服务器内,无需经过编译就能直接加载到用户浏览器上显示出来,中间省略的脚本计算和读取数据库提高了访问的速度,缺点同样并存与优点之中,由于静态页面存放在服务器中药占据空间内存,可以想象如果某论坛有 10 万帖,每个帖的大小 100K ,如果全部作为静态页面存在于服务器中就要占据 10G 的大小,不包括存储计算中造成的空间浪费,所以相当消耗空间资源。
伪静态页面
那么伪静态页面是否就能结合动态页面和静态页面的优点,既能解决搜索引擎友好的问题,又能解决静态页面空间资源消耗大的问题几乎完美的存在,其实不然,浏览器访问伪静态页面时是通过正则判断,而这个分辨的过程由 cpu 完成,导致 cpu 使用率上升出现超负荷,影响网站的正常服务就是伪静态的最大弊病。
由此可以看出每种形式都是有长有短的,怎么合理的使用各种形式完全取决于站长对网站规模的计划和类型的定位。
伪静态还有的2点好处:1)防止某些黑客恶意攻击。有些大网站采用不同的技术开发不同功能的页面。而把拓展名改掉,让黑客无法确认此页面用的技术是什么,从而就无从下手。 2) 方便访问者使用。访问者不是程序员,他们不明白什么是.jsp,.php.aspx,他们只知道URL。所以统一把拓展名拿掉,或者同意把拓展名换为html,htm,有利于用户的使用。用户可以知道现在在你网站的位置,如何通过输入URL到某一页面
针对 seo 优化动态网页如何优化
动态生成的网页:
对于那些动态生成网页,我们这些实际的访问者可以通过肉眼看到。但对于大多数搜索引擎的蜘蛛程序却往往是不可见的,这也就是动态网页很难被搜索引擎的 SPIDER 检索的原因。因而,要想让你的动态网页能够出现在搜索引擎的搜索结果中,只要保证你的网站内容对搜索引擎是可见的,即搜索引擎的 Spider 程序能够看到你网站的内容就可以了 .
所谓动态网页一般指的是采用 ASP , PHP , ColdFusion , CGI 等程序动态生成的页面,该网页中的大部分内容来自与网站相连的数据库。在网络空间中并不存在这个页面,只有接到用户的访问要求后才生成并传输到用户的浏览器中。而且由于访问者能够实时得到他们想要的数据,动态网页往往容易给人留下深刻的印象。此外,动态网页还具有容易维护和更新 的优点。例如,对于一个新产品或价格的调整。网站管理员只要对数据库做一下简单的改动就可以了,根本不需要去修改每个单独的静态页面。
我们可以看出,从用户角度来考虑,动态网页确实非常棒。但如果在搜索引擎的角度来看,结论却不同了。
动态网页的问题所在 :
问题就出在这些动态网页在网络空间中并不是实际存在的,只有当用户在变量区中输入一个值以后它们才会生成 。而我们大家也都知道,搜索引擎的 Spider 再聪明,它也只是一个搜索程序,它们无法象真正的人那样选择变量并输入数值。亦可将查询编入主页上的一个链接中,使得该链接成为一个预先定义的网站目录的查询。用户可在一个搜索表格中键入查询条件来查询,通常动态脚本需要某些信息来返回页面内容,最常见的如 Cookie 数据, SessionID 或一个环境变量。但对搜索引擎的 Spider 程序来说,它们压根不可能知道去使用你的搜索功能,或者该问什么问题。就是因为如此, Spider 对网站的检索往往会在一个动态站点前不得不止步。此外,在动态页的 URL 中包含了问号 (?) 和百分号 (%) 。还有一些符号诸如 & , % , + 和 $ 等在一个动态页的 URL 中也经常能看到。这样的 URL 被称作“环境变量” (querystring) 。不过大多数 SPIDER 都无法解读符号“ ? ”后的字符 。很显然,由于这个 URL 并不实际存在,所以它们一无所获。因此,如果你的整个网站或网站上有大部分网页都是采用动态来生成的,为了使 SPIDER 易于读取你网站上的内容,你需要对网站做一定的修改。还有一些搜索引擎在对页面进行检索时往往也会拒绝对 cgi-bin 目录下的静态页面 ( 即被保存成静态页面的动态页 )URL 进行检索 。
搜索引擎为何不读取符号“ ? ”后的内容:
搜索引擎的 SPIDER 不愿意读取放在 cgi-bin 目录下的网页,或是 URL 中包含了符号“ ? ”的字符。其原因就在于,如果在 CGI 中提供了“无穷”数量的 URL ,那么 SPIDER 往往就会因为对这些“无穷”网页的检索而被牢牢套住,陷入死循环。这就是所谓的蜘蛛陷阱 (spidertraps) 。数据库程序对 SPIDER 亦有可能创建一个与此类似的情形。因而为避开可能的陷阱, Spider 对于那些带有符号“ ? ”的 URL 中的“ ? ”之后的字符一概不予读取。 倘若 Spider 被你的服务器套住,不只是对 Spider 本身不妙, Spider 对你网站页面的重复访问请求也会导致你的服务器系统彻底瘫痪。
动态链接的静态化
动态链接的静态化:
动态页面的链接是动态产生的,在返回页面内容之前,动态脚本需要一些信息,如 cookie data 、 session id 或字符串。动态页面是基于数据库驱动的,通过脚本语言动态产生的页面。动态网站中有模板,内容一般存放于数据库中。要浏览页面时,模板调用数据库中的内容,参数被添加到 URL 上 , 这种复合型 URL 告诉了模板要装载的具体内容。浏览者在动态网站中通过使用查询字符串发现信息,这种查询字符串被键入表单中或被预先编码在主页上的链接中。
蜘蛛不清楚如何使用查询功能,若蜘蛛用没有查询字符串的不完整请求向服务器提交,服务器会要求信息完整地址,这是蜘蛛不能理解的,从而可能陷入了一种死循环 中。搜索引擎难以处理动态网站,因不能提供产生页面需要的信息,会陷入到动态页面服务器中而不能自拔,蜘蛛和服务器陷入无限循环之中,会导致服务器瘫痪。因此,动态网页内容对大多数搜索引擎蜘蛛是不可见的,大多数蜘蛛反感动态页面,在识别出这种 URL 后,会敬而远之。不会检索它。因此需要把这些有价值的内容转换成随蜘蛛可见的形态。
这种复合型 URLs 是搜索引擎难以检索的,因搜索引擎不知道定义内容的参数。参数越多,越难以被检索到。为此,需要克服这种不完整地址问题。有两种解决方案:
搜索引擎友好的动态页面,修改 URLs ,参数越少越好,最好把页面静态化。
伪静态页面生成方法:
ProvideBlogListAction.java:
userName4URL = s.getUserName();//这3个分别是URL后面需要传递的参数
blogId4URL = s.getBlogId();
articleId4URL = s.getArticleId();
s.setArticleURL(com.trs.blog.util.UrlUtil.getArticleURL(userName4URL,blogId4URL,articleId4URL));
UrlUtil.java:
/**
* 获得博客文章的URL
* @param userName 用户名
* @param BlogId 博客id
* @param aid 文章id
* @return 文章的URL
*/
public static String getArticleURL(String userName, int blogId, int aid){
URLMap u = URLMap.valueOf(userName,blogId,aid);
return "http://localhost:8080/blog/a/"+u.toString()+".html";
}
URLMap.java:
public final static URLMap valueOf(String sUserName, int iParentId, int iId) {
URLMap map = new URLMap();
map.m_iVersion = DEFAULT_VERSION;
map.m_sUserName = sUserName;
map.m_iType = “1”;
map.m_iParentId = iParentId;
map.m_iId = iId;
map.m_iCheckSum = caculateCheckSum(sUserName.hashCode(), iParentId, iId);
return map;
}
private final static int caculateCheckSum(int hash, int pid, int aid) {
return (hash + (hash >> 13)) | (pid - (pid >> 12)) & (aid ^ (aid >> 11));
}
上面的代码是公司的伪静态页面实现办法,在文章列表中把文章的连接如/blog/articleInfo.do?userName=zy&&blogId=1&&articleId=1转换成blog/a/0101002526B90C548A833416.html这种URL,这样蜘蛛就可以进而爬进去看相应的内容了,因为文章列表中的每一篇文章都是不同的静态URL。
静态与伪静态的比较:
第一、速度,对于速度而说,静态页面比伪静态好,因为静态页面是实实在在存在于服务器上的页面。在用户向服务器发出请求时,可以直接直接调用。然而伪静态,其实是一个动态页面,只是用一个技术或手段,请动态页面中的“?”等一些符号用蜘蛛可以很内容识别出来的字母给代替了。所以像这种静态页面,要向服务器发出请求时,还要多出一个功能就是转化功能,如何同时请求过多,会加大服务器的负荷。
第二、容量,对于容量而言,因为静态页面是实实在在存在于服务器中,因此会占用一定的空间,如何文件过多,占用的空间就多。然而伪静态就可以避免这一点,因为伪静态是将动态的URL给转换成静态,实际在服务器上是不存在的。 第三、搜索引擎友好性。对于静态URL页面,实实在在存在于服务器上,当搜索引擎收录之后,URL是不会改变的,哪有用户访问时,也不会出问题。然而如果是伪静态页面,服务器伪静态组件不出问题,这个URL就没有问题,如何伪静态组件出问题了,哪么当搜索引擎收录这个URL就会出错,如果出现错误过多,会让搜索引擎讨厌你网站,所以在试用伪静态页面时,伪静态组件,一定不要出错。
ps:网站如何优化可以参考:http://xiongzaiqiren.blog.163.com/blog/static/129287185201111595253458/