Jekyll Blog Post Tags

Programming Tutorials

My blog uses the Jekyll static site generator. This blog post will show you how I implemented the tag system on this blog, without installing any modifications or plugins. My blog is hosted on GitHub pages, so this is a requirement.

Assign tags to blog posts

Firstly, you need to give each blog post some tags. You need to do this in the post’s front matter table, in a custom property called ‘tags’.

title: Blog Title
layout: post
- tag1
- tag2
- tag3
- tag4

Create Index Pages

Next you need to create a page which shows all the posts in a particular tag.

{% for post in site.posts %}
{% if post.tags contains "reviews" %}
<article class="blog">
<h2><a href="{{ post.url }}">{{ post.title }}</a></h2>
<span class="topright">
<a href="{{ post.url }}">
{{ | date_to_long_string }}
{{ post.content }}
{% endif %}
{% endfor %}

I saved this as /tags/reviews.html, but the place is up to you.

Add list of tags to the post’s layout

<ul class="tags">
{% for tag in page.tags %}
<li><a href="{{ site.base_url }}tags/{{ tag | replace:" ":"_" }}">
{% endfor %}

I put this in the layout for displaying posts. You can use a slightly modified version on blog post lists, such as the homepage.

Here is the style for it:

.tags:before {
color: #666;
content: "In: ";

.tags {
margin: 0 0 6px 20px;
padding: 0;

.tags li {
display: inline-block;
margin: 0;
padding: 0 3px 0 0;
.tags li a {
display: block;
padding: 0;
margin: 0;
color: #777;
text-decoration: none;

.tags li a:hover {
color: #999;
text-decoration: underline;

.tags li a:after {
content: ",";

.tags li:last-child a:after {
content: "";