Permalinks

Permalinks are the output path for your pages, posts, or collections. They allow you to structure the directories of your source code different from the directories in your output.

Front Matter

The simplest way to set a permalink is using front matter. You set the permalink variable in front matter to the output path you’d like.

For example, you might have a page on your site located at /my_pages/about-me.html and you want the output url to be /about/. In front matter of the page you would set:

---
permalink: /about/
---

Global

Setting a permalink in front matter for every page on your site is no fun. Luckily, Jekyll lets you set the permalink structure globally in your _config.yml.

To set a global permalink, you use the permalink variable in _config.yml. You can use placeholders to your desired output. For example:

permalink: /:categories/:year/:month/:day/:title:output_ext

Note that pages and collections don’t have time or categories, these aspects of the permalink style are ignored for the output.

For example, a permalink style of /:categories/:year/:month/:day/:title:output_ext for posts becomes /:title.html for pages and collections.

Placeholders

Here’s the full list of placeholders available:

Variable Description

year

Year from the post’s filename with four digits. May be overridden via the document’s date front matter.

short_year

Year from the post’s filename without the century. (00..99) May be overridden via the document’s date front matter.

month

Month from the post’s filename. (01..12) May be overridden via the document’s date front matter.

i_month

Month without leading zeros from the post’s filename. May be overridden via the document’s date front matter.

short_month

Three-letter month abbreviation, e.g. “Jan”.

long_month

Full month name, e.g. “January”.

day

Day of the month from the post’s filename. (01..31) May be overridden via the document’s date front matter.

i_day

Day of the month without leading zeros from the post’s filename. May be overridden via the document’s date front matter.

y_day

Ordinal day of the year from the post’s filename, with leading zeros. (001..366)

w_year

Week year which may differ from the month year for up to three days at the start of January and end of December

week

Week number of the current year, starting with the first week having a majority of its days in January. (01..53)

w_day

Day of the week, starting with Monday. (1..7)

short_day

Three-letter weekday abbreviation, e.g. “Sun”.

long_day

Weekday name, e.g. “Sunday”.

hour

Hour of the day, 24-hour clock, zero-padded from the post’s date front matter. (00..23)

minute

Minute of the hour from the post’s date front matter. (00..59)

second

Second of the minute from the post’s date front matter. (00..59)

title

Title from the document’s filename. May be overridden via the document’s slug front matter.

slug

Slugified title from the document’s filename (any character except numbers and letters is replaced as hyphen). May be overridden via the document’s slug front matter.

categories

The specified categories for this post. If a post has multiple categories, Jekyll will create a hierarchy (e.g. /category1/category2). Also Jekyll automatically parses out double slashes in the URLs, so if no categories are present, it will ignore this.

Built-in formats

For posts, Jekyll also provides the following built-in styles for convenience:

Permalink Style URL Template

date

/:categories/:year/:month/:day/:title:output_ext

pretty

/:categories/:year/:month/:day/:title/

ordinal

/:categories/:year/:y_day/:title:output_ext

weekdate

/:categories/:year/W:week/:short_day/:title.html

none

/:categories/:title:output_ext

Rather than typing permalink: /:categories/:year/:month/:day/:title/, you can just type permalink: pretty.

Specifying permalinks through the front matter

Built-in permalink styles are not recognized in front matter. As a result, permalink: pretty will not work.

Collections

For collections, you have the option to override the global permalink in the collection configuration in _config.yml:

collections:
  my_collection:
    output: true
    permalink: /:collection/:name

Collections have the following placeholders available:

Variable Description

:collection

Label of the containing collection.

:path

Path to the document relative to the collection's directory.

:name

The document's base filename, with every sequence of spaces and non-alphanumeric characters replaced by a hyphen.

:title

The :title template variable will take the slug front matter variable value if any is present in the document; if none is defined then :title will be equivalent to :name, aka the slug generated from the filename.

:output_ext

Extension of the output file. (Included by default and usually unnecessary.)