这一段时间总在研究动态网址、静态网址和伪静态网址的问题。网站刚建起来,百度两天就收录了(只是首页),谷歌总没有见起色,每天就site一下,还是什么也没有。于是就上网找问题,在一篇文章中看到,搜索引擎(SE)在处理动态网址时,如www.example.com/detail.php?id=33,SE为了避免查询数据库的陷阱,遇到?就停止查找了(后面转贴的文章可以看出这种观点不正确)。突然觉得问题的严重性了,我的网站都是些动态的网址,难道是这个原因谷歌才没有收录吗。接着就上网寻找动态网址生成静态网址的方法。
之后知道生成静态网址分为真正的静态网址和伪静态网址。真正的静态网址就是这个网页确实存在,URL真正的指向它。伪静态网址,是看起来像静态网址实际上不是。开始想把网页生成真正的静态网址,虽然实施起来不是太困难,PHP也有简单的方法来实现。总感觉对于访问量小的网站开销太大,而且删除编辑起来也会不方便。所以就采用简单的生成伪静态的网址的方法,PHP可以采用伪静态使用.htaccess来重定位就行了。
今天看到了谷歌官方的对静态网址和动态网址的解释说明。看起来像论文,老外写文章总是这么有条理,说的也比较清楚。下面转贴出来,奇文共欣赏。
在跟网络管理员沟通时经常会出现这种情形,一些广为传播的理念可能在过去是正确的,但是可能已不再切合目前的情况了。当我们最近在跟几个朋友谈及关于网址的结构时就碰到这种情况。其中一个朋友很担心动态网址的使用,甚至认为“搜索引擎无法处理动态网址”。另外一个朋友觉得动态网址对搜索引擎来说完全不是问题,那些都是过去的事了。还有一个甚至说他从来都搞不懂动态网址和静态网址相比有什么区别。对于我们来说,这一刻使我们决定要好好研究一下动态网址和静态网址这个话题。首先,让我们来界定一下我们要谈论的主题:
什么是静态网址?
一个静态网址,顾名思义,就是一个不会发生变化的网址,它通常不包含任何网址参数。例如:http://www.example.com/archive/january.htm。您可以在搜索框里输入 filetype:html 在谷歌上搜索静态网址。更新此种类型网址的页面会比较耗费时间,尤其是当信息量增长很快时,因为每一个单独的页面都必须更改编译代码。这也是为什么网站管理员们在处理大型的、经常更新的网站,像在线购物网站、论坛社区、博客或者是内容管理系统时,会使用动态网址的原因。
什么是动态网址?
如果一个网站的内容存储于一个数据库,并且根据要求来显示页面,这时就可以使用动态网址。在这种情况下,网站提供的内容基本上是基于模板形式的。通常情况下,一个动态网址看起来像这样:http://code.google.com/p/google-checkout-php-sample-code/issues/detail?id=31。您可以通过寻找像? = & 这样的符号识别出动态网址。动态网址有一个缺陷是不同的网址可以拥有相同的内容。这样导致不同的用户可能链向含有不同参数的网址,但是这些网址却都含有相同的内容。这也是为什么网络管理员有时候想要将这些动态网址重写成静态网址的原因之一。
我是不是应该让我的动态网址看起来是静态的呢?
在处理动态网址时,希望您能了解以下几点事实:
- 要正确地生成和维护从动态网址到静态化网址的重写转变实际上是一件很难的事情。
- 将原始的动态网址提供给我们会比较安全,请让我们来处理诸如探测和避开那些有问题的参数的事情。
- 如果您想重写网址,请去掉那些不必要的参数,同时请保持它动态网址的样子。
- 如果您想提供一个静态网址代替动态网址,那么您应该切实地生成相应的静态内容。
静态和动态网址,Googlebot对于哪一个识别得更好呢?
我们碰到过很多网站管理员,像我们的朋友那样,认为静态或者看起来是静态的网址对于网站的索引和排名是有优势的。这种看法是基于这样一个假设,即认为搜索引擎在抓取和分析含有会话标识(session ID)和来源追踪器(source tracker)的网址时是有问题的。然而,事实是,谷歌在这两个方面都有了相当的进展。就点击率来说,静态网址可能略微有些优势,因为用户可以很容易地读懂这个网址。但是,就索引和排名来说,使用数据库驱动网站并不意味着明显的劣势。相比较将参数隐藏以使他们看起来是静态的网址来说,我们更希望网站将动态的网址直接提供给搜索引擎。
现在,让我们来看一些有关动态网址的广为传播的看法,并且来纠正一些蒙蔽网站管理员的假说。:)
传说:“动态网址不能被抓取。”
事实:我们可以抓取动态网址并且解释不同的参数。如果您为了让网址看起来像是静态的,而隐藏那些可以给谷歌提供有价值信息的参数,这样做反而会给该网址的抓取和排名带来麻烦。我们的建议是:请不要将一个动态网址改换格式以使其看起来是静态的。尽可能地使用静态网址来显示静态内容是可取的,但在您决定展示动态内容的情况下,请不要将参数隐藏起来从而使他们看起来像是静态的,因为这样做会删除掉那些有助于我们分析网址的有用信息。
传说:“动态网址的参数要少于3个。”
事实:对于参数的数量是没有限制的。但是,一个好的经验是不要让您的网址太长(这个适用于所有的网址,不论是静态的还是动态的)。您可以去掉一些对于Googlebot来说不重要的参数,给用户一个好看一点的动态网址。如果您不能确定可以去掉哪些参数,我们建议您将动态网址中所有的参数都提供给我们,我们的系统会弄明白哪一些是不重要的。将参数隐藏起来会影响我们正确地分析您的网址,我们也就不能识别这些参数,一些重要信息可能也因此丢失了。
下面一些是我们认为您可能会存在疑问的一些问题。
这是否意味着我应该完全避免重写动态网址?
这是我们的建议,除非您能确保您只是去掉多余的参数,或能够把所有有可能有不良影响的参数完整地删除。如果您把自己的动态网址任意修改使其看起来像是静态的,您要清楚这样做是有风险的,有可能会导致有些信息不能被正常地编译和识别。如果您想给您的网站再增加一个静态的版本,请您一定要提供一个真正意义上的静态的内容,比如生成那些可以通过网站相应路径而获取的文件。如果您仅仅是修改了动态网址的表现形式,而没有真正提供静态的内容,那么您有可能适得其反。请直接把标准的动态URL提供给我们,我们会自动找出那些冗余的参数。
你能给我举一个例子么?
如果您有一个像下面这样标准格式的动态网址:foo?key1=value&key2=value2,我们建议您不用改动它,谷歌会决定哪些参数可以去掉;或者您可以为用户去掉那些不必要的参数。不过要慎重,仅仅去掉那些不重要的参数。这里有一个含有多个参数的动态网址的例子:
www.example.com/article/bin/answer.foo?language=en&answer=3&sid=98971298178906&query=URL
- language=en – 标明这篇文章的语言
- answer=3 – 这篇文章含有数字3
- sid=8971298178906 – 会话标识代码是8971298178906
- query=URL – 使这篇文章被找到的查询是[URL]
并不是所有的参数都提供额外的信息。所以将这个网址重写为www.example.com/article/bin/answer.foo?language=en&answer=3 可能不会引起任何问题,因为所有不相关的参数都去掉了。
下面是一些经过认为修改而看起来像是静态网址的例子。相比较没有重写、直接提供动态网址来说,这些网址可能会引起更多抓取方面的问题。
- www.example.com/article/bin/answer.foo/en/3/98971298178906/URL
- www.example.com/article/bin/answer.foo/language=en/answer=3/ sid=98971298178906/query=URL
- www.example.com/article/bin/answer.foo/language/en/answer/3/sid/ 98971298178906/query/URL
- www.example.com/article/bin/answer.foo/en,3,98971298178906,URL
如果您将动态网址重写成如上所述的示例的话,可能会导致我们很多不必要的抓取,因为这些网址中都含有会话标识(sid)和查询(query)参数的可变值,这无形中生成了很多看起来不同的URL,而他们包含的内容却是相同的。这些格式让我们很难理解通过这个网址返回的实际内容和参数URL以及98971298178906是无关的。不过,下面这个重写的例子却将所有无关的参数都去掉了:
- www.example.com/article/bin/answer.foo/en/3
尽管我们可以正确地处理这个网址,我们还是不鼓励您使用这样的重写。因为它很难维护,而且一旦一个新的参数被加到原始的动态网址,那么这个网址就需要马上更新。不这样做的话就会再次导致生成一个隐藏了参数的貌似静态网址的URL。所以最好的解决方法是通常将动态网址保持他们原来的样子。或者,如果您去掉不相关的参数,请记住一定要保持这个网址是动态的:
- www.example.com/article/bin/answer.foo?language=en&answer=3
我们希望这篇文章能够对您和我们的朋友有帮助,使围绕动态网址的各种推测清晰化。如果您有更多的问题的话,欢迎加入我们的网站管理员支持论坛进行讨论。