1
0
Fork 0
hugo/docs/content/en/configuration/permalinks.md

3.7 KiB

title linkTitle description categories keywords
Configure permalinks Permalinks Configure permalinks.

This is the default configuration:

{{< code-toggle config=permalinks />}}

Define a URL pattern for each top-level section. Each URL pattern can target a given language and/or page kind.

[!note] The url front matter field overrides any matching permalink pattern.

Monolingual example

With this content structure:

content/
├── posts/
│   ├── bash-in-slow-motion.md
│   └── tls-in-a-nutshell.md
├── tutorials/
│   ├── git-for-beginners.md
│   └── javascript-bundling-with-hugo.md
└── _index.md

Render tutorials under "training", and render the posts under "articles" with a date-base hierarchy:

{{< code-toggle file=hugo >}} [permalinks.page] posts = '/articles/:year/:month/:slug/' tutorials = '/training/:slug/' [permalinks.section] posts = '/articles/' tutorials = '/training/' {{< /code-toggle >}}

The structure of the published site will be:

public/
├── articles/
│   ├── 2023/
│   │   ├── 04/
│   │   │   └── bash-in-slow-motion/
│   │   │       └── index.html
│   │   └── 06/
│   │       └── tls-in-a-nutshell/
│   │           └── index.html
│   └── index.html
├── training/
│   ├── git-for-beginners/
│   │   └── index.html
│   ├── javascript-bundling-with-hugo/
│   │   └── index.html
│   └── index.html
└── index.html

To create a date-based hierarchy for regular pages in the content root:

{{< code-toggle file=hugo >}} [permalinks.page] "/" = "/:year/:month/:slug/" {{< /code-toggle >}}

Use the same approach with taxonomy terms. For example, to omit the taxonomy segment of the URL:

{{< code-toggle file=hugo >}} [permalinks.term] 'tags' = '/:slug/' {{< /code-toggle >}}

Multilingual example

Use the permalinks configuration as a component of your localization strategy.

With this content structure:

content/
├── en/
│   ├── books/
│   │   ├── les-miserables.md
│   │   └── the-hunchback-of-notre-dame.md
│   └── _index.md
└── es/
    ├── books/
    │   ├── les-miserables.md
    │   └── the-hunchback-of-notre-dame.md
    └── _index.md

And this site configuration:

{{< code-toggle file=hugo >}} defaultContentLanguage = 'en' defaultContentLanguageInSubdir = true

[languages.en] contentDir = 'content/en' languageCode = 'en-US' languageDirection = 'ltr' languageName = 'English' weight = 1

[languages.en.permalinks.page] books = "/books/:slug/"

[languages.en.permalinks.section] books = "/books/"

[languages.es] contentDir = 'content/es' languageCode = 'es-ES' languageDirection = 'ltr' languageName = 'Español' weight = 2

[languages.es.permalinks.page] books = "/libros/:slug/"

[languages.es.permalinks.section] books = "/libros/" {{< /code-toggle >}}

The structure of the published site will be:

public/
├── en/
│   ├── books/
│   │   ├── les-miserables/
│   │   │   └── index.html
│   │   ├── the-hunchback-of-notre-dame/
│   │   │   └── index.html
│   │   └── index.html
│   └── index.html
├── es/
│   ├── libros/
│   │   ├── les-miserables/
│   │   │   └── index.html
│   │   ├── the-hunchback-of-notre-dame/
│   │   │   └── index.html
│   │   └── index.html
│   └── index.html
└── index.html

Tokens

Use these tokens when defining a URL pattern.

{{% include "/_common/permalink-tokens.md" %}}