我正在开发一个PHP网站,目前我的链接采用facebook-ish风格,如此
me.com/profile.php?id=123
我正在考虑采用更友好的方式来抓取搜索引擎 (就像在stackoverflow这样),类似于:
me.com/john-adams
但是如何区分具有相同名称的两个用户 - 或者更准确地说,stackoverflow如何区分具有相同标题的两个问题? 我在想做像
这样的事情me.com/john-adams-123
并解析网址。
还有其他建议吗?
答案 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.
答案 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
这可以帮助您处理其他语言的字符串