With the use of the .Summary page variable, Hugo can generate summaries of content to show snippets in summary views. The summary view snippets are automatically generated by Hugo. Where a piece of content is split for the content summary depends on whether the split is Hugo-defined or user-defined.

Content summaries may also provide links to the original content, usually in the form of a “Read More…” link, with the help of the .RelPermalink or .Permalink variable, as well as the .Truncated boolean variable to determine whether such “Read More…” link is necessary.

Hugo-defined: automatic summary split

By default, Hugo automatically takes the first 70 words of your content as its summary and stores it into the .Summary variable, which you may use in your templates.

  • Pros: Automatic, no additional work on your part.
  • Cons: All HTML tags are stripped from the summary, and the first 70 words, whether they belong to a heading or to different paragraphs, are all lumped into one paragraph. Some people like it, but some people don’t.

User-defined: manual summary split:

Alternatively, you may add the <!--more--> summary divider0 where you want to split the article. Content prior to the summary divider will be used as that content’s summary, and stored into the .Summary variable with all HTML formatting intact.

  • Pros: Freedom, precision, and improved rendering. All formatting is preserved.
  • Cons: Need to remember to type <!--more--> (or # more for org content) in your content file. :-)

Be careful to enter <!--more--> (or # more for org content) exactly, i.e. all lowercase with no whitespace, otherwise it would be treated as regular comment and ignored.

If there is nothing but spaces and newlines after the summary divider then .Truncated will be false.

Showing Summaries

You can show content summaries with the following code. You could do this, for example, on a list page.

{{ range first 10 .Data.Pages }}
  <div class="summary">
    <h4><a href="{{ .RelPermalink }}">{{ .Title }}</a></h4>
    {{ .Summary }}
  </div>
  {{ if .Truncated }}
  <div class="read-more-link">
    <a href="{{ .RelPermalink }}">Read More…</a>
  </div>
  {{ end }}
{{ end }}

Note how the .Truncated boolean valuable may be used to hide the “Read More…” link when the content is not truncated, i.e. when the summary contains the entire article.