Camaleon CMS for Rails 5路由重定向需求:解决URL重复内容处罚问题
解决Camaleon CMS(Rails 5)中文章多URL引发的重复内容问题
完全懂你的感受——盼着Camaleon CMS适配Rails 5,结果遇到这种多URL访问同一文章的坑,对靠搜索流量吃饭的站点来说,Google的重复内容惩罚真的是噩梦。
问题本质
Camaleon CMS的默认路由设计会让同一篇文章可以通过多种URL访问:
- 带有父页面slug的路径
- 包含文章类型slug的路径
- 可能还有其他衍生的URL变体
这种情况直接踩了Google的重复内容红线,轻则影响排名,重则被降权,必须得通过路由重定向把所有流量统一到唯一的规范URL上。
具体解决方案:路由重定向+规范标签双保险
1. 先确定你的规范URL格式
先明确你要作为唯一入口的URL结构,比如我们选最简洁的:/articles/:slug(这里假设你的文章类型slug是articles,根据自己的站点调整)
2. 在路由中添加重定向规则
打开项目的config/routes.rb,加入以下代码,把所有非规范URL重定向到规范地址:
# 处理带父slug的文章URL重定向 get '/:parent_slug/:slug', to: redirect { |params, request| # 用slug查找对应文章(Camaleon默认文章模型为CmsPost) article = CmsPost.friendly.find_by(slug: params[:slug]) # 如果找到文章就跳转到规范URL,否则保持原路径避免404 article ? "/articles/#{article.slug}" : request.path }, constraints: { slug: /[a-z0-9\-_]+/ } # 处理带文章类型变体的URL重定向 get '/:custom_post_type/:slug', to: redirect { |params, request| article = CmsPost.friendly.find_by(slug: params[:slug]) article ? "/articles/#{article.slug}" : request.path }, constraints: { custom_post_type: /[a-z0-9\-_]+/ }
小贴士:如果你的项目自定义了文章模型名称,记得替换代码中的
CmsPost;Camaleon默认用friendly_id处理slug,所以friendly.find_by可以正常匹配。
3. 验证重定向效果
重启Rails服务器后,测试一下:
- 访问
/parent-page/my-awesome-post,应该自动跳转到/articles/my-awesome-post - 访问
/news/my-awesome-post,也会跳转到规范URL - 规范URL本身能正常加载文章内容
4. 加上规范标签双重保障
除了路由重定向,在文章的视图模板里添加规范标签,明确告诉搜索引擎哪个是权威URL。找到文章详情页的视图文件(比如app/views/cms/posts/show.html.erb),在<head>里加入:
<link rel="canonical" href="<%= cms_post_url(@post) %>">
这样就算有个别非规范URL被搜索引擎抓取到,也会以规范标签指定的地址为准,彻底规避重复内容风险。
内容的提问来源于stack exchange,提问作者S Sanford
相关产品推荐
相关产品推荐

