【问题标题】:How can I avoid using URL parameters with Laravel?如何避免在 Laravel 中使用 URL 参数?
【发布时间】:2019-10-26 02:07:33
【问题描述】:

我有一个以索引视图列出视频的页面。 该视图可按多个指标过滤,例如“最新视频优先”和“排名最高的视频优先”。用户可以从这些选项中进行选择。

过滤器信息存储在用户会话中。为了控制会话参数,当用户单击过滤器按钮时,会调用不同的路由,例如“domain.com/videos/newest”或“domain.com/videos/ranking”。

取决于调用哪个路由,服务器会更改会话参数。

事实上,相同的页面已呈现,但视频以不同的顺序列出。这会导致重复的页面标题、元描述和类似的东西。应该避免这种情况。我想要一个路由“domain.com/videos”而不需要额外的过滤器控制参数。

显然有不同的方法:

  1. 坚持目前的解决方案,提供不同的路线,通向相同的渲染页面,并处理重复的内容。

  2. 使用像domain.com/videos?filter=newest这样的GET参数,从SEO的角度来看也不好。

  3. 使用 Cookies 将信息存储在每个 Requestheader 中,这导致我需要 Cookie 协议消息,并使页面体验变得丑陋。

  4. ...

是否有处理所描述问题的建议?

更新

@Tim Lewis 建议(非常感谢您的回复):

如果你不想要 URL 参数,你可以做一个 POST 请求,将这些过滤/搜索/排序值存储在 Laravel 的会话中,然后在 GET 请求中引用它们; $sort = session()->get("排序");或类似的。它们不会出现在 URL 中,并且 SEO 会知道的唯一页面是 domain.com/videos

有更多的人去确认吗?

【问题讨论】:

  • 如果你不需要 URL 参数,你可以做一个 POST 请求,将这些过滤/搜索/排序值存储在 Laravel 的会话中,然后在 GET 请求中引用它们; $sort = session()->get("sort"); 或类似的。它们不会出现在 URL 中,并且 SEO 会知道的唯一页面是 domain.com/videos
  • 请注意;此问题可能因“主要基于意见”而关闭;人们往往无法同意最好的方法是什么,所以我不知道你是否会得到一个明确的答案。如果您确实决定采用特定方法,请随时将其作为答案发布并关闭此问题。
  • 我删除了固执己见的“最佳实践”部分,因为这足以回答
  • @Tim Lewis:这意味着打开一个新的 POST 路由来提交表单,并在通过调整会话变量对表单内容做出反应后硬重定向到先前的 GET 路由。在我看来,这似乎搞砸了,因为搜索引擎会跟踪新创建的 POST 路由并惩罚重定向。
  • @Machavity:我不是 100% 确认标题更改。这个问题几乎针对搜索引擎优化。避免 URL 参数通常会带来更好的解决方案,正如 Tim Lewis 提到的那样,但不会是 SEO 优化的最佳方法。我认为“处理过滤页面以进行 SEO 优化”或类似的内容会更好地描述问题。

标签: php laravel url get


【解决方案1】:

不必担心 GET 参数,而是通过在所有各种过滤路由上输出来为您的视频页面设置 canonical link:

<link rel="canonical" href="http://example.com/videos">

这将阻止索引相同内容的替代视图。

【讨论】:

猜你喜欢
  • 2014-04-08
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 2016-03-24
  • 2011-07-30
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
相关资源
最近更新 更多