Schema-Markup-Mechanismus für templated Sites (custom Sites bleiben unberührt).
- templates/base.html: {{schema_jsonld}} Slot im <head>.
- site.yaml: optionaler `schema:` Block. `type:` -> `@type`, `@context`
wird automatisch ergänzt. Fehlt der Block, bleibt der Slot leer.
- render.sh: liest schema via `yq -o=json`, transformiert mit jq, fügt
Template-Default für `type` ein (person-* -> Person, product-* -> Product,
editorial -> Article).
- render.sh: literal-string replace (lreplace) statt awk gsub für multiline-
Substitution. Behebt nebenbei einen latenten Bug, bei dem `©` im
template_body als `{{body}}copy;` corrupted wurde (gsub interpretierte
`&` als matched text).
- tests/schema-test.sh + 4 Fixtures: validiert explicit type, Template-
Defaults für 3 Templates, leerer Slot ohne schema-Block.
- README.md: Schema.org-Konvention dokumentiert (Block-Format, Defaults,
Custom-Sites-Hinweis, Schema.org-Validator-Link).
QA: ./build.sh -> 59 sites OK, custom Sites byte-identical zur Source,
3 templated Fixtures rendern valides JSON-LD (Person/Product/Article),
no-schema-Fixture produziert keinen <script>-Tag.
Closes #9 nicht - head reviewed + merged.
26 lines
602 B
YAML
26 lines
602 B
YAML
domain: example-editorial.de
|
|
template: editorial
|
|
title: "Über das Schreiben — ein Manifest"
|
|
description: "Gedanken zum Schreiben in Zeiten von KI."
|
|
lang: de
|
|
|
|
vars:
|
|
name: "Anonym"
|
|
tagline: "Gedanken zum Schreiben in Zeiten von KI."
|
|
accent: "#c9a84c"
|
|
accent_light: "rgba(201, 168, 76, 0.1)"
|
|
font_primary: "Inter"
|
|
font_secondary: "Newsreader"
|
|
content: |
|
|
Schreiben ist denken auf Papier.
|
|
|
|
Der erste Satz ist der schwerste.
|
|
|
|
schema:
|
|
headline: "Über das Schreiben — ein Manifest"
|
|
author:
|
|
"@type": Person
|
|
name: "Anonym"
|
|
datePublished: "2026-04-30"
|
|
inLanguage: "de"
|