【问题标题】:What are the pro/cons if I expose entities keys in url?如果我在 url 中公开实体键,有什么优点/缺点?
【发布时间】:2012-07-25 18:23:08
【问题描述】:
我知道使用 symfony2 通过路由系统获取漂亮的 url 非常简单,我喜欢它。但是当路由参数仅基于 slug 时,我必须通过 slug 找到。
$em->getRepository('Bundle:Entity')->findOneBySlug($slug);
我正在考虑结合两个参数,例如 stackoverflow http://mysite.com/articles/234/the-title。仅为 SEO 保留 slug 参数建议并直接使用实体 id (234) 查找。
$em->getRepository('Bundle:Entity')->find($id);
使用此策略的优点/缺点是什么。我是对的?
【问题讨论】:
标签:
url
symfony
routing
seo
【解决方案1】:
我会按照您的建议使用唯一标识符和 slug,因为您不必担心这种方式的唯一 slug。
但你应该做的一件事是检查 slug 是否有效。
所以不要使用这样的 URL:/articles/{id}/{unchecked-slug},因为如果你这样做,你可以使用无限数量的不同/邪恶 URL 访问同一篇文章,即/articles/123/the-correct-title 和 /artcle/123/some-dirty-words。
所以我建议使用这样的东西:
$em->getRepository('Bundle:Entity')->findOneBy(array('slug' => $slug, 'id' => $id);
我不是 SEO 专家,但我不认为较短的 URL 有那么重要,只要它包含有用的词,这可能是搜索的一部分。
【解决方案2】:
从纯粹的 SEO 角度来看,您希望 URL 更短,因为它们往往会吸引更多点击并且更容易分享。但是,恕我直言,只迎合 SEO 将是一个错误。
向字符串添加唯一标识符将是一件聪明的事情,并且会使事情更容易查找和维护。我建议将唯一标识符放在 URL 字符串的末尾以最大化“SEO 效果”。
网址中的关键字可能是排名信号,但如果网址中的关键字与用户的查询相匹配,它们确实会提高点击率。发生这种情况时,URL 中的关键字在搜索结果页面 (SERP) 中变为粗体。通过将 ID 放在 URL 的末尾,您有助于确保 slug 中的关键字有更好的机会出现在用户面前,这意味着更有可能被加粗,这有望带来更多的点击率。
以下是我的建议:
http://example.com/articles/the-title-234
【解决方案3】:
到目前为止还没有人提出建议,所以我将提供 WordPress 的功能。如果数据库中已经存在与提供的永久链接相同的永久链接,则只需在末尾连接一个计数器。
http://example.com/blog/my-article
becomes
http://example.com/blog/my-article-2
becomes
http://example.com/blog/my-article-3
eywu 建议的方法是第二好的,但这只是因为您在永久链接中仍然有完整的 ID。没有人愿意记住这一点,它对搜索引擎没有任何意义。