llms.txt для Hugo

Два подхода: статический файл в static/ (без настройки, работает везде) или пользовательский формат вывода, автоматически создающий llms.txt из вашего content во время сборки.

Последнее обновление:

Вариант 1: статический файл (рекомендуется)

Hugo копирует всё из static/ каталог напрямую в public/ результат сборки. Разместите llms.txt там, и он будет доступен по адресу /llms.txt на любой платформе хостинга, изменения конфигурации Hugo не требуются.

static/llms.txt, directory structure
# Hugo, zero-config static approach
#
# Place your file at: static/llms.txt
# Hugo copies everything in static/ directly to the public/ output directory.
# Your file will be served at /llms.txt on any host.
#
# Project structure:
# your-hugo-site/
# ├── static/
# │   └── llms.txt   ← add this
# ├── content/
# ├── layouts/
# └── hugo.toml
#
# No config changes needed. Run "hugo" and it appears in public/llms.txt.

После выполнения hugo, вы найдёте public/llms.txt в результатах сборки. Разверните public/ в Cloudflare Pages, Vercel, GitHub Pages или на любом статическом хостинге.

Вариант 2: пользовательский формат вывода

Система выходных форматов Hugo позволяет создавать файлы любого типа из содержимого с помощью шаблонов Go. Определите новый LLMSTXT формат в конфигурации, затем создайте шаблон, Hugo создаёт public/llms.txt автоматически при каждом hugo запуск.

Шаг 1: добавьте формат вывода в конфигурацию

hugo.toml
# hugo.toml, define the llmstxt custom output format

[outputs]
  home = ["HTML", "RSS", "LLMSTXT"]

[outputFormats.LLMSTXT]
  mediaType = "text/plain"
  baseName = "llms"
  isPlainText = true
  notAlternative = true

Используете YAML? Конфигурация та же:

hugo.yaml
# hugo.yaml, same config in YAML

outputs:
  home:
    - HTML
    - RSS
    - LLMSTXT

outputFormats:
  LLMSTXT:
    mediaType: text/plain
    baseName: llms
    isPlainText: true
    notAlternative: true

Ключевые настройки: mediaType = "text/plain" (чтобы Hugo записал обычный текстовый файл), baseName = "llms" (создаёт llms.txt), и notAlternative = true (подавляет нежелательный <link rel="alternate"> тег в вашем HTML).

Написание шаблона

Создайте шаблон в layouts/index.llmstxt.txt. Hugo использует главная шаблон для вывода в корне. Вот простая версия, перечисляющая все обычные страницы:

layouts/index.llmstxt.txt, simple
{{/* layouts/index.llmstxt.txt */}}
{{/* Hugo home template for the llmstxt output format */}}
# {{ .Site.Title }}

> {{ .Site.Params.description }}

{{ with .Site.Params.llmstxtContext }}{{ . }}

{{ end -}}
## Pages

{{ range .Site.RegularPages -}}
- [{{ .Title }}]({{ .Permalink }}): {{ with .Description }}{{ . }}{{ else }}{{ .Summary | plainify | truncate 120 }}{{ end }}
{{ end }}

Для сайта с несколькими разделами содержимого (блог, документация, руководства) организуйте их по разделам:

layouts/index.llmstxt.txt, by section
{{/* layouts/index.llmstxt.txt, organized by section */}}
# {{ .Site.Title }}

> {{ .Site.Params.description }}

{{ range .Site.Sections -}}
## {{ .Title }}

{{ range .Pages -}}
- [{{ .Title }}]({{ .Permalink }}): {{ with .Description }}{{ . }}{{ else }}{{ .Summary | plainify | truncate 100 }}{{ end }}
{{ end }}
{{ end -}}

## Optional

- [Homepage]({{ .Site.BaseURL }}): site entry point.
content/docs/getting-started.md
---
# content/docs/getting-started.md
title: "Getting started"
description: "Install the CLI, run your first command, and deploy in under 5 minutes."
draft: false
---

Your content here...

Развёртывание

  • Cloudflare Pages, задайте команду сборки как hugo и каталог публикации в public. Cloudflare Pages будет отдавать public/llms.txt в /llms.txt из глобальной CDN. См. Руководство по Cloudflare Pages для рекомендаций по заголовкам кэша.
  • Vercel, Hugo определяется автоматически. Укажите команду сборки как hugo и каталог вывода в public. См. Руководство Vercel для вариантов кэширования на периферии.
  • GitHub Pages, используйте рабочий процесс GitHub Actions, который запускает hugo и развёртывает public/ в gh-pages ветке. Файл будет доступен по адресу https://your-org.github.io/llms.txt.
  • Любой статический хостинг, разверните public/ каталог. Файл окажется в корневом каталоге и будет обслуживаться корректно.

Проверить

Сначала проверьте локально:

Local verification
hugo
ls public/llms.txt          # should exist
cat public/llms.txt          # check content
https_proxy="" hugo server
curl http://localhost:1313/llms.txt

После развёртывания:

Production verification
curl -I https://yoursite.com/llms.txt
# Expected:
# HTTP/2 200
# content-type: text/plain; charset=utf-8

Затем вставьте URL в валидатор для полной проверки соответствия спецификации.

Связанные руководства

Источники