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标记控制导航显示
这种方法更灵活,能精准管控每个页面是否出现在导航栏:
- 打开你的主博客页面(比如
/blog/index.md),在Front Matter里添加一个专属标记:
--- title: Blog layout: blog show_in_nav: true ---
- 修改导航栏循环代码,只保留带标记的主博客页,同时正常显示其他页面:
<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
相关产品推荐
相关产品推荐

