分页链接不该加 nofollow,因其非外链且需传递页面序列关系;Google 依赖 rel="next"/rel="prev" 识别连续性,加 nofollow 会导致深层页被忽略或重复索引。

为什么分页链接不该加 nofollow
分页链接本身不是外链,也不是用户不可信提交的内容,直接给 prev/next 或页码链接加 rel="nofollow" 会干扰搜索引擎对页面序列关系的理解。Google 明确表示:分页页之间的 rel="next" 和 rel="prev" 是识别内容连续性的关键信号,加了 nofollow 会让这些信号失效,反而导致深层分页页被忽略或重复索引。
ThinkPHP 分页输出中如何安全注入 rel 属性
ThinkPHP 的 paginate() 返回对象不提供直接修改单个 a 标签属性的接口,但渲染时可通过自定义模板控制 HTML 输出。关键点是:只对非当前页的页码链接添加 rel="nofollow"(比如“上一页”“下一页”“1”“2”等),而当前页的 span 不处理;同时必须保留 rel="next"/rel="prev" 语义。
- 在视图中使用
{$list->render('common/paginate')}指向自定义模板 - 新建
template/common/paginate.html,复制默认分页 HTML 结构 - 找到循环页码的
{volist name="pages" id="page"}区块,在生成a标签时判断:{if $page neq $list->currentPage()}rel="nofollow"{/if} - 对
prev链接额外加rel="prev",对next链接加rel="next",且二者不能同时带nofollow
更推荐的 SEO 替代方案:用 withPath + noindex 控制分页页权重
比起给分页链接加 nofollow,真正影响 SEO 的是分页页自身是否该被收录。ThinkPHP 默认生成的 /list?page=2 这类 URL 容易被当成重复内容。更稳妥的做法是:
- 在控制器中调用
withPath('/list')统一基础路径,避免参数污染 - 在分页页模板头部插入:
<meta name="robots" content="noindex,follow">(仅限 page > 1) - 配合 Laravel 风格的语义化路由(如
/list/page/2)需手动绑定,但 ThinkPHP 5.1+ 可通过Route::get('list/page/:page', ...)->pattern(['page' => '\d+'])实现 - 首页保持可索引,其余分页页禁止收录但允许爬虫跟随链接抓取核心内容
容易被忽略的兼容性陷阱
ThinkPHP 6.x 的分页器默认返回 LengthAwarePaginator 实例,其 render() 方法底层调用的是 think\view\driver\Think 渲染器,若项目启用了模板缓存,修改 paginate.html 后需清空 runtime/view/ 目录;另外,rel="nofollow" 与 rel="next" 共存于同一标签是合法的(如 rel="next nofollow"),但部分老旧爬虫可能忽略后者——所以务必确保 next/prev 链接不带 nofollow,这是最常翻车的地方。
立即学习“PHP免费学习笔记(深入)”;



















