2019-10-21 04:22:28 -04:00
---
2023-07-29 05:15:54 -04:00
title: Links and cross references
2019-10-21 04:22:28 -04:00
description: Shortcodes for creating links to documents.
categories: [content management]
keywords: ["cross references","references", "anchors", "urls"]
menu:
docs:
2022-11-17 10:14:29 -05:00
parent: content-management
weight: 170
2019-10-21 04:22:28 -04:00
toc: true
2022-11-17 10:14:29 -05:00
weight: 170
aliases: [/extras/crossreferences/]
2019-10-21 04:22:28 -04:00
---
2020-09-07 15:37:51 -04:00
The `ref` and `relref` shortcodes display the absolute and relative permalinks to a document, respectively.
2019-10-21 04:22:28 -04:00
2022-11-17 10:14:29 -05:00
## Use of `ref` and `relref`
2019-10-21 04:22:28 -04:00
2022-11-17 10:14:29 -05:00
The `ref` and `relref` shortcodes require a single parameter: the path to a content document, with or without a file extension, with or without an anchor. Paths without a leading `/` are first resolved relative to the current page, then to the remainder of the site.
2023-07-29 05:15:54 -04:00
```text
2022-11-17 10:14:29 -05:00
.
└── content
├── about
| ├── _index.md
| └── credits.md
├── pages
| ├── document1.md
| └── document2.md // has anchor #anchor
├── products
| └── index.md
└── blog
└── my-post.md
```
The pages can be referenced as follows:
```text
{{< /* ref "document2" */>}} // < - From pages / document1 . md , relative path
{{< /* ref "document2#anchor" */>}}
{{< /* ref "document2.md" */>}}
{{< /* ref "document2.md#anchor" */>}}
{{< /* ref "#anchor" */>}} // < - From pages / document2 . md
{{< /* ref "/blog/my-post" */>}} // < - From anywhere , absolute path
2019-10-21 04:22:28 -04:00
{{< /* ref "/blog/my-post.md" */>}}
2020-09-07 15:37:51 -04:00
{{< /* relref "document" */>}}
2019-10-21 04:22:28 -04:00
{{< /* relref "document.md" */>}}
{{< /* relref "#anchor" */>}}
2020-09-07 15:37:51 -04:00
{{< /* relref "/blog/my-post.md" */>}}
```
2022-11-17 10:14:29 -05:00
index.md can be reference either by its path or by its containing folder without the ending `/` . \_index.md can be referenced only by its containing folder:
2020-09-07 15:37:51 -04:00
2022-11-17 10:14:29 -05:00
```text
{{< /* ref "/about" */>}} // < - References / about / _index . md
{{< /* ref "/about/_index" */>}} // Raises REF_NOT_FOUND error
{{< /* ref "/about/credits.md" */>}} // < - References / about / credits . md
{{< /* ref "/products" */>}} // < - References / products / index . md
{{< /* ref "/products/index" */>}} // < - References / products / index . md
2019-10-21 04:22:28 -04:00
```
2022-11-17 10:14:29 -05:00
To generate a hyperlink using `ref` or `relref` in markdown:
2019-10-21 04:22:28 -04:00
2022-11-17 10:14:29 -05:00
```text
[About ]({{</* ref "/about" */>}} "About Us" )
```
2019-10-21 04:22:28 -04:00
2020-09-07 15:37:51 -04:00
Hugo emits an error or warning if a document cannot be uniquely resolved. The error behavior is configurable; see below.
2019-10-21 04:22:28 -04:00
### Link to another language version
2020-09-07 15:37:51 -04:00
To link to another language version of a document, use this syntax:
2019-10-21 04:22:28 -04:00
```go-html-template
{{< /* relref path="document.md" lang="ja" */>}}
```
2023-07-29 05:15:54 -04:00
### Get another output format
2019-10-21 04:22:28 -04:00
2020-09-07 15:37:51 -04:00
To link to another Output Format of a document, use this syntax:
2019-10-21 04:22:28 -04:00
```go-html-template
{{< /* relref path="document.md" outputFormat="rss" */>}}
```
2020-09-07 15:37:51 -04:00
### Heading IDs
2019-10-21 04:22:28 -04:00
2020-09-07 15:37:51 -04:00
When using Markdown document types, Hugo generates element IDs for every heading on a page. For example:
2019-10-21 04:22:28 -04:00
2020-09-07 15:37:51 -04:00
```md
## Reference
2019-10-21 04:22:28 -04:00
```
2020-09-07 15:37:51 -04:00
produces this HTML:
2019-10-21 04:22:28 -04:00
2020-09-07 15:37:51 -04:00
```html
< h2 id = "reference" > Reference< / h2 >
2019-10-21 04:22:28 -04:00
```
2020-09-07 15:37:51 -04:00
Get the permalink to a heading by appending the ID to the path when using the `ref` or `relref` shortcodes:
2019-10-21 04:22:28 -04:00
2020-10-30 04:49:15 -04:00
```go-html-template
{{< /* ref "document.md#reference" */>}}
{{< /* relref "document.md#reference" */>}}
2020-09-07 15:37:51 -04:00
```
2019-10-21 04:22:28 -04:00
2020-09-07 15:37:51 -04:00
Generate a custom heading ID by including an attribute. For example:
2019-10-21 04:22:28 -04:00
2020-09-07 15:37:51 -04:00
```md
## Reference A {#foo}
## Reference B {id="bar"}
```
2019-10-21 04:22:28 -04:00
2020-09-07 15:37:51 -04:00
produces this HTML:
2019-10-21 04:22:28 -04:00
2020-09-07 15:37:51 -04:00
```html
< h2 id = "foo" > Reference A< / h2 >
< h2 id = "bar" > Reference B< / h2 >
2019-10-21 04:22:28 -04:00
```
2020-09-07 15:37:51 -04:00
Hugo will generate unique element IDs if the same heading appears more than once on a page. For example:
```md
## Reference
## Reference
## Reference
```
produces this HTML:
```html
< h2 id = "reference" > Reference< / h2 >
< h2 id = "reference-1" > Reference< / h2 >
< h2 id = "reference-2" > Reference< / h2 >
2019-10-21 04:22:28 -04:00
```
## Ref and RelRef Configuration
2023-05-27 10:59:59 -04:00
The behavior can, since Hugo 0.45, be configured in `hugo.toml` :
2019-10-21 04:22:28 -04:00
2022-11-17 10:14:29 -05:00
refLinksErrorLevel ("ERROR")
2019-10-21 04:22:28 -04:00
: When using `ref` or `relref` to resolve page links and a link cannot resolved, it will be logged with this log level. Valid values are `ERROR` (default) or `WARNING` . Any `ERROR` will fail the build (`exit -1`).
refLinksNotFoundURL
: URL to be used as a placeholder when a page reference cannot be found in `ref` or `relref` . Is used as-is.
[lists]: /templates/lists/
[output formats]: /templates/output-formats/
[shortcode]: /content-management/shortcodes/