Ruby on rails 使用301重定向来维护SEO

Ruby on rails 使用301重定向来维护SEO,ruby-on-rails,seo,http-status-code-301,slug,friendly-id,Ruby On Rails,Seo,Http Status Code 301,Slug,Friendly Id,我目前正在rails应用程序中使用freindly_id gem来缓冲URL并使它们看起来更漂亮。因此,它们不是URL#root/cities/1234,而是#root/cities/#cityname 我们正在寻找将URL中的cityname部分更改为其他内容,这似乎与将数据库中的slug更改为简单地读取其他内容一样直接,然而,有人建议我们必须使用301重定向,以维护我们迄今为止获得的SEO 有谁能告诉我,使用slug更改URL是否有影响,因为从我的角度来看,URL基本上没有真正更改,例如,基

我目前正在rails应用程序中使用freindly_id gem来缓冲URL并使它们看起来更漂亮。因此,它们不是URL#root/cities/1234,而是#root/cities/#cityname

我们正在寻找将URL中的cityname部分更改为其他内容,这似乎与将数据库中的slug更改为简单地读取其他内容一样直接,然而,有人建议我们必须使用301重定向,以维护我们迄今为止获得的SEO


有谁能告诉我,使用slug更改URL是否有影响,因为从我的角度来看,URL基本上没有真正更改,例如,基础URL仍然是/cities/1234

我不会直接在数据库中执行此操作。如果您使用友好的ID功能,那么如果rails控制器使用的是过时的slug,您可以在它中执行重定向

从文件中:

before_filter :find_post

def find_post
  @post = Post.find params[:id]

  # If an old id or a numeric id was used to find the record, then
  # the request path will not match the post_path, and we should do
  # a 301 redirect that uses the current friendly id.
  if request.path != post_path(@post)
    return redirect_to @post, :status => :moved_permanently
  end
end

当您的页面上没有分页时,上述答案有效。 有时您必须使用分页,然后上面的答案将始终将用户发送回模型的第一页。如果你必须这样做,我认为最好将你的id与你的模型的slug进行比较,如下所示:

  if request.parameters[:id] != @post.slug
    return redirect_to post_path(@post, page: params[:page]), status: :moved_permanently
  end

这样,用户将重定向到正确的分页页面

,这就是我标记SEOalso的原因,如果有更好的方法使用slug并维护当前流量,这是一个有效的问题,我不会直接在数据库中这样做。如果你使用friendly_ids功能,你可以在你的rails控制器中进行重定向,如果它使用的是过时的slug。谢谢@japed--这似乎是一个很好的解决方案,我会接受这个答案,你可以将其作为一个答案发布。