OctoberCMS RainLab Blog分页导致重复内容SEO问题解决方法
OctoberCMS RainLab Blog 分页重复内容解决方案
问题根因
当前配置的路由规则/blog/:page?|^[0-9]+$设计逻辑合理:page为可选参数,仅匹配纯数字格式,不带参数时默认渲染第一页内容。出现重复内容判定的核心原因是RainLab Blog内置的分页导航组件,生成导航链接时未对第一页做特殊判断,始终按页码值拼接URL后缀,导致从第2页点击“上一页”时,生成的返回链接为带/1后缀的地址,与无参数的第一页内容完全重合。
具体落地解决方法
从源头调整分页链接生成逻辑,消除带/1的第一页链接
- 定位博客列表页中输出分页导航的模板代码,默认RainLab Blog组件会直接调用分页器的原生渲染方法输出全部分页导航。
- 重写分页判断逻辑,对页码值为1的链接做特殊处理:不拼接页码参数后缀,直接生成指向博客根路径的链接。
- 参考实现代码:如果原本使用原生分页输出
{{ posts.render|raw }},可以替换为自定义的上一页链接判断逻辑,当计算得出的目标页码为1时,不传递page参数:
{% if posts.currentPage > 1 %} {% set prevPage = posts.currentPage - 1 %} {% if prevPage == 1 %} <a href="{{ 'blog'|page }}">上一页</a> {% else %} <a href="{{ 'blog'|page({ page: prevPage }) }}">上一页</a> {% endif %} {% endif %}
修改后从第2页点击“上一页”,将直接跳转至无参数的博客第一页路径,不再生成带/1后缀的地址。
配置301永久重定向兜底,覆盖已收录的重复地址
- 即使调整了前端链接逻辑,仍可能存在外部旧链接、搜索引擎已收录的
/blog/1地址被访问的情况,通过301重定向可以将这些请求的权重完全传递到正确的第一页地址。 - 可根据站点部署环境,在Web服务器(Nginx/Apache)的配置文件中添加规则,将
/rosterelf/blog/1的精确路径请求,301重定向到/rosterelf/blog。 - 也可以在OctoberCMS的路由配置文件
routes.php中添加轻量的重定向规则,无需改动服务器配置:
Route::redirect('/rosterelf/blog/1', '/rosterelf/blog', 301);
配置canonical标签,明确页面规范地址
- 对所有能正常访问的第一页请求(不管URL是否带
/1后缀),在页面头部输出统一的canonical标签,指定博客第一页的规范路径为不带参数的/blog地址,搜索引擎会自动依据canonical标签归并重复内容,不会触发重复内容判定。 - 实现时需注意:canonical标签的值不要直接取当前页面的访问URL,要加判断逻辑,只要当前渲染的是第一页内容,就统一输出固定的规范地址。
内容的提问来源于stack exchange,提问作者Mittul At TechnoBrave
相关产品推荐
相关产品推荐

