使用SEO友好的链接

时间:2009-06-10 12:19:34

标签: php seo

我正在开发一个PHP网站,目前我的链接采用facebook-ish风格,如此

me.com/profile.php?id=123

我正在考虑采用更友好的方式来抓取搜索引擎 (就像在stackoverflow这样),类似于:

me.com/john-adams

但是如何区分具有相同名称的两个用户 - 或者更准确地说,stackoverflow如何区分具有相同标题的两个问题? 我在想做像

这样的事情
me.com/john-adams-123

并解析网址。

还有其他建议吗?

6 个答案:

答案 0 :(得分:7)

Stackoverflow与me.com/john-adams-123选项类似,但更像me.com/123/john-adams,其中john-adams部分实际上没有编程含义。你提出的方式稍好一些,因为无语义内容的数字ID在URL中更靠右边。

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

答案 1 :(得分:5)

在堆栈溢出的情况下,它是

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

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

另一方面,Facebook决定让每个人都选择一个唯一的身份证。然后他们将把它用作个人资料页面。像http://facebook.com/p/username/这样的东西。他们正在解决用户之间的唯一性问题,只需要将其作为用户选择的字符串,这在所有现有用户中都是唯一的。

答案 2 :(得分:3)

SO'作弊': - )。

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

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

因此,在您的情况下,您可以构建一个类似的链接:

me.com/123/john-adams

第二个约翰·亚当斯将拥有不同的身份证和唯一的网址,例如:

me.com/111/john-adams

答案 3 :(得分:2)

我想说你提出的解决方案是一个更好的解决方案,因为它保留了内容层次结构,因为它保留了内容层次结构:

me.com/john-adams-123

在用户名之前使用唯一ID简直是荒谬的。

但是,我建议强制执行内容类型:

me.com/john-adams-123.html

这将允许在提供各种内容类型时保持一致的网址。

此外,您可以使用sexatrigesimal作为唯一身份证,以进一步减少您网址中不必要的瑕疵,特别是对于高端数字,但这通常是矫枉过正的: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重定向,以重定向到“正确”的seo友好架构,以防止重复的内容处罚。

答案 4 :(得分:0)

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

实际上,如果您愿意在多个控制器(不仅仅是用户个人资料)上使用此功能,您可能希望更多地使用me.com/john-adams-profile-123,并将重写规则重定向到/.+-profile-(\d+) profile.php?uid=$1并且仍然可以使用me.com/john-adams-articles-123来表示此用户的文章...

答案 5 :(得分:0)

为避免处理包含特殊字符的链接,可以将此插件用于Zend Framework。

https://github.com/btlagutoli/CharConvert

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

这可以帮助您处理其他语言的字符串