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 (excluding posts
and drafts
) don’t have time
and categories (for pages, the above :title
is equivalent to :basename
), 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 the posts
collection becomes
/:title.html
for pages and collections (excluding posts
and drafts
).
Placeholders
Here’s the full list of placeholders available:
Variable | Description |
---|---|
|
Year from the post’s filename with four digits.
May be overridden via the document’s |
|
Year from the post’s filename without the century. (00..99)
May be overridden via the document’s |
|
Month from the post’s filename. (01..12)
May be overridden via the document’s |
|
Month without leading zeros from the post’s filename. May be
overridden via the document’s |
|
Three-letter month abbreviation, e.g. “Jan”. |
|
Full month name, e.g. “January”. |
|
Day of the month from the post’s filename. (01..31)
May be overridden via the document’s |
|
Day of the month without leading zeros from the post’s filename.
May be overridden via the document’s |
|
Ordinal day of the year from the post’s filename, with leading zeros. (001..366) |
|
Week year which may differ from the month year for up to three days at the start of January and end of December |
|
Week number of the current year, starting with the first week having a majority of its days in January. (01..53) |
|
Day of the week, starting with Monday. (1..7) |
|
Three-letter weekday abbreviation, e.g. “Sun”. |
|
Weekday name, e.g. “Sunday”. |
|
Hour of the day, 24-hour clock, zero-padded from the post’s
|
|
Minute of the hour from the post’s |
|
Second of the minute from the post’s |
|
Title from the document’s filename. May be overridden via
the document’s |
|
Slugified title from the document’s filename (any character
except numbers and letters is replaced as hyphen). May be
overridden via the document’s |
|
The specified categories for this post. If a post has multiple
categories, Jekyll will create a hierarchy (e.g. |
Built-in formats
For posts, Jekyll also provides the following built-in styles for convenience:
Permalink Style | URL Template |
---|---|
|
|
|
|
|
|
|
|
|
|
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 (including posts
and drafts
), 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 |
---|---|
|
Label of the containing collection. |
|
Path to the document relative to the collection's directory, including base filename of the document. |
|
The document's base filename, with every sequence of spaces and non-alphanumeric characters replaced by a hyphen. |
|
The |
|
Extension of the output file. (Included by default and usually unnecessary.) |
Pages
For pages, you have to use front matter to override the global permalink,
and if you set a permalink via front matter defaults in _config.yml
,
it will be ignored.
Pages have the following placeholders available:
Variable | Description |
---|---|
|
Path to the page relative to the site's source directory, excluding base filename of the page. |
|
The page's base filename |
|
Extension of the output file. (Included by default and usually unnecessary.) |