HUGO
News Docs Themes Community GitHub

ReadingTime

Returns the estimated reading time, in minutes, for the given page.

Syntax

PAGE.ReadingTime

Returns

int

The estimated reading time is calculated by dividing the number of words in the content by the reading speed.

By default, Hugo assumes a reading speed of 212 words per minute. For CJK languages, it assumes 500 words per minute.

{{ printf "Estimated reading time: %d minutes" .ReadingTime }}

Reading speed varies by language. Create language-specific estimated reading times on your multilingual site using site parameters.

languages:
  de:
    contentDir: content/de
    languageCode: de-DE
    languageName: Deutsch
    params:
      reading_speed: 179
    weight: 2
  en:
    contentDir: content/en
    languageCode: en-US
    languageName: English
    params:
      reading_speed: 228
    weight: 1
[languages]
  [languages.de]
    contentDir = 'content/de'
    languageCode = 'de-DE'
    languageName = 'Deutsch'
    weight = 2
    [languages.de.params]
      reading_speed = 179
  [languages.en]
    contentDir = 'content/en'
    languageCode = 'en-US'
    languageName = 'English'
    weight = 1
    [languages.en.params]
      reading_speed = 228
{
   "languages": {
      "de": {
         "contentDir": "content/de",
         "languageCode": "de-DE",
         "languageName": "Deutsch",
         "params": {
            "reading_speed": 179
         },
         "weight": 2
      },
      "en": {
         "contentDir": "content/en",
         "languageCode": "en-US",
         "languageName": "English",
         "params": {
            "reading_speed": 228
         },
         "weight": 1
      }
   }
}

Then in your template:

{{ $readingTime := div (float .WordCount) .Site.Params.reading_speed }}
{{ $readingTime = math.Ceil $readingTime }}

We cast the .WordCount to a float to obtain a float when we divide by the reading speed. Then round up to the nearest integer.