使用搜索引擎友好的链接

问题描述:

我正在开发一个PHP的网站,目前我的链接是一个Facebook十岁上下的风格,像这样使用搜索引擎友好的链接

me.com/profile.php?id=123 

我想移动的东西更友好的爬行搜索发动机 (如在这里计算器),是这样的:

me.com/john-adams

但我怎么可以从两个用户具有相同名称的区别 - 或者更准确地说,如何做计算器告诉从与两个问题的区别相同的标题? 我正在考虑做类似

me.com/john-adams-123 

并解析url。

其他建议?

+0

处理字符串http://*.com/questions/975240/I-love-badgers 此亦这个问题 - 数字是表中的id,最后一位仅用于搜索引擎优化,看起来很漂亮。 – 2009-06-27 12:44:05

*与me.com/john-adams-123选项类似,但更像me.com/123/john-adams,其中john-adams部分实际上没有程序化含义。您提出的方式稍微好一些,因为语义内容*数字标识在URL中更靠右。

我会做的是在用户表中存储一个独特的slu((这些SEO友好的URL组件通常被称为slu)),并在必要时添加数字以获得唯一的一个。

+0

实际上,使用数字标识符更好,因为在使用相对较短的整数值的索引列时,与较长的字符串(varchar)值相比,数据库性能更好。 – zappan 2009-06-27 12:45:34

在堆栈溢出的情况下,它

http://*.com/questions/975240/using-seo-friendly-links 

http://*.com/questions <- Constant prefix 
/975240       <- Unique question id 
using-seo-friendly-links   <- Any text at all, defaults to title of question. 

的Facebook,而另一方面,已经决定只让大家挑一个唯一的ID。然后他们将使用它作为个人资料页面。类似http://facebook.com/p/username/。他们正在解决用户之间的唯一性问题,只需要它是用户选择的字符串,这在所有现有用户中是唯一的。

SO'cheats':-)。

您的问题的链接是“Using SEO-friendly links”,但“Using SEO-friendly links”也适用。

数字后面的部分是SEO友好位,但是SO并不真正关心那里有什么。我认为它默认为问题标题。

所以你的情况,你可以构建像一个链接:

me.com/123/john-adams 

第二约翰·亚当斯将有不同的ID和一个唯一的URL,如:

me.com/111/john-adams 

我会跟你走风格me.com/john-adams-123,因为我认为URI的最左边部分在SEO排名中更重要。

其实,如果你愿意用这几个控制器(不只是用户配置文件),您可能需要使用一个重写规则重定向/.+-profile-(\d+)profile.php?uid=$1,仍然能够使用,要说到做到这更像me.com/john-adams-profile-123me.com/john-adams-articles-123对于这位用户的文章...

我会说,你提出的解决方案是一个更好的解决这一*s的,因为它保留了内容层次结构:独特的ID的

me.com/john-adams-123 

使用之前,用户名就是荒谬的。

我会,但是,建议内容类型的执法:

me.com/john-adams-123.html 

这将允许一致的URL,同时提供各种内容类型。

此外,还可以利用sexatrigesimal为唯一的ID,以进一步减少不必要的冗余代码的数量在您的网址,尤其是对高端的数字,但这往往是矫枉过正:d

me.com/john-adams-123.html -> me.com/john-adams-3F.html 
me.com/john-adams-1234567890.html -> me.com/john-adams-KF12OI.html 

最后,请务必对不符合要求的可访问URI使用301重定向,以重定向到“正确”的适用于网络的架构,以防止重复的内容处罚。

+1

今天我学到了一些东西 - sexatrigeimal。谢谢 :) – 2009-06-10 13:24:16

为了避免处理包含特殊字符的链接,您可以使用Zend Framework的这个插件。

https://github.com/btlagutoli/CharConvert

$filter2 = new Zag_Filter_CharConvert(array(
       'onlyAlnum' => true, 
       'replaceWhiteSpace' => '-' 
      )); 
echo $filter2->filter('éééé ááááá ? 90 :');//eeee-aaaaa-90 

这可以帮助你在其他语言中