diff --git a/.planning/phases/33-seo-output-audit-and-content/33-CONTEXT.md b/.planning/phases/33-seo-output-audit-and-content/33-CONTEXT.md index 3bce5729..13d2f0da 100644 --- a/.planning/phases/33-seo-output-audit-and-content/33-CONTEXT.md +++ b/.planning/phases/33-seo-output-audit-and-content/33-CONTEXT.md @@ -35,6 +35,11 @@ The split of responsibility from 32-CONTEXT still holds: the backend plugins own ### Planning (Jakub, 2026-10-25) - **About 12–15 smaller plans: an exception to the lean-planning rule.** The planner must not merge them into 3–4 plans. The other project rules still apply: the plan list with a one-line scope each is shown to Jakub before PLAN.md files are written, and unit tests are the last plan. - **Mode:** mvp (ROADMAP.md). +- **H1 in Journal content is a per-site setting (Jakub, 2026-10-28; amends D-50 and D-51).** Journal serves many kinds of sites, and the plugin cannot know whether the page template renders the post title as the H1, so the "no H1 in body content" rule must not be hard-wired. A Journal setting (backend settings and config key) switches it: + - **On (default, D-50 as decided):** H1 to H2 conversion on every write path with the save notice, the editor offers H2–H4, `journal:fix-headings` is available, and the journal layer's htmlGate demotes h1 to h2. + - **Off:** content H1 is stored and rendered as written; the editor offers H1; `journal:fix-headings` refuses to run and says why; the layer does not demote h1 (it reads the setting from the Journal API, not from a layer option). + - The live heading outline (D-51) works in both modes. The crawler keeps checking the rendered page (one H1 per page); the CMS-side "H1 in content" check runs only when the setting is on. + - Where the setting lives (Journal, not the SEO plugin) follows D-96: the content plugin owns its own fixes. - **The framework still carries no SEO code (D-90).** If Phase 33 needs a new framework seam, it must be generic and additive (D-106 rules: patch tag, no breaking change); D-103 rules out a fourth seam for redirects and verification files. ### Decisions implemented entirely in Phase 33 @@ -54,8 +59,8 @@ Section numbers refer to 32-CONTEXT.md. | D-44 | Schema type, type-dependent fields, custom JSON-LD | 7 | | D-45 | Publisher in the global settings | 7 | | D-46 | Validation in admin, crawler and Rich Results link | 7 | -| D-50 | No H1 in body content, including Journal's conversion (D-96) | 8 | -| D-51 | Live heading outline and crawler checks | 8 | +| D-50 | No H1 in body content, including Journal's conversion (D-96); behind a Journal setting, see Planning | 8 | +| D-51 | Live heading outline and crawler checks; editor heading levels follow the Journal setting, see Planning | 8 | | D-52 | One heading convention in the layers | 8 | | D-55 | hreflang in head and sitemaps from one source | 9 | | D-56 | `x-default` points to the default locale | 9 |