Metadata
Chaves desconhecidas são erros em todos os blocos tipados. Somente extra aceita chaves livres.
MDX recebe ainda o campo gerado readingTime, que não pode ser declarado no
front matter. Ele é um objeto com words, images, minutes e text; o
campo fica nulo em páginas Blade.
Campos de nível raiz
| Campo | Tipo | Obrigatório | Default |
|---|---|---|---|
title |
string não vazia | sim | nenhum |
description |
string ou null | não | null |
date |
data ISO-8601 | não | data do Git |
cover |
string não vazia ou false | não | covers.cover |
showInNav |
bool | não | false |
navLabel |
string ou null | não | último segmento quando showInNav |
extra |
mapa/array livre | não | vazio |
robots |
string de tokens | não | tag omitida |
sitemap |
mapa | em rota indexável | nenhum |
social |
mapa | não | cards automáticos |
Cover
cover seleciona a view Blade usada para gerar a imagem social da rota:
cover: covers.article
A view é procurada em Content/Views e recebe as mesmas variáveis da rota, além de $assets, $cover, $domain, $fontStylesheet e $fontPreloads. Use $cover->asset('/'.$fontStylesheet) para carregar o stylesheet local de fontes quando ele existir e $cover->asset($fontPreload) para preloads; para outros CSS ou fontes publicados, use $cover->asset($assets->path('css/nome.css')). Durante o build, esses recursos são servidos por um php -S temporário sobre dist/. Use cover: false para não gerar o arquivo. Em MDX, o campo participa da cascata de _defaults.yaml; itens de Collection também podem herdá-lo de defaults em _collection.yaml. A página-mãe configura a própria cover em seu metadata e não transmite esse valor automaticamente aos itens. Veja o fluxo completo, incluindo layout e CSS da imagem, em Personalizar templates, componentes e covers.
Robots
robots aceita index, noindex, follow e nofollow, separados por vírgula. A saída é normalizada para uma diretiva de indexação e uma de links. Uma rota com noindex não entra no sitemap ou llms; páginas de erro nunca são indexáveis.
Sitemap
sitemap:
priority: 0.7
changefreq: monthly
Os dois campos são obrigatórios no bloco. priority é número entre 0 e 1. changefreq aceita always, hourly, daily, weekly, monthly, yearly ou never.
Social
social:
image: https://cdn.example.com/card.png
url: https://example.com/url-social
openGraph:
type: article
article:
publishedTime: "2026-08-17T10:00:00-03:00"
modifiedTime: "2026-08-17T11:00:00-03:00"
expirationTime: null
author:
- https://example.com/autores/ana
section: Engenharia
tag:
- php
- blade
twitterCard:
card: summary_large_image
social.image e social.url são strings ou null. openGraph.type e twitterCard.card são validados somente como strings ou null. No bloco article, datas e section são strings ou null; author e tag precisam ser arrays, mas o tipo de cada elemento não é validado.
Quando openGraph existe sem type, seu default é article. Quando twitterCard existe sem card, seu default tipado é summary. Sem bloco social, os defaults automáticos usam a capa da rota e Twitter summary_large_image. Com cover: false, os grupos Open Graph e Twitter são omitidos, exceto quando social.image fornece outra imagem.
Efeitos no head
Toda página normal recebe charset UTF-8, viewport, regras declarativas de prerender com eagerness moderate, três favicons, canonical, hreflang derivado de site.locale (normalizado para BCP47, como pt_BR → pt-BR) e theme color. Links autorais com data-prefetch podem gerar no máximo dois prefetches por página. Páginas de erro recebem noindex, mas omitem canonical e hreflang. Open Graph e Twitter Card são incluídos quando existe uma cover gerada ou social.image explícito.
Na home, <title> é o título puro. Nas demais rotas, ele é title | site.name. description, quando presente, gera meta description e alimenta os cards.
Sem social.image, a imagem é /cover.png na home ou /<rota>/cover.png. Páginas de erro seguem a mesma regra e também recebem o arquivo correspondente. URLs root-relative em social.image e social.url recebem site.basePath; URLs absolutas permanecem intactas. Canonical deriva de site.domain, site.basePath e da rota com barra final.
Open Graph recebe site.locale e site.name. Twitter recebe site.twitter.site, site.twitter.creator e alt automático. JSON-LD WebSite aparece somente na home. JSON-LD Article aparece quando social.openGraph.article existe.
Arquivos globais
sitemap.xml inclui todas as rotas indexáveis e usa data de modificação do Git. A política de fallback é configurada em content.dates.policy; mtime usa o mtime com warning, fail interrompe o build e explicit exige o campo date.
robots.txt permite crawling, aponta ao sitemap, explicita crawlers de IA conhecidos e emite Content-Signal: ai-train=yes, search=yes, ai-input=yes. Ele não é derivado do robots de cada página.
llms.txt usa nome e descrição do site. Toda rota indexável reconhecida como página-mãe gera uma seção de resumos; as demais rotas não cobertas aparecem em Pages. Uma Collection com llms_full acrescenta nessa seção um link para seu conteúdo Markdown consolidado; uma Collection com mdx_source: true acrescenta um link .mdx ao lado de cada item.
llms.about adiciona prosa e llms.external_resources adiciona links externos conforme a Configuração.