在基于用户生成的内容时设计URI的最佳方法

时间:2012-06-13 08:47:16

标签: http architecture uri

在我们的系统中,我们有网页的网址,其中内容(包括标题)基于用户生成的内容。我正试图找出平衡SEO,人类可读性和弹性的最佳设计。

我一直在阅读这方面的一系列材料,包括Tim Berners-Lee的文件:Cool URIs don't change

举个例子,假设我有一个书评网站,用户提交内容(措辞评论)和图书的标题和作者。

因此,如果他们为A Tale of Two Cities的作者提交了Charles Dickens(用户无意中误解了)的书评。 URL可以是:

http://foo.com/charles-dickens/a-tale-of-two-cities

稍后,如果添加了狄更斯的另一本书,那可能是:

http://foo.com/charles-dickens/oliver-twist

然后http://foo.com/charles-dickens/可以是网站上所有已审核图书的列表。

但是,如果对书名进行更改,问题就会发挥作用。想象一下,用户会误解某些内容,例如A Tale of Two City,然后会更正。这也会改变URL,并会破坏该页面的任何外部链接,pagerank等。

处理此类问题的推荐方法是什么?我看到的选项:

  1. 第一次提交获胜:最初建立后无法更改网址

  2. 上次提交获胜:始终更改网址。因此,如果对用户生成的内容进行了更改,请修改URL。使用这种方法,要么旧的URL已经死亡,要么保留所有URL更改的跟踪,并且所有URL仍然起作用。 Stackoverflow似乎就是这样。

  3. 不要在UGC上建立网址:忽略用户生成的内容,只提出不基于它的网址。所以网址可以是http://foo.com/reviews/1234

  4. 人们对此有何看法?

1 个答案:

答案 0 :(得分:1)

你有点不对劲; Stack Overflow结合了#2和#3。一个问题有一个特定的id,这就是你找到问题所需的全部内容。例如,此问题的ID为11011252。您可以使用https://stackoverflow.com/questions/11011252访问该问题,不需要添加从问题标题生成的URL部分(或者您在此情况下将其称为URI吗?)。实际上,当您使用无标题地址时,将自动添加(无论是通过重定向还是其他方法)。

更好的是,你可以将任何你想要的东西(在合理范围内,我想)附加到地址的末尾。 https://stackoverflow.com/questions/11011252/this-text-will-be-ignored会毫无疑问地带您回答问题。

Stack Overflow也不是唯一一个这样做的网站;我见过的许多其他网站专注于用户生成的内容遵循相同的协议/无论你怎么称呼它。它似乎是最好的方法,因为它结合了#3(底层URI保持不变)的优点与#2的优点(URL包含有关其目标的一些信息,用户会喜欢),以及最好的方法所有这些意味着如果两个人生成具有相同非唯一标识符的内容,您将不会遇到任何URI冲突。