You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll博客导航优化:避免分页页面重复显示「Blog」项

解决Jekyll导航栏中Blog项重复的问题

这个问题在使用jekyll-pagination时很常见——分页生成的/blog/page2/、/blog/page3/这类页面会被纳入site.pages集合,而它们的标题通常和主博客页一致,导致遍历生成导航栏时重复出现「Blog」项。下面给你几个简单有效的解决思路:

方法1:利用分页页面的专属属性过滤

Jekyll的分页页面会自带paginator对象,我们可以直接在循环里排除所有带分页属性的页面:

<nav>
  {% for page in site.pages %}
    {% unless page.paginator or page.url contains '/page/' %}
      <a href="{{ page.url }}">{{ page.title }}</a>
    {% endunless %}
  {% endfor %}
</nav>

这里unless page.paginator会直接筛掉所有分页页面,加上page.url contains '/page/'是双重保险,避免特殊情况漏网。

方法2:用Front Matter标记控制导航显示

这种方法更灵活,能精准管控每个页面是否出现在导航栏:

  1. 打开你的主博客页面(比如/blog/index.md),在Front Matter里添加一个专属标记:
---
title: Blog
layout: blog
show_in_nav: true
---
  1. 修改导航栏循环代码,只保留带标记的主博客页,同时正常显示其他页面:
<nav>
  {% for page in site.pages %}
    {% if page.show_in_nav == true %}
      <a href="{{ page.url }}">{{ page.title }}</a>
    {% elsif page.title != "Blog" %}
      <a href="{{ page.url }}">{{ page.title }}</a>
    {% endif %}
  {% endfor %}
</nav>

如果你的分页模板(比如_layouts/blog.html)有Front Matter,也可以给它加show_in_nav: false,然后直接用{% if page.show_in_nav != false %}来过滤。

方法3:只保留主博客页路径

如果博客页面单独放在/blog/目录,你可以直接指定只保留根路径的博客页,排除所有子路径的分页页面:

<nav>
  {% for page in site.pages %}
    {% if page.url == '/blog/' or (page.url != '/blog/' and page.url contains '/blog/' == false) %}
      <a href="{{ page.url }}">{{ page.title }}</a>
    {% endif %}
  {% endfor %}
</nav>

推荐第一种方法,不需要修改任何Front Matter,直接利用Jekyll自带的分页属性过滤,省心又高效。

内容的提问来源于stack exchange,提问作者Jiroscopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:16:02