4

我正在构建一个博客平台(RoR),并计划使用以下格式,有什么缺点吗?

# All Users:
http://www.example.com/users/

# A single user (123 is the user id, id is needed for uniqueness)
http://www.example.com/users/123/peter

# All Categories
http://www.example.com/categories/

# A single category listing (123 is the cat id, note: job is singular)
http://www.example.com/categories/123/job

# All Tags
http://www.example.com/tags/

# A single tag listing (123 is the tag id, note: car is singular)
http://www.example.com/tags/123/car

# A single post
http://www.example.com/posts/123/my-title

有什么建议或改进的地方吗?

谢谢。

4

5 回答 5

5

这完全取决于您的应用程序最重要的主题是什么。假设应用程序的主要主题是帖子,那么帖子的 URL 必须“更接近”根 URL。

所以他们看起来像这样:

# A single post
http://www.example.com/123-my-post-title

# All Users:
http://www.example.com/users/

# A single user (supposing the username must be unique)
http://www.example.com/users/peter

# All Categories
http://www.example.com/categories/

# A single category listing (supposing the category name must be unique)
http://www.example.com/categories/job

# All Tags
http://www.example.com/tags/

# A single tag listing (supposing tags must be unique)
http://www.example.com/tags/car

这涉及您路线的 2 处更改:

1) 去掉 URL 中的“/posts/”。为此,您可以像这样声明您的资源:

resources :posts, :path => "/"

2) 删除除 post#show 之外的所有 URL 中的 id(来自不同用户的帖子有时可能具有相同的标题,如果不是,您也可以在这些情况下省略 ID)。

为此,应该to_param像这样覆盖模型中的方法:

    class Post < ActiveRecord::Base
      def to_param
        "{id}-#{title.parameterize}"
      end
    end

或者如果您发现压倒一切困难,请使用friendly_id gem 。to_param

于 2012-06-01T10:31:10.717 回答
1

我遇到了同样的问题,我遇到了一个很棒的宝石,可以让你的网址 SEO 和人性化:friendly_id

这是一个很棒的截屏视频,可以开始使用它:Pretty URLs with FriendlyId

我不打算在这里详细介绍,因为我相信您会在文档或截屏视频中找到所需的一切。快乐的搜索引擎优化!

于 2012-05-28T11:23:58.813 回答
0

由于(我假设)用户具有唯一的昵称,因此 url 可以更简单:

http://www.example.com/users/peter

这同样适用于标签和类别。您只是不要忘记根据参数化检查名称的唯一性。

它还有助于避免重复具有相似名称的对象:

"peter the great".parameterize => "peter-the-great"
"Peter-THE-Great".parameterize => "peter-the-great" 

这只是我的观点,在大多数情况下,使用了独特的逻辑id-nameid/name(查看这个问题的 url :))。

于 2012-05-28T11:28:01.293 回答
0

我承认我对 SEO 的了解并不像 StackOverFlow 上一些更有经验的人那样深入。但是我确实知道,当涉及到 URL 时,通常适用“越短且可读性越好”的规则。因此,在 URL 中使用 id 是一个很大的挫折,并且可能会对您的 SEO 得分产生负面影响,因为您的 SEO 得分会被 google 或其他搜索引擎所吸引。

您可以在 google 的免费 SEO 入门指南中阅读有关它的信息,您可以在此处找到 PDF:http: //static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/nl//webmasters/docs/搜索引擎优化入门指南.pdf

有关 URL 的部分位于此 PDF 的第 8 页。

至于您的应用程序,避免使用 ID 的一种方法是为您的用户使用昵称。您会发现这在网络上的所有论坛上都很常用。这些昵称始终具有唯一的限制,以确保始终只有一个用户具有该昵称。它还使您可以为这些昵称创建限制,例如禁止在昵称中使用数字,这样人们就无法创建像John123.

最后,您希望得到这样的网址:

http://www.example.com/users/uniquenickname

使用类别和标签也是如此。

当涉及到帖子时,您实际上有 2 个选项,具体取决于您对帖子的确切含义。如果通过帖子您只是指博客条目,那么您可以简单地使用条目的类别、用户和标题的组合来创建一个唯一的 url。

例如 :http://www.example.com/category/uniquenickname/entrytitle

如果您在对博客条目的评论中评论帖子,那么使用上面提供的 URL 就可以了,但您可能希望在 robots.txt 中添加不允许爬虫索引这些 URL。这背后的原因是,您倾向于让垃圾邮件机器人在博客周围发布广告和指向您绝对不希望与之关联的网页的链接,并且您希望阻止爬虫索引这些链接,这可能会对您产生相当负面的影响搜索引擎优化得分。

我希望这有帮助 :)

于 2012-05-31T09:40:18.407 回答
-1

我非常自私和自豪,所以尽量让抓取我的网站变得困难:P,尽量不要在你的 url 上使用数字 ID。它可以很容易地抓取你的整个网站。尽可能制作唯一的网址。

如果您的帖子标题是唯一的,则将其设为 id 并在您的 url 中使用它。

如果您的用户名是唯一的,则将其用作 ID。例如:

# 所有用户: http ://www.example.com/users/

# A single user 
http://www.example.com/users/peter

# All Categories
http://www.example.com/categories/

# A single category 
http://www.example.com/categories/job

# All Tags 
http://www.example.com/tags/

# A single tag listing (They are unique, each one should be a key itself)
http://www.example.com/tags/car

# A single post
http://www.example.com/posts/date-here/my-unique-title

谷歌喜欢至少有三位数的网址。将日期添加到新闻 url 是一个很好的做法,它也增加了 SEO 价值。像这样 http://www.example.com/posts/2012/06/06/my-unique-title

于 2012-06-07T02:36:51.487 回答